From 579f16e63f5b5775bf25bc4e5e12a5925a6dc097 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 06:24:25 +0200 Subject: [PATCH] Add functions to update project sequence actor path properties --- src/app/App.tsx | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/src/app/App.tsx b/src/app/App.tsx index 715ed9d2..3ab76d72 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -5144,6 +5144,89 @@ export function App({ store, initialStatusMessage }: AppProps) { ); }; + const updateProjectSequenceControlStepPathId = ( + sequenceId: string, + stepIndex: number, + pathId: string + ) => { + updateProjectSequenceStep( + sequenceId, + stepIndex, + "Set project sequence actor path", + "Updated sequence actor path.", + (step) => { + if ( + step.type !== "controlEffect" || + step.effect.type !== "followActorPath" + ) { + throw new Error( + "The current sequence control step does not expose an actor path." + ); + } + + step.effect.pathId = pathId; + } + ); + }; + + const updateProjectSequenceControlStepPathSpeed = ( + sequenceId: string, + stepIndex: number, + speed: number + ) => { + updateProjectSequenceStep( + sequenceId, + stepIndex, + "Set project sequence actor path speed", + "Updated sequence actor path speed.", + (step) => { + if ( + step.type !== "controlEffect" || + step.effect.type !== "followActorPath" + ) { + throw new Error( + "The current sequence control step does not expose an actor path speed." + ); + } + + if (!Number.isFinite(speed) || speed <= 0) { + throw new Error( + "Actor path speed must be a finite number greater than zero." + ); + } + + step.effect.speed = speed; + } + ); + }; + + const updateProjectSequenceControlStepPathLoop = ( + sequenceId: string, + stepIndex: number, + loop: boolean + ) => { + updateProjectSequenceStep( + sequenceId, + stepIndex, + "Set project sequence actor path loop", + loop + ? "Sequence actor path now loops." + : "Sequence actor path now clamps at the end.", + (step) => { + if ( + step.type !== "controlEffect" || + step.effect.type !== "followActorPath" + ) { + throw new Error( + "The current sequence control step does not expose actor path looping." + ); + } + + step.effect.loop = loop; + } + ); + }; + const updateProjectSequenceDialogueStepDialogueId = ( sequenceId: string, stepIndex: number, @@ -11745,6 +11828,13 @@ export function App({ store, initialStatusMessage }: AppProps) { onSetControlStepAnimationLoop={ updateProjectSequenceControlStepAnimationLoop } + onSetControlStepPathId={updateProjectSequenceControlStepPathId} + onSetControlStepPathSpeed={ + updateProjectSequenceControlStepPathSpeed + } + onSetControlStepPathLoop={ + updateProjectSequenceControlStepPathLoop + } onSetDialogueStepDialogueId={ updateProjectSequenceDialogueStepDialogueId }