From a883a2e947e86a1f13cdda3ca3453e4f5fc5c636 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 25 Apr 2026 17:01:49 +0200 Subject: [PATCH] Apply vertical target assist scaling based on camera distance collision --- .../third-person-navigation-controller.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/runtime-three/third-person-navigation-controller.ts b/src/runtime-three/third-person-navigation-controller.ts index 36e69244..66ec0bd3 100644 --- a/src/runtime-three/third-person-navigation-controller.ts +++ b/src/runtime-three/third-person-navigation-controller.ts @@ -614,6 +614,19 @@ export class ThirdPersonNavigationController implements NavigationController { desiredCameraPosition, THIRD_PERSON_CAMERA_COLLISION_RADIUS ); + const resolvedCameraDistance = Math.hypot( + resolvedCameraPosition.x - pivot.x, + resolvedCameraPosition.y - pivot.y, + resolvedCameraPosition.z - pivot.z + ); + const collisionDistanceRatio = + resolvedCameraDistance / Math.max(this.cameraDistance, Number.EPSILON); + const targetAssistVerticalCollisionScale = smoothStep01( + (collisionDistanceRatio - + TARGET_ASSIST_VERTICAL_COLLISION_FADE_START_RATIO) / + (TARGET_ASSIST_VERTICAL_COLLISION_FADE_END_RATIO - + TARGET_ASSIST_VERTICAL_COLLISION_FADE_START_RATIO) + ); this.context.camera.position.set( resolvedCameraPosition.x, @@ -622,7 +635,8 @@ export class ThirdPersonNavigationController implements NavigationController { ); this.lookAtVector.set( pivot.x, - pivot.y + this.targetAssistLookOffsetY, + pivot.y + + this.targetAssistLookOffsetY * targetAssistVerticalCollisionScale, pivot.z ); this.context.camera.lookAt(this.lookAtVector);