Update sequence clip reading to include startMinute, durationMinutes, and lane

This commit is contained in:
2026-04-15 00:46:56 +02:00
parent 133a83bcdb
commit a17b6fae05

View File

@@ -197,7 +197,11 @@ import {
createProjectSequence,
type ProjectSequenceLibrary
} from "../sequencer/project-sequences";
import type { SequenceClip } from "../sequencer/project-sequence-steps";
import {
DEFAULT_IMPULSE_SEQUENCE_CLIP_DURATION_MINUTES,
LEGACY_PROJECT_SEQUENCE_DURATION_MINUTES,
type SequenceClip
} from "../sequencer/project-sequence-steps";
import {
createScenePath,
createScenePathPoint,
@@ -3529,9 +3533,35 @@ function readProjectSequenceClip(value: unknown, label: string): SequenceClip {
throw new Error(`${label}.stepClass must be held or impulse.`);
}
const startMinute =
value.startMinute === undefined
? 0
: Math.trunc(expectNonNegativeFiniteNumber(value.startMinute, `${label}.startMinute`));
const durationMinutes =
value.durationMinutes === undefined
? stepClass === "held"
? LEGACY_PROJECT_SEQUENCE_DURATION_MINUTES
: DEFAULT_IMPULSE_SEQUENCE_CLIP_DURATION_MINUTES
: Math.max(
1,
Math.trunc(
expectPositiveFiniteNumber(
value.durationMinutes,
`${label}.durationMinutes`
)
)
);
const lane =
value.lane === undefined
? 0
: Math.trunc(expectNonNegativeFiniteNumber(value.lane, `${label}.lane`));
switch (type) {
case "controlEffect":
return {
startMinute,
durationMinutes,
lane,
stepClass,
type: "controlEffect",
effect: readControlEffect(value.effect, `${label}.effect`)
@@ -3542,6 +3572,9 @@ function readProjectSequenceClip(value: unknown, label: string): SequenceClip {
}
return {
startMinute,
durationMinutes,
lane,
stepClass: "impulse",
type: "startDialogue",
dialogueId: expectString(value.dialogueId, `${label}.dialogueId`)
@@ -3552,6 +3585,9 @@ function readProjectSequenceClip(value: unknown, label: string): SequenceClip {
}
return {
startMinute,
durationMinutes,
lane,
stepClass: "impulse",
type: "teleportPlayer",
targetEntityId: expectString(
@@ -3565,6 +3601,9 @@ function readProjectSequenceClip(value: unknown, label: string): SequenceClip {
}
return {
startMinute,
durationMinutes,
lane,
stepClass: "impulse",
type: "toggleVisibility",
targetBrushId: expectString(value.targetBrushId, `${label}.targetBrushId`),
@@ -3622,6 +3661,18 @@ function readProjectSequenceLibrary(
sequenceValue.title,
`${label}.sequences.${sequenceKey}.title`
),
durationMinutes:
sequenceValue.durationMinutes === undefined
? undefined
: Math.max(
1,
Math.trunc(
expectPositiveFiniteNumber(
sequenceValue.durationMinutes,
`${label}.sequences.${sequenceKey}.durationMinutes`
)
)
),
clips: clipsValue.map((clipValue, clipIndex) =>
readProjectSequenceClip(
clipValue,