From c94b82108f4b515861429e0f651c100f40237e30 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 25 Apr 2026 15:50:37 +0200 Subject: [PATCH] Refactor: Improve look input handling and consumption in ThirdPersonNavigationController --- .../third-person-navigation-controller.ts | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/runtime-three/third-person-navigation-controller.ts b/src/runtime-three/third-person-navigation-controller.ts index f5315522..0fd68641 100644 --- a/src/runtime-three/third-person-navigation-controller.ts +++ b/src/runtime-three/third-person-navigation-controller.ts @@ -298,8 +298,19 @@ export class ThirdPersonNavigationController implements NavigationController { ); const cameraDrivenExternally = this.context.isCameraDrivenExternally() === true; + const lookInputActive = lookInput.horizontal !== 0 || lookInput.vertical !== 0; + let targetLookConsumed = false; - if (!cameraDrivenExternally && (lookInput.horizontal !== 0 || lookInput.vertical !== 0)) { + if (!cameraDrivenExternally && lookInputActive) { + targetLookConsumed = + this.context.handleRuntimeTargetLookInput?.( + lookInput.horizontal > 0 ? 1 : lookInput.horizontal < 0 ? -1 : 0 + ) ?? false; + } else if (!cameraDrivenExternally) { + this.context.handleRuntimeTargetLookInput?.(0); + } + + if (!cameraDrivenExternally && lookInputActive && !targetLookConsumed) { this.cameraYawRadians -= lookInput.horizontal * GAMEPAD_LOOK_SPEED * dt; this.pitchRadians = clampPitch( this.pitchRadians - lookInput.vertical * GAMEPAD_LOOK_SPEED * dt @@ -570,6 +581,15 @@ export class ThirdPersonNavigationController implements NavigationController { this.lastPointerClientX = event.clientX; this.lastPointerClientY = event.clientY; + const targetLookConsumed = + this.context?.handleRuntimeTargetLookInput?.( + deltaX > 0 ? 1 : deltaX < 0 ? -1 : 0 + ) ?? false; + + if (targetLookConsumed) { + return; + } + this.cameraYawRadians -= deltaX * LOOK_SENSITIVITY; this.pitchRadians = clampPitch( this.pitchRadians + deltaY * LOOK_SENSITIVITY @@ -578,6 +598,7 @@ export class ThirdPersonNavigationController implements NavigationController { private handlePointerUp = () => { this.dragging = false; + this.context?.handleRuntimeTargetLookInput?.(0); }; private handleWheel = (event: WheelEvent) => {