From 94a806c2e7ab07f23e1322594ba5562093bfbf11 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 14 Apr 2026 22:39:55 +0200 Subject: [PATCH] Add test case to ignore mouse look while input is suspended --- ...first-person-navigation-controller.test.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/unit/first-person-navigation-controller.test.ts b/tests/unit/first-person-navigation-controller.test.ts index 875f7443..8aa83287 100644 --- a/tests/unit/first-person-navigation-controller.test.ts +++ b/tests/unit/first-person-navigation-controller.test.ts @@ -104,6 +104,7 @@ function createRuntimeControllerContext( ) => ({ ...desiredCameraPosition }), + isInputSuspended: () => false, setRuntimeMessage: vi.fn(), setPlayerControllerTelemetry: vi.fn() } @@ -221,6 +222,34 @@ describe("FirstPersonNavigationController", () => { }); }); + it("ignores mouse look while input is suspended", () => { + const { context, domElement } = createRuntimeControllerContext(); + const controller = new FirstPersonNavigationController(); + + context.isInputSuspended = () => true; + Object.defineProperty(document, "pointerLockElement", { + configurable: true, + get: () => domElement + }); + + controller.activate(context); + + const initialQuaternion = context.camera.quaternion.clone(); + document.dispatchEvent( + new MouseEvent("mousemove", { + movementX: 40, + movementY: 20 + }) + ); + controller.update(0); + + expect(context.camera.quaternion.equals(initialQuaternion)).toBe(true); + + controller.deactivate(context, { + releasePointerLock: false + }); + }); + it("uses the authored movement template speed for first-person motion telemetry", () => { const playerStart = createPlayerStartEntity({ id: "entity-player-start-custom-movement",