extends Move class_name Dash @export var dash_length := 10.0 @onready var timer: Timer = $Timer var finished := false var new_position: Vector3 func should_enter(input: InputPacket) -> String: if finished: input.player_actions.sort_custom(moves_priority_sort) return input.player_actions[0] return state_name 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 = 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