im trying to implement ladder climbing
however my checks if the player is looking at the ladder dont work
(note this is a script i wrote for unity im trying to adapt to gdscript)
func _on_body_entered(body):
if body == player :
print_debug("shouldclimbladder")
#check if controller is looking at ladder
var forward : Vector3 = body.translate_object_local(Vector3.RIGHT)
var toOther : Vector3 = body.position - self.position
var angle : float = forward.dot(toOther)
if angle > -0.3 && angle < 0.3:
canclimb = true
deltaposition = laddertop.position - ladderbottom.position
lengthDiagonal = pow((deltaposition.x * deltaposition.x) + (deltaposition.z * deltaposition.z),0.5)
controllerY = body.position.y
if lengthDiagonal == 0.0:
wantedZ = ladderbottom.position.z
wantedX = ladderbottom.position.x
else:
lengthB = lengthDiagonal * ((controllerY - ladderbottom.position.y) / (laddertop.position.y - ladderbottom.position.y))
wantedZ = ladderbottom.position.z + ((laddertop.position.z - ladderbottom.position.z) * (lengthB / lengthDiagonal))
wantedX = ladderbottom.position.x + ((laddertop.position.x - ladderbottom.position.x) * (lengthB / lengthDiagonal))
wantedladderposition = Vector3(wantedX,controllerY,wantedZ)
player.climbdirection = direction
player.ladderPosition = wantedladderposition
player.ladderForward = (-self.basis.z)
player.ladderRotation = myrotation
if player._isOnFloor:
player._climbLadder = false
else:
player._climbLadder = true