From 24e170ded5543565c682d5abb68004f160856ea4 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Thu, 23 Apr 2026 08:16:57 +0200 Subject: [PATCH] auto-git: [change] tests/domain/runtime-interaction-system.test.ts --- .../domain/runtime-interaction-system.test.ts | 88 ++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/tests/domain/runtime-interaction-system.test.ts b/tests/domain/runtime-interaction-system.test.ts index 53689c36..288ad447 100644 --- a/tests/domain/runtime-interaction-system.test.ts +++ b/tests/domain/runtime-interaction-system.test.ts @@ -1,6 +1,11 @@ import { describe, expect, it } from "vitest"; -import { createEmptyRuntimeControlSurfaceDefinition } from "../../src/controls/control-surface"; +import { + createActivateCameraRigOverrideControlEffect, + createCameraRigControlTargetRef, + createClearCameraRigOverrideControlEffect, + createEmptyRuntimeControlSurfaceDefinition +} from "../../src/controls/control-surface"; import { createEmptyProjectSequenceLibrary, createProjectSequence @@ -10,6 +15,7 @@ import { createPlayerStartMovementTemplate } from "../../src/entities/entity-instances"; import { + createControlInteractionLink, createPlayAnimationInteractionLink, createPlaySoundInteractionLink, createRunSequenceInteractionLink, @@ -354,6 +360,86 @@ describe("RuntimeInteractionSystem", () => { ]); }); + it("dispatches shared camera control effects on Trigger Volume enter", () => { + const runtimeScene = createRuntimeSceneFixture(); + runtimeScene.interactionLinks = [ + createControlInteractionLink({ + id: "link-trigger-camera-override", + sourceEntityId: "entity-trigger-main", + trigger: "enter", + effect: createActivateCameraRigOverrideControlEffect({ + target: createCameraRigControlTargetRef("entity-camera-rig-main") + }) + }) + ]; + + const interactionSystem = new RuntimeInteractionSystem(); + const dispatches: string[] = []; + + interactionSystem.updatePlayerPosition( + { + x: 0, + y: 0, + z: 0 + }, + runtimeScene, + createDispatcher({ + dispatchControlEffect: (effect, link) => { + dispatches.push(`${link.id}:${effect.type}:${effect.target.entityId}`); + } + }) + ); + + interactionSystem.updatePlayerPosition( + { + x: 0.25, + y: 0, + z: 0.25 + }, + runtimeScene, + createDispatcher({ + dispatchControlEffect: (effect, link) => { + dispatches.push(`${link.id}:${effect.type}:${effect.target.entityId}`); + } + }) + ); + + expect(dispatches).toEqual([ + "link-trigger-camera-override:activateCameraRigOverride:entity-camera-rig-main" + ]); + }); + + it("dispatches shared camera control effects on interactable click", () => { + const runtimeScene = createRuntimeSceneFixture(); + runtimeScene.interactionLinks = [ + createControlInteractionLink({ + id: "link-click-camera-clear", + sourceEntityId: "entity-interactable-console", + trigger: "click", + effect: createClearCameraRigOverrideControlEffect({ + target: createCameraRigControlTargetRef("entity-camera-rig-main") + }) + }) + ]; + + const interactionSystem = new RuntimeInteractionSystem(); + const dispatches: string[] = []; + + interactionSystem.dispatchClickInteraction( + "entity-interactable-console", + runtimeScene, + createDispatcher({ + dispatchControlEffect: (effect, link) => { + dispatches.push(`${link.id}:${effect.type}:${effect.target.entityId}`); + } + }) + ); + + expect(dispatches).toEqual([ + "link-click-camera-clear:clearCameraRigOverride:entity-camera-rig-main" + ]); + }); + it("dispatches visibility actions only when exiting an occupied Trigger Volume", () => { const runtimeScene = createRuntimeSceneFixture(); runtimeScene.interactionLinks = [