From 6e5beaa54d4389674ac0f3aa213bf84449dfd08e Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 02:06:30 +0200 Subject: [PATCH] Add impulse routine resolution to project scheduler --- .../runtime-project-scheduler.ts | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/src/runtime-three/runtime-project-scheduler.ts b/src/runtime-three/runtime-project-scheduler.ts index a3114a7c..c4b926d0 100644 --- a/src/runtime-three/runtime-project-scheduler.ts +++ b/src/runtime-three/runtime-project-scheduler.ts @@ -505,7 +505,8 @@ export function resolveRuntimeProjectScheduleState(options: { pathsById: options.pathsById }) ), - controls: resolveRuntimeScheduledControlRoutines(options) + controls: resolveRuntimeScheduledControlRoutines(options), + impulses: resolveRuntimeScheduledImpulseRoutines(options) }; } @@ -555,6 +556,52 @@ function resolveRuntimeScheduledControlRoutines(options: { return resolved; } +function resolveRuntimeScheduledImpulseRoutines(options: { + scheduler: ProjectScheduler; + sequences: ProjectSequenceLibrary; + dayNumber: number; + timeOfDayHours: number; +}): RuntimeResolvedScheduledImpulseRoutine[] { + const activeRoutines = Object.values(options.scheduler.routines) + .filter( + (routine) => + routine.sequenceId !== null && + isProjectScheduleRoutineActiveAt( + routine, + options.dayNumber, + options.timeOfDayHours + ) + ) + .sort(compareProjectScheduleRoutinePriority); + const resolved: RuntimeResolvedScheduledImpulseRoutine[] = []; + + for (const routine of activeRoutines) { + if (routine.sequenceId === null) { + continue; + } + + const sequence = options.sequences.sequences[routine.sequenceId] ?? null; + + if (sequence === null) { + continue; + } + + const effects = getProjectSequenceImpulseSteps(sequence); + + if (effects.length === 0) { + continue; + } + + resolved.push({ + routineId: routine.id, + title: routine.title, + effects + }); + } + + return resolved; +} + export function applyRuntimeProjectScheduleToControlState( resolved: RuntimeResolvedControlState, schedule: RuntimeResolvedProjectScheduleState,