Refactor project sequence handling and add whitebox brush geometry support

This commit is contained in:
2026-04-15 07:40:33 +02:00
parent d6c81008fe
commit bf662f76f2
8 changed files with 734 additions and 559 deletions

View File

@@ -4731,6 +4731,30 @@ export function App({ store, initialStatusMessage }: AppProps) {
};
};
const createProjectSequenceControlStepFromOption = (
targetKey: string,
effectOptionId: ProjectScheduleEffectOptionId,
previousStep?: Extract<ProjectSequence["effects"][number], { type: "controlEffect" }> | null
): Extract<ProjectSequence["effects"][number], { type: "controlEffect" }> => {
const targetOption = resolveSequenceControlTargetOption(targetKey);
if (targetOption === null) {
throw new Error("The selected sequence control target no longer exists.");
}
return {
stepClass: getProjectSequenceControlStepClassForEffectOptionId(
effectOptionId
),
type: "controlEffect",
effect: createProjectScheduleEffectFromOption({
targetOption,
effectOptionId,
previousEffect: previousStep?.effect ?? null
})
};
};
const updateProjectSequence = (
sequenceId: string,
label: string,
@@ -4837,16 +4861,19 @@ export function App({ store, initialStatusMessage }: AppProps) {
});
};
const handleAddProjectSequenceControlStep = (
const handleAddProjectSequenceControlEffect = (
sequenceId: string,
targetKey: string
targetKey: string,
effectOptionId: ProjectScheduleEffectOptionId
) => {
updateProjectSequence(
sequenceId,
"Add project sequence effect",
"Added sequence effect.",
(sequence) => {
sequence.effects.push(createDefaultProjectSequenceControlStep(targetKey));
sequence.effects.push(
createProjectSequenceControlStepFromOption(targetKey, effectOptionId)
);
}
);
};
@@ -11956,7 +11983,7 @@ export function App({ store, initialStatusMessage }: AppProps) {
}
)
}
onAddControlStep={handleAddProjectSequenceControlStep}
onAddControlEffect={handleAddProjectSequenceControlEffect}
onAddDialogueStep={handleAddProjectSequenceDialogueStep}
onAddTeleportStep={handleAddProjectSequenceTeleportStep}
onAddSceneTransitionStep={

View File

@@ -86,7 +86,11 @@ interface ProjectSequencerPaneProps {
onSetRoutinePriority(routineId: string, priority: number): void;
onSetRoutineSequenceId(routineId: string, sequenceId: string | null): void;
onSetSequenceTitle(sequenceId: string, title: string): void;
onAddControlStep(sequenceId: string, targetKey: string): void;
onAddControlEffect(
sequenceId: string,
targetKey: string,
effectOptionId: ProjectScheduleEffectOptionId
): void;
onAddDialogueStep(sequenceId: string, dialogueId: string): void;
onAddTeleportStep(sequenceId: string, targetEntityId: string): void;
onAddSceneTransitionStep(sequenceId: string, targetKey: string): void;
@@ -403,7 +407,7 @@ export function ProjectSequencerPane({
onSetRoutinePriority,
onSetRoutineSequenceId,
onSetSequenceTitle,
onAddControlStep,
onAddControlEffect,
onAddDialogueStep,
onAddTeleportStep,
onAddSceneTransitionStep,
@@ -673,7 +677,7 @@ export function ProjectSequencerPane({
onAddSequence={onAddSequence}
onDeleteSequence={onDeleteSequence}
onSetSequenceTitle={onSetSequenceTitle}
onAddControlStep={onAddControlStep}
onAddControlEffect={onAddControlEffect}
onAddDialogueStep={onAddDialogueStep}
onAddTeleportStep={onAddTeleportStep}
onAddSceneTransitionStep={onAddSceneTransitionStep}