extends Spatial onready var top = $Top onready var bottom = $Bottom func _ready(): if !OS.is_debug_build(): $DebugVisMesh.visible = false #point at which a player should enter the ladder given their current location func get_nearest_point_to_route(point_global: Vector3) -> Vector3: var t : Vector3 = top.global_transform.origin var b : Vector3 = bottom.global_transform.origin return b + clamp(get_climb_scalar(point_global), 0.0, 1.0)*(t-b) #ladder climb "progress" func get_climb_scalar(point_global: Vector3) -> float: var t : Vector3 = top.global_transform.origin var b : Vector3 = bottom.global_transform.origin #(T−B)⋅(P-B) / (T−B)⋅(T−B) return (t-b).dot(point_global-b) / (t-b).dot(t-b)