From abb0476a17ef869b9271666841266073b9758261 Mon Sep 17 00:00:00 2001 From: Kai Vogelgesang Date: Wed, 10 Nov 2021 00:57:05 +0100 Subject: [PATCH] Update --- boilerbloat/src/main/backend.ts | 70 ++++++++++++++++-------------- boilerbloat/src/main/main.ts | 6 +-- boilerbloat/src/patterns/chaser.ts | 6 +-- boilerbloat/src/patterns/proto.ts | 2 +- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/boilerbloat/src/main/backend.ts b/boilerbloat/src/main/backend.ts index e38a816..d897f1c 100644 --- a/boilerbloat/src/main/backend.ts +++ b/boilerbloat/src/main/backend.ts @@ -4,10 +4,13 @@ import { blackout } from '../patterns/blackout'; import { Pattern, PatternOutput, Time } from '../patterns/proto'; import { TestPattern } from '../patterns/test'; import rust, { BeatTrackerHandle, MovingHeadState, OutputHandle } from 'rust_native_module'; +import { ChaserPattern } from '../patterns/chaser'; type AppState = { patterns: { [key: string]: PatternOutput }, selectedPattern: string | null, + + beatProgress: number | null, }; class Backend { @@ -16,8 +19,10 @@ class Backend { dmxOutput: OutputHandle; patterns: Map; - patternOutputs: Map; - selectedPattern: string; + // patternOutputs: Map; + // selectedPattern: string; + + state: AppState; constructor() { @@ -50,61 +55,60 @@ class Backend { this.patterns = new Map(); this.patterns.set("test", new TestPattern()); + this.patterns.set("chaser", new ChaserPattern()); - this.patternOutputs = new Map(); - this.selectedPattern = "test"; + this.state = { + patterns: {}, + selectedPattern: null, + beatProgress: null, + } let time: Time = { absolute: 0, - beat_relative: null + beatRelative: this.state.beatProgress, } for (let [patternId, pattern] of this.patterns.entries()) { - this.patternOutputs.set(patternId, pattern.render(time)); + let patternOutput = pattern.render(time); + this.state.patterns[patternId] = patternOutput; } + ipcMain.handle('poll', async (_) => { + return this.getState(); + }); + } getState(): AppState { - let result: AppState = { - patterns: {}, - selectedPattern: this.selectedPattern, - } - - for (let [patternId, patternOutput] of this.patternOutputs) { - result.patterns[patternId] = patternOutput; - } - - return result; + return this.state; } update() { + + let beatProgress = this.beatTracker.getProgress(); + + if (beatProgress.type == 'some') { + this.state.beatProgress = beatProgress.value; + } else { + this.state.beatProgress = null; + } + let date = new Date(); let time: Time = { absolute: date.getTime() / 1000, - beat_relative: null, + beatRelative: this.state.beatProgress, } - // render all patterns - - if (!this.patterns) { - console.log("big oof?"); - throw new Error("???"); - } - - for (let [patternId, pattern] of this.patterns.entries()) { - this.patternOutputs.set(patternId, pattern.render(time)); - } - - // write selected pattern + // render all patterns and write selected pattern to DMX let output: Array = blackout; - if (this.selectedPattern !== null) { - let selectedPatternOutput = this.patternOutputs.get(this.selectedPattern) + for (let [patternId, pattern] of this.patterns.entries()) { + let patternOutput = pattern.render(time); + this.state.patterns[patternId] = patternOutput; - if (selectedPatternOutput) { - output = selectedPatternOutput; + if (patternId === this.state.selectedPattern && patternOutput) { + output = patternOutput; } } diff --git a/boilerbloat/src/main/main.ts b/boilerbloat/src/main/main.ts index aa08394..70af051 100644 --- a/boilerbloat/src/main/main.ts +++ b/boilerbloat/src/main/main.ts @@ -11,7 +11,7 @@ import 'core-js/stable'; import 'regenerator-runtime/runtime'; import path from 'path'; -import { app, BrowserWindow, ipcMain, shell } from 'electron'; +import { app, BrowserWindow, shell } from 'electron'; import { resolveHtmlPath } from './util'; import Backend from './backend'; @@ -19,10 +19,6 @@ let backend = new Backend(); let mainLoop = setInterval(() => { backend.update(); }, 20); -ipcMain.handle('poll', () => { - return backend.getState(); -}); - let mainWindow: BrowserWindow | null = null; const createWindow = async () => { diff --git a/boilerbloat/src/patterns/chaser.ts b/boilerbloat/src/patterns/chaser.ts index 42e464f..6f7ce88 100644 --- a/boilerbloat/src/patterns/chaser.ts +++ b/boilerbloat/src/patterns/chaser.ts @@ -4,11 +4,11 @@ import { Pattern, PatternOutput, Time } from './proto'; export class ChaserPattern implements Pattern { render(time: Time): PatternOutput { - if (time.beat_relative === null) { + if (time.beatRelative === null) { return null; } - let head_number = Math.ceil(time.beat_relative) % 4; + let head_number = Math.ceil(time.beatRelative) % 4; let template: MovingHeadState = { startAddress: 0, @@ -26,7 +26,7 @@ export class ChaserPattern implements Pattern { let result = []; for (let [i, startAddress] of [1, 15, 29, 43].entries()) { - result[i] = template; + result[i] = { ...template}; result[i].startAddress = startAddress; if (i === head_number) { diff --git a/boilerbloat/src/patterns/proto.ts b/boilerbloat/src/patterns/proto.ts index 1d6d4c9..a4a2909 100644 --- a/boilerbloat/src/patterns/proto.ts +++ b/boilerbloat/src/patterns/proto.ts @@ -2,7 +2,7 @@ import { MovingHeadState } from "rust_native_module"; export type Time = { absolute: number, - beat_relative: number | null, + beatRelative: number | null, }; export type PatternOutput = Array | null;