]> Untitled Git - frog-ninja.git/blob - player/model.gd
Refactoring
[frog-ninja.git] / player / model.gd
1 extends Node
2 class_name PlayerModel
3
4
5 @onready var moves: Dictionary = {
6         "idle": $Idle,
7         "walk": $Walk,
8         "slash": $Slash,
9         "shoot": $Shoot,
10         "dash": $Dash,
11         "fall": $Fall,
12         "fallToRoll": $FallToRoll,
13         "fallToLanding": $FallToLanding
14 }
15
16 @onready var player: Player = $".."
17 @onready var skeleton: Skeleton3D = $Skeleton3D
18 @onready var animation_tree: ModelAnimationTree = $AnimationTree
19
20 var current_move: Move
21
22
23 func _ready() -> void:
24         for state_name in moves.keys():
25                 var move: Move = moves[state_name]
26                 move.player = player
27                 move.state_name = state_name
28                 
29         assign_current_move("idle")
30
31
32 func update(input: InputPacket, delta: float):
33         var relevent_move := current_move.should_enter(input)
34         if moves[relevent_move] != current_move:
35                 switch_to(relevent_move)
36         current_move.update(input, delta)
37         animation_tree.set_walking_speed(player.velocity.length())
38
39
40 func switch_to(state: String):
41         animation_tree.animation_started.disconnect(current_move._on_animation_started)
42         animation_tree.animation_finished.disconnect(current_move._on_animation_finished)
43         current_move.on_exit_state()
44         assign_current_move(state)
45         
46         
47 func assign_current_move(state: String):
48         current_move = moves[state]
49         current_move.on_enter_state()
50         
51         animation_tree.animation_started.connect(current_move._on_animation_started)
52         animation_tree.animation_finished.connect(current_move._on_animation_finished)
53         animation_tree.transition(state)
54         player.state = state