From 1db3449be498041d5a95e4a7005212d37e11a386 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 02:02:08 +0200 Subject: [PATCH] Remove scene exit handling and related entities --- .../commit-transform-session-command.ts | 19 +++------ src/controls/control-surface.ts | 5 +-- .../project-schedule-control-options.ts | 41 ++++++++++--------- src/viewport-three/viewport-focus.ts | 2 - 4 files changed, 27 insertions(+), 40 deletions(-) diff --git a/src/commands/commit-transform-session-command.ts b/src/commands/commit-transform-session-command.ts index 8f731e0b..90ee991c 100644 --- a/src/commands/commit-transform-session-command.ts +++ b/src/commands/commit-transform-session-command.ts @@ -14,7 +14,6 @@ import { createPlayerStartEntity, createPointLightEntity, createSceneEntryEntity, - createSceneExitEntity, createSoundEmitterEntity, createSpotLightEntity, createTeleportTargetEntity, @@ -60,11 +59,11 @@ function createTransformCommandLabel(session: ActiveTransformSession): string { ? "trigger volume" : session.target.entityKind === "sceneEntry" ? "scene entry" - : session.target.entityKind === "teleportTarget" - ? "teleport target" - : session.target.entityKind === "interactable" - ? "interactable" - : "scene exit"; + : session.target.entityKind === "teleportTarget" + ? "teleport target" + : session.target.entityKind === "interactable" + ? "interactable" + : "entity"; break; case "modelInstance": break; @@ -280,14 +279,6 @@ export function createCommitTransformSessionCommand(document: SceneDocument, ses }), label: createTransformCommandLabel(session) }); - case "sceneExit": - return createUpsertEntityCommand({ - entity: createSceneExitEntity({ - ...entity, - position: session.preview.position - }), - label: createTransformCommandLabel(session) - }); } } } diff --git a/src/controls/control-surface.ts b/src/controls/control-surface.ts index c9b88a45..04c408cf 100644 --- a/src/controls/control-surface.ts +++ b/src/controls/control-surface.ts @@ -6,8 +6,7 @@ export const CONTROL_ENTITY_TARGET_KINDS = [ "soundEmitter" ] as const; export const CONTROL_INTERACTION_TARGET_KINDS = [ - "interactable", - "sceneExit" + "interactable" ] as const; export const CONTROL_CAPABILITY_KINDS = [ "projectTimePause", @@ -1874,8 +1873,6 @@ function formatTargetKindLabel( return "Sound Emitter"; case "interactable": return "Interactable"; - case "sceneExit": - return "Scene Exit"; } } diff --git a/src/scheduler/project-schedule-control-options.ts b/src/scheduler/project-schedule-control-options.ts index 20a08f2f..0484925c 100644 --- a/src/scheduler/project-schedule-control-options.ts +++ b/src/scheduler/project-schedule-control-options.ts @@ -16,6 +16,7 @@ import { createSetLightEnabledControlEffect, createSetLightIntensityControlEffect, createSetModelInstanceVisibleControlEffect, + createProjectGlobalControlTargetRef, createSetSoundVolumeControlEffect, createSetSunLightColorControlEffect, createSetSunLightIntensityControlEffect, @@ -98,13 +99,14 @@ export interface ProjectScheduleTargetOption { } const PROJECT_SCHEDULE_GROUP_ORDER: Record = { - "Scene Lighting": 0, - Actors: 1, - "Model Instances": 2, - "Sound Emitters": 3, - Interactions: 4, - Lights: 5, - Other: 6 + Project: 0, + "Scene Lighting": 1, + Actors: 2, + "Model Instances": 3, + "Sound Emitters": 4, + Interactions: 5, + Lights: 6, + Other: 7 }; const PROJECT_SCHEDULE_EFFECT_OPTIONS: Record< @@ -265,6 +267,17 @@ function createSceneLightingTargetOption( }; } +function createProjectEventTargetOption(): ProjectScheduleTargetOption { + return { + key: getControlTargetRefKey(createProjectGlobalControlTargetRef()), + target: createProjectGlobalControlTargetRef(), + label: "Project Events", + subtitle: "Timeline-triggered sequences and global one-shot events.", + groupLabel: "Project", + defaults: {} + }; +} + function createFallbackProjectScheduleTargetOption( target: ControlTargetRef ): ProjectScheduleTargetOption { @@ -289,6 +302,7 @@ export function listProjectScheduleTargetOptions( } }; + pushOption(createProjectEventTargetOption()); pushOption(createSceneLightingTargetOption(projectDocument)); for (const actor of listProjectNpcActors(projectDocument)) { @@ -400,19 +414,6 @@ export function listProjectScheduleTargetOptions( }); break; } - case "sceneExit": { - const target = createInteractionControlTargetRef("sceneExit", entity.id); - - pushOption({ - key: getControlTargetRefKey(target), - target, - label, - subtitle: getSceneTargetSubtitle(scene), - groupLabel: "Interactions", - defaults: {} - }); - break; - } case "pointLight": { const target = createLightControlTargetRef("pointLight", entity.id); diff --git a/src/viewport-three/viewport-focus.ts b/src/viewport-three/viewport-focus.ts index ac3db939..9e085a87 100644 --- a/src/viewport-three/viewport-focus.ts +++ b/src/viewport-three/viewport-focus.ts @@ -353,7 +353,6 @@ function includeEntity(bounds: FocusBoundsAccumulator, entity: EntityInstance) { includeTeleportTarget(bounds, entity.position); break; case "interactable": - case "sceneExit": includeSphereEntity(bounds, entity.position, Math.max(0.4, entity.radius)); break; } @@ -376,7 +375,6 @@ function createEntityFocusTarget(entity: EntityInstance): ViewportFocusTarget { case "teleportTarget": return createTeleportTargetFocusTarget(entity.position); case "interactable": - case "sceneExit": return createSphereEntityFocusTarget(entity.position, entity.radius, 0.65); } }