diff --git a/src/sequencer/project-sequence-steps.ts b/src/sequencer/project-sequence-steps.ts index 0bb3ee9c..2bf495b0 100644 --- a/src/sequencer/project-sequence-steps.ts +++ b/src/sequencer/project-sequence-steps.ts @@ -42,7 +42,7 @@ export interface ToggleVisibilitySequenceStep { type SequenceDefinitionLike = { id: string; - steps: SequenceStep[]; + clips: SequenceClip[]; }; type SequenceLibraryLike = { @@ -57,46 +57,55 @@ export type ImpulseSequenceStep = | TeleportPlayerSequenceStep | ToggleVisibilitySequenceStep; -export type SequenceStep = HeldSequenceStep | ImpulseSequenceStep; +export type SequenceClip = HeldSequenceStep | ImpulseSequenceStep; +export type SequenceStep = SequenceClip; -export function cloneSequenceStep(step: SequenceStep): SequenceStep { - switch (step.type) { +export function cloneSequenceClip(clip: SequenceClip): SequenceClip { + switch (clip.type) { case "controlEffect": return { - stepClass: step.stepClass, + stepClass: clip.stepClass, type: "controlEffect", - effect: cloneControlEffect(step.effect) + effect: cloneControlEffect(clip.effect) }; case "startDialogue": return { stepClass: "impulse", type: "startDialogue", - dialogueId: step.dialogueId + dialogueId: clip.dialogueId }; case "teleportPlayer": return { stepClass: "impulse", type: "teleportPlayer", - targetEntityId: step.targetEntityId + targetEntityId: clip.targetEntityId }; case "toggleVisibility": return { stepClass: "impulse", type: "toggleVisibility", - targetBrushId: step.targetBrushId, - visible: step.visible + targetBrushId: clip.targetBrushId, + visible: clip.visible }; } } -export function cloneSequenceSteps(steps: SequenceStep[]): SequenceStep[] { - return steps.map(cloneSequenceStep); +export function cloneSequenceStep(step: SequenceStep): SequenceStep { + return cloneSequenceClip(step); } -export function getSequenceStepLabel(step: SequenceStep): string { - switch (step.type) { +export function cloneSequenceClips(clips: SequenceClip[]): SequenceClip[] { + return clips.map(cloneSequenceClip); +} + +export function cloneSequenceSteps(steps: SequenceStep[]): SequenceStep[] { + return cloneSequenceClips(steps); +} + +export function getSequenceClipLabel(clip: SequenceClip): string { + switch (clip.type) { case "controlEffect": - return `${step.stepClass === "held" ? "Held" : "Impulse"}: ${getControlEffectLabel(step.effect)}`; + return `${clip.stepClass === "held" ? "Held" : "Impulse"}: ${getControlEffectLabel(clip.effect)}`; case "startDialogue": return "Impulse: Start Dialogue"; case "teleportPlayer": @@ -106,37 +115,72 @@ export function getSequenceStepLabel(step: SequenceStep): string { } } +export function getSequenceStepLabel(step: SequenceStep): string { + return getSequenceClipLabel(step); +} + export function getHeldSequenceSteps( steps: readonly SequenceStep[] ): HeldSequenceStep[] { - return steps - .filter((step): step is HeldSequenceStep => step.stepClass === "held") - .map(cloneSequenceStep) as HeldSequenceStep[]; + return getHeldSequenceClips(steps); } export function getImpulseSequenceSteps( steps: readonly SequenceStep[] ): ImpulseSequenceStep[] { - return steps - .filter((step): step is ImpulseSequenceStep => step.stepClass === "impulse") - .map(cloneSequenceStep) as ImpulseSequenceStep[]; + return getImpulseSequenceClips(steps); +} + +export function getHeldSequenceClips( + clips: readonly SequenceClip[] +): HeldSequenceStep[] { + return clips + .filter((clip): clip is HeldSequenceStep => clip.stepClass === "held") + .map(cloneSequenceClip) as HeldSequenceStep[]; +} + +export function getImpulseSequenceClips( + clips: readonly SequenceClip[] +): ImpulseSequenceStep[] { + return clips + .filter((clip): clip is ImpulseSequenceStep => clip.stepClass === "impulse") + .map(cloneSequenceClip) as ImpulseSequenceStep[]; } export function getProjectSequenceHeldSteps( sequence: SequenceDefinitionLike ): HeldSequenceStep[] { - return getHeldSequenceSteps(sequence.steps); + return getProjectSequenceHeldClips(sequence); } export function getProjectSequenceImpulseSteps( sequence: SequenceDefinitionLike ): ImpulseSequenceStep[] { - return getImpulseSequenceSteps(sequence.steps); + return getProjectSequenceImpulseClips(sequence); +} + +export function getProjectSequenceHeldClips( + sequence: SequenceDefinitionLike +): HeldSequenceStep[] { + return getHeldSequenceClips(sequence.clips); +} + +export function getProjectSequenceImpulseClips( + sequence: SequenceDefinitionLike +): ImpulseSequenceStep[] { + return getImpulseSequenceClips(sequence.clips); } export function getInteractionLinkImpulseSteps( link: InteractionLink, sequenceLibrary?: SequenceLibraryLike | null +): ImpulseSequenceStep[] { + return getInteractionLinkImpulseClips(link, sequenceLibrary); +} + +export function getInteractionLinkImpulseClips( + link: InteractionLink, + sequenceLibrary?: SequenceLibraryLike | null ): ImpulseSequenceStep[] { const controlEffect = getInteractionActionControlEffect(link.action); @@ -179,7 +223,7 @@ export function getInteractionLinkImpulseSteps( case "runSequence": { const sequence = sequenceLibrary?.sequences[link.action.sequenceId] ?? null; - return sequence === null ? [] : getProjectSequenceImpulseSteps(sequence); + return sequence === null ? [] : getProjectSequenceImpulseClips(sequence); } case "playAnimation": case "stopAnimation": @@ -196,18 +240,32 @@ export function getInteractionLinkSequenceSteps( link: InteractionLink, sequenceLibrary?: SequenceLibraryLike | null ): SequenceStep[] { - return getInteractionLinkImpulseSteps(link, sequenceLibrary); + return getInteractionLinkSequenceClips(link, sequenceLibrary); +} + +export function getInteractionLinkSequenceClips( + link: InteractionLink, + sequenceLibrary?: SequenceLibraryLike | null +): SequenceClip[] { + return getInteractionLinkImpulseClips(link, sequenceLibrary); } export function getProjectScheduleRoutineHeldSteps( routine: ProjectScheduleRoutine, sequenceLibrary?: SequenceLibraryLike | null +): HeldSequenceStep[] { + return getProjectScheduleRoutineHeldClips(routine, sequenceLibrary); +} + +export function getProjectScheduleRoutineHeldClips( + routine: ProjectScheduleRoutine, + sequenceLibrary?: SequenceLibraryLike | null ): HeldSequenceStep[] { if (routine.sequenceId !== null) { const sequence = sequenceLibrary?.sequences[routine.sequenceId] ?? null; if (sequence !== null) { - return getProjectSequenceHeldSteps(sequence); + return getProjectSequenceHeldClips(sequence); } } @@ -222,7 +280,14 @@ export function getProjectScheduleRoutineSequenceSteps( routine: ProjectScheduleRoutine, sequenceLibrary?: SequenceLibraryLike | null ): SequenceStep[] { - return getProjectScheduleRoutineHeldSteps(routine, sequenceLibrary); + return getProjectScheduleRoutineSequenceClips(routine, sequenceLibrary); +} + +export function getProjectScheduleRoutineSequenceClips( + routine: ProjectScheduleRoutine, + sequenceLibrary?: SequenceLibraryLike | null +): SequenceClip[] { + return getProjectScheduleRoutineHeldClips(routine, sequenceLibrary); } export function getHeldSequenceControlEffects(