diff --git a/tests/serialization/scene-document-json.test.ts b/tests/serialization/scene-document-json.test.ts index 2691651f..4794f007 100644 --- a/tests/serialization/scene-document-json.test.ts +++ b/tests/serialization/scene-document-json.test.ts @@ -1,7 +1,10 @@ import { describe, expect, it } from "vitest"; import { + createActivateCameraRigOverrideControlEffect, createActorControlTargetRef, + createCameraRigControlTargetRef, + createClearCameraRigOverrideControlEffect, createFollowActorPathControlEffect, createPlayActorAnimationControlEffect, createSetActorPresenceControlEffect @@ -68,6 +71,7 @@ import { } from "../../src/entities/entity-instances"; import { createProjectScheduleRoutine } from "../../src/scheduler/project-scheduler"; import { + createControlInteractionLink, createPlayAnimationInteractionLink, createPlaySoundInteractionLink, createStopAnimationInteractionLink, @@ -119,6 +123,59 @@ describe("scene document JSON", () => { ); }); + it("round-trips camera rig control effects in interaction links, sequences, and scheduler routines", () => { + const cameraRig = createCameraRigEntity({ + id: "entity-camera-rig-main", + target: createCameraRigWorldPointTargetRef({ + x: 0, + y: 1.5, + z: 0 + }) + }); + const triggerVolume = createTriggerVolumeEntity({ + id: "entity-trigger-camera" + }); + const document = createEmptySceneDocument({ name: "Camera Control Scene" }); + document.entities[cameraRig.id] = cameraRig; + document.entities[triggerVolume.id] = triggerVolume; + document.interactionLinks["link-camera-activate"] = createControlInteractionLink( + { + id: "link-camera-activate", + sourceEntityId: triggerVolume.id, + effect: createActivateCameraRigOverrideControlEffect({ + target: createCameraRigControlTargetRef(cameraRig.id) + }) + } + ); + document.sequences.sequences["sequence-camera-clear"] = { + id: "sequence-camera-clear", + title: "Camera Clear", + steps: [ + { + stepClass: "held", + type: "controlEffect", + effect: createClearCameraRigOverrideControlEffect({ + target: createCameraRigControlTargetRef(cameraRig.id) + }) + } + ] + }; + document.scheduler.routines["routine-camera-activate"] = + createProjectScheduleRoutine({ + id: "routine-camera-activate", + title: "Camera Activate", + target: createCameraRigControlTargetRef(cameraRig.id), + sequenceId: "sequence-camera-clear", + effect: createActivateCameraRigOverrideControlEffect({ + target: createCameraRigControlTargetRef(cameraRig.id) + }) + }); + + expect(parseSceneDocumentJson(serializeSceneDocument(document))).toEqual( + document + ); + }); + it("migrates v70 scene documents by defaulting shader sky settings from the authored day background", () => { const document = createEmptySceneDocument({ name: "Legacy Shader Sky Scene"