]> purplebirdman git - frog-ninja.git/blob - asset/character/model/state/dashing_state.gd
Added shaders to projectile
[frog-ninja.git] / asset / character / model / state / dashing_state.gd
1 extends State
2
3
4 @export var dash_length: float
5 @export var dash_time: float
6
7 var new_position: Vector3
8
9
10 func should_enter(input: InputPacket) -> String:
11         if state_finished:
12                 input.player_actions.sort_custom(states_priority_sort)
13                 return input.player_actions[0]
14         return name
15
16
17 func update(input: InputPacket, delta: float):
18         if new_position:
19                 # if new position has been set, move towards it!
20                 player.global_position = lerp(
21                         player.global_position,
22                         new_position,
23                         (dash_length / dash_time) * delta
24                         )
25                 state_finished = get_progress() >= dash_time
26         else:
27                 # else pick new position
28                 var dir: Vector2
29                 if input.player_movement_direction == Vector2.ZERO:
30                         dir = Vector2(player.last_movement_vector.x, player.last_movement_vector.z)
31                 else:
32                         dir = input.player_movement_direction.normalized()
33                 new_position = player.global_position + Vector3(dir.x, 0, dir.y) * dash_length
34                 rotate_skin(new_position)
35
36
37 func on_enter_state():
38         player.model.shield.visible = true
39         new_position = Vector3.ZERO
40         state_finished = false
41
42
43 func on_exit_state():
44         player.model.shield.visible = false
45
46
47 func rotate_skin(towards: Vector3):
48         var skin_target_angle := Vector3.BACK.signed_angle_to(
49                 towards - player.global_position, 
50                 Vector3.UP
51                 )
52         player.model.global_rotation.y = skin_target_angle