From 8b5d07bd23c210815c20221e5810e1781a09e0a8 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 01:40:18 +0200 Subject: [PATCH] Add visibility sequence effect handling in runtime-host.ts --- src/runtime-three/runtime-host.ts | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/runtime-three/runtime-host.ts b/src/runtime-three/runtime-host.ts index d0bca717..64d584ac 100644 --- a/src/runtime-three/runtime-host.ts +++ b/src/runtime-three/runtime-host.ts @@ -88,6 +88,10 @@ import { } from "../document/world-settings"; import { getNpcColliderHeight } from "../entities/entity-instances"; import type { InteractionLink } from "../interactions/interaction-links"; +import type { + SequenceVisibilityMode, + SequenceVisibilityTarget +} from "../sequencer/project-sequence-steps"; import { FirstPersonNavigationController } from "./first-person-navigation-controller"; import type { @@ -3074,9 +3078,49 @@ export class RuntimeHost { return; } + if (this.runtimeScene !== null) { + const brush = + this.runtimeScene.brushes.find((candidate) => candidate.brushId === brushId) ?? + null; + + if (brush !== null) { + brush.visible = visible ?? !brush.visible; + } + } + mesh.visible = visible ?? !mesh.visible; } + private applyVisibilitySequenceEffect( + target: SequenceVisibilityTarget, + mode: SequenceVisibilityMode + ) { + const explicitVisible = + mode === "toggle" ? undefined : mode === "show"; + + if (target.kind === "brush") { + this.applyToggleBrushVisibilityAction(target.brushId, explicitVisible); + return; + } + + const runtimeModelInstance = + this.runtimeScene?.modelInstances.find( + (candidate) => candidate.instanceId === target.modelInstanceId + ) ?? null; + const currentVisible = + runtimeModelInstance?.visible ?? + this.modelRenderObjects.get(target.modelInstanceId)?.visible ?? + true; + + this.applyModelInstanceVisibilityControl( + { + kind: "modelInstance", + modelInstanceId: target.modelInstanceId + }, + explicitVisible ?? !currentVisible + ); + } + private applyPlayAnimationAction( instanceId: string, clipName: string, @@ -3133,6 +3177,9 @@ export class RuntimeHost { toggleBrushVisibility: (brushId, visible) => { this.applyToggleBrushVisibilityAction(brushId, visible); }, + setVisibility: (target, mode) => { + this.applyVisibilitySequenceEffect(target, mode); + }, playAnimation: (instanceId, clipName, loop) => { this.applyPlayAnimationAction(instanceId, clipName, loop); },