X-Git-Url: http://git.purplebirdman.com/frog-ninja.git/blobdiff_plain/3e5544fd02215b6a59b09e8eaf826916237ca455..refs/heads/state-machine:/player/model.gd diff --git a/player/model.gd b/player/model.gd index 71415a6..cd61004 100644 --- a/player/model.gd +++ b/player/model.gd @@ -1,8 +1,6 @@ extends Node class_name PlayerModel -@onready var player: Player = $".." -@onready var camera: Camera3D = %camera @onready var moves: Dictionary = { "idle": $Idle, @@ -10,21 +8,25 @@ class_name PlayerModel "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): @@ -32,10 +34,21 @@ 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