From 94e411aa7aadb025c64ca8d057b7b9da08a50e8c Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sun, 2 Jun 2024 02:34:33 +0200 Subject: [PATCH] add beforeStart callback --- packages/core/cyclist.mjs | 20 ++++++++++++++++---- packages/core/repl.mjs | 8 +++++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/core/cyclist.mjs b/packages/core/cyclist.mjs index 08b89375..472e83a8 100644 --- a/packages/core/cyclist.mjs +++ b/packages/core/cyclist.mjs @@ -8,8 +8,19 @@ import createClock from './zyklus.mjs'; import { logger } from './logger.mjs'; export class Cyclist { - constructor({ interval, onTrigger, onToggle, onError, getTime, latency = 0.1, setInterval, clearInterval }) { + constructor({ + interval, + onTrigger, + onToggle, + onError, + getTime, + latency = 0.1, + setInterval, + clearInterval, + beforeStart, + }) { this.started = false; + this.beforeStart = beforeStart; this.cps = 0.5; this.num_ticks_since_cps_change = 0; this.lastTick = 0; // absolute time when last tick (clock callback) happened @@ -82,7 +93,8 @@ export class Cyclist { this.started = v; this.onToggle?.(v); } - start() { + async start() { + await this.beforeStart?.(); this.num_ticks_since_cps_change = 0; this.num_cycles_at_cps_change = 0; if (!this.pattern) { @@ -103,10 +115,10 @@ export class Cyclist { this.lastEnd = 0; this.setStarted(false); } - setPattern(pat, autostart = false) { + async setPattern(pat, autostart = false) { this.pattern = pat; if (autostart && !this.started) { - this.start(); + await this.start(); } } setCps(cps = 0.5) { diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs index 3f3f5f24..f21ab847 100644 --- a/packages/core/repl.mjs +++ b/packages/core/repl.mjs @@ -10,6 +10,7 @@ export function repl({ defaultOutput, onEvalError, beforeEval, + beforeStart, afterEval, getTime, transpiler, @@ -53,6 +54,7 @@ export function repl({ }, setInterval, clearInterval, + beforeStart, }; // NeoCyclist uses a shared worker to communicate between instances, which is not supported on mobile chrome @@ -69,9 +71,9 @@ export function repl({ return silence; }; - const setPattern = (pattern, autostart = true) => { + const setPattern = async (pattern, autostart = true) => { pattern = editPattern?.(pattern) || pattern; - scheduler.setPattern(pattern, autostart); + await scheduler.setPattern(pattern, autostart); }; setTime(() => scheduler.now()); // TODO: refactor? @@ -159,7 +161,7 @@ export function repl({ throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.')); } logger(`[eval] code updated`); - setPattern(pattern, autostart); + await setPattern(pattern, autostart); updateState({ miniLocations: meta?.miniLocations || [], widgets: meta?.widgets || [],