extends Node3D class_name PlayerModel @onready var moves: Dictionary = { "idle": $Idle, "walk": $Walk, "slash": $Slash, "shoot": $Shoot, "dash": $Dash, "fall": $Fall, "fallToRoll": $FallToRoll, "fallToLanding": $FallToLanding } @onready var player: Player = $".." @onready var skeleton: Skeleton3D = $Skeleton3D @onready var animation_tree: ModelAnimationTree = $AnimationTree var current_move: Move func _ready() -> void: for state_name in moves.keys(): var move: Move = moves[state_name] move.player = player move.state_name = state_name assign_current_move("idle") func update(input: InputPacket, delta: float): var relevent_move := current_move.should_enter(input) 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): 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