]> Untitled Git - frog-ninja.git/blob - player/moves/dash.gd
Refactoring
[frog-ninja.git] / player / moves / dash.gd
1 extends Move
2 class_name Dash
3
4 @export var dash_length := 10.0
5
6 @onready var timer: Timer = $Timer
7
8 var finished := false
9 var new_position: Vector3
10
11
12 func should_enter(input: InputPacket) -> String:
13         if finished:
14                 input.player_actions.sort_custom(moves_priority_sort)
15                 return input.player_actions[0]
16         return state_name
17
18
19 func update(input: InputPacket, delta: float):
20         if new_position:
21                 player.global_position = lerp(
22                         player.global_position,
23                         new_position,
24                         (player.dash_length / timer.wait_time) * delta
25                         )
26         else:
27                 new_position = player.global_position + Vector3(
28                         input.player_movement_direction.x, 0, input.player_movement_direction.y
29                         ) * dash_length
30                 rotate_skin(new_position)
31
32
33 func on_enter_state():
34         new_position = Vector3.ZERO
35         finished = false
36         timer.start()
37
38
39 func _on_timer_timeout() -> void:
40         finished = true
41
42
43 func rotate_skin(towards: Vector3):
44         var skin_target_angle := Vector3.BACK.signed_angle_to(
45                 towards - player.global_position, 
46                 Vector3.UP
47                 )
48         player.skin.global_rotation.y = skin_target_angle