func should_enter(input: InputPacket) -> String:
if finished:
- input.actions.sort_custom(moves_priority_sort)
- return input.actions[0]
+ input.player_actions.sort_custom(moves_priority_sort)
+ return input.player_actions[0]
return state_name
-func update(_input: InputPacket, delta: float):
- player.global_position = lerp(
- player.global_position,
- new_position,
- (player.dash_length / timer.wait_time) * delta
- )
+func update(input: InputPacket, delta: float):
+ if new_position:
+ player.global_position = lerp(
+ player.global_position,
+ new_position,
+ (player.dash_length / timer.wait_time) * delta
+ )
+ else:
+ new_position = player.global_position + Vector3(
+ input.player_movement_direction.x, 0, input.player_movement_direction.y
+ ) * dash_length
+ rotate_skin(new_position)
func on_enter_state():
- new_position = player.global_position + player.last_movement_direction * dash_length
+ new_position = Vector3.ZERO
finished = false
timer.start()
func _on_timer_timeout() -> void:
finished = true
+
+
+func rotate_skin(towards: Vector3):
+ var skin_target_angle := Vector3.BACK.signed_angle_to(
+ towards - player.global_position,
+ Vector3.UP
+ )
+ player.skin.global_rotation.y = skin_target_angle