Dejo aquí código marranero en Godot. Iba a pasar a refactorizar todo después de ver que las cosas me funcionaban y demás, pero es que estoy topando con una tontería muy gorda y no sé por dónde cogerlo.
Me explico:
Me está dando problemas en específico esta parte del código ->position= position.move_toward(nextPosition,movementSpeed*delta)
¿Por qué?
Pues porque la primera vez que pulso la tecla funciona correctamente, y me mueve una posición (que es lo que quiero), pero después si vuelvo a pulsar esa tecla me mueve mucho menos (dependiendo de la movementSpeed que le meta tengo algo más de margen antes de que termine de fallar del todo).
Tiene que ser una gilipollez, pero no doy con la tecla y estoy ya de los nervios.
Es movimiento "por casillas", si el personaje está mirando en una dirección, al volver a pulsar esa dirección debe avanzar. Si está mirando en otra dirección, gira a la dirección que has pulsado.
Gracias por la ayuda, cualquier duda que tengais sobre el código aquí estoy.
He medio probado con tweens, y la cagada es similar.
func _process(delta: float) -> void:
frontDirection= global_transform.origin + Vector3.FORWARD
leftDirection= global_transform.origin + Vector3.LEFT
rightDirection= global_transform.origin + Vector3.RIGHT
backDirection= global_transform.origin + Vector3.BACK
if Input.is_action_just_pressed("Front"):
if !lookingFront:
rotationDirection= self.transform.looking_at(frontDirection,Vector3.UP)
lookingFront=true
lookingLeft=false
lookingRight=false
lookingBack=false
print_debug(position,nextPosition)
else:
nextPosition= position+ Vector3.FORWARD
print_debug(position,nextPosition)
elif Input.is_action_just_pressed("Left"):
if !lookingLeft:
rotationDirection= self.transform.looking_at(leftDirection,Vector3.UP)
lookingFront=false
lookingLeft=true
lookingRight=false
lookingBack=false
print_debug(lookingFront,lookingLeft,lookingRight,lookingBack)
elif lookingLeft:
nextPosition= position + Vector3.LEFT
print_debug(lookingFront,lookingLeft,lookingRight,lookingBack)
elif Input.is_action_just_pressed("Right"):
if !lookingRight:
rotationDirection= self.transform.looking_at(rightDirection,Vector3.UP)
lookingFront=false
lookingLeft=false
lookingRight=true
lookingBack=false
print_debug(lookingFront,lookingLeft,lookingRight,lookingBack)
elif lookingRight:
nextPosition= position+ Vector3.RIGHT
print_debug(lookingFront,lookingLeft,lookingRight,lookingBack)
elif Input.is_action_just_pressed("Back"):
if !lookingBack:
rotationDirection= self.transform.looking_at(backDirection,Vector3.UP)
lookingFront=false
lookingLeft=false
lookingRight=false
lookingBack=true
print_debug(lookingFront,lookingLeft,lookingRight,lookingBack)
elif lookingBack:
nextPosition= position+ Vector3.BACK
print_debug(lookingFront,lookingLeft,lookingRight,lookingBack)
#INTERPOLA ENTRE POSICIÓN ANTERIOR Y POSICIÓN A LA QUE ROTARÁ
self.transform= self.transform.interpolate_with(rotationDirection,rotationSpeed*delta)
position= position.move_toward(nextPosition,movementSpeed*delta)