From dfc8cdd2964eb07d402447b9b09dc6f36076d711 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 11 Apr 2026 22:14:12 +0200 Subject: [PATCH] Add test for diving as submerged water locomotion --- .../unit/player-controller-telemetry.test.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/unit/player-controller-telemetry.test.ts b/tests/unit/player-controller-telemetry.test.ts index 19b992da..0e72a337 100644 --- a/tests/unit/player-controller-telemetry.test.ts +++ b/tests/unit/player-controller-telemetry.test.ts @@ -166,4 +166,41 @@ describe("player-controller-telemetry", () => { expect(telemetry.hooks.animation.inWater).toBe(true); expect(telemetry.hooks.animation.signals.enteredWater).toBe(true); }); + + it("treats diving as submerged water locomotion for hook consumers", () => { + const runtimeScene = buildRuntimeSceneFromDocument( + createEmptySceneDocument() + ); + const telemetry = createPlayerControllerTelemetry({ + feetPosition: { x: 0, y: 0.5, z: 0 }, + eyePosition: { x: 0, y: 2, z: 0 }, + grounded: false, + locomotionState: createLocomotionState({ + locomotionMode: "diving", + airborneKind: null, + grounded: false, + gait: "idle", + inputMagnitude: 0, + planarSpeed: 0, + verticalVelocity: -runtimeScene.playerMovement.moveSpeed + }), + movement: runtimeScene.playerMovement, + inWaterVolume: true, + cameraSubmerged: true, + inFogVolume: true, + pointerLocked: false, + spawn: runtimeScene.spawn, + previousLocomotionState: createLocomotionState({ + locomotionMode: "swimming", + grounded: false + }), + previousInWaterVolume: true, + jumpStarted: false, + headBump: false + }); + + expect(telemetry.hooks.camera.swimming).toBe(true); + expect(telemetry.hooks.camera.underwaterAmount).toBe(1); + expect(telemetry.hooks.animation.locomotionMode).toBe("diving"); + }); }); \ No newline at end of file