4 @export var dash_length: float
5 @export var dash_time: float
7 var new_position: Vector3
10 func should_enter(input: InputPacket) -> String:
12 input.player_actions.sort_custom(states_priority_sort)
13 return input.player_actions[0]
17 func update(input: InputPacket, delta: float):
19 # if new position has been set, move towards it!
20 player.global_position = lerp(
21 player.global_position,
23 (dash_length / dash_time) * delta
25 state_finished = get_progress() >= dash_time
27 # else pick new position
29 if input.player_movement_direction == Vector2.ZERO:
30 dir = Vector2(player.last_movement_vector.x, player.last_movement_vector.z)
32 dir = input.player_movement_direction
33 new_position = player.global_position + Vector3(dir.x, 0, dir.y).normalized() * dash_length
34 rotate_skin(new_position)
37 func on_enter_state():
38 player.model.shield.visible = true
39 new_position = Vector3.ZERO
40 state_finished = false
44 player.model.shield.visible = false
47 func rotate_skin(towards: Vector3):
48 var skin_target_angle := Vector3.BACK.signed_angle_to(
49 towards - player.global_position,
52 player.model.global_rotation.y = skin_target_angle