extends Node
class_name PlayerModel
-@onready var player: Player = $".."
-@onready var camera: Camera3D = %camera
@onready var moves: Dictionary = {
"idle": $Idle,
"walk": $Walk,
"slash": $Slash,
+ "shoot": $Shoot,
"dash": $Dash,
- "fall": $Fall
+ "fall": $Fall,
+ "fallToRoll": $FallToRoll,
+ "fallToLanding": $FallToLanding
}
-var current_move: Move
+@onready var player: Player = $".."
+@onready var skeleton: Skeleton3D = $Skeleton3D
+@onready var animation_tree: ModelAnimationTree = $AnimationTree
+
+var current_move: Move
-###
func _ready() -> void:
- # assign starting state
- current_move = moves["idle"]
-
- # assign objects to each move
- for move in moves.values():
+ for state_name in moves.keys():
+ var move: Move = moves[state_name]
move.player = player
- move.camera = camera
+ move.state_name = state_name
+
+ assign_current_move("idle")
func update(input: InputPacket, delta: float):
if moves[relevent_move] != current_move:
switch_to(relevent_move)
current_move.update(input, delta)
+ animation_tree.set_walking_speed(player.velocity.length())
func switch_to(state: String):
- player.state = state
+ animation_tree.animation_started.disconnect(current_move._on_animation_started)
+ animation_tree.animation_finished.disconnect(current_move._on_animation_finished)
current_move.on_exit_state()
+ assign_current_move(state)
+
+
+func assign_current_move(state: String):
current_move = moves[state]
current_move.on_enter_state()
+
+ animation_tree.animation_started.connect(current_move._on_animation_started)
+ animation_tree.animation_finished.connect(current_move._on_animation_finished)
+ animation_tree.transition(state)
+ player.state = state