From 2d527db5278377d9abfc04c273d942a26546d4a7 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Thu, 30 Apr 2026 00:15:46 +0200 Subject: [PATCH] feat: Integrate climbing state and surface resolution into navigation controller --- src/runtime-three/navigation-controller.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/runtime-three/navigation-controller.ts b/src/runtime-three/navigation-controller.ts index 6aa52334..9ec74fff 100644 --- a/src/runtime-three/navigation-controller.ts +++ b/src/runtime-three/navigation-controller.ts @@ -13,6 +13,7 @@ import type { RuntimeSceneDefinition, RuntimeSpawnPoint } from "./runtime-scene-build"; +import type { RuntimePlayerClimbSurface } from "./player-climbing"; export interface RuntimeMovementTransitionSignals { jumpStarted: boolean; @@ -81,7 +82,8 @@ export type RuntimeLocomotionMode = | "airborne" | "flying" | "swimming" - | "diving"; + | "diving" + | "climbing"; export type RuntimeAirborneKind = "jumping" | "falling" | null; export type RuntimeLocomotionGait = | "idle" @@ -155,6 +157,12 @@ export interface RuntimeControllerContext { feetPosition: Vec3, shape: FirstPersonPlayerShape ): boolean; + resolvePlayerClimbSurface?( + feetPosition: Vec3, + facingDirection: Vec3, + shape: FirstPersonPlayerShape, + previousSurface?: RuntimePlayerClimbSurface | null + ): RuntimePlayerClimbSurface | null; resolvePlayerVolumeState(feetPosition: Vec3): RuntimePlayerVolumeState; resolveThirdPersonCameraCollision( pivot: Vec3,