Add visibility sequence effect handling in runtime-host.ts

This commit is contained in:
2026-04-15 01:40:18 +02:00
parent c730a1f4e5
commit 8b5d07bd23

View File

@@ -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);
},