class_name AnimationComponent extends Node const RESET = "human/RESET" var animation_player: AnimationPlayer var movement: MovementComponent var next_animation: StringName = RESET var skip: int func _ready(): var player := owner as Player player.dashed.connect(dash) player.skill_used.connect(use_skill) movement = player.find_child("Movement") animation_player = $AnimationPlayer func _process(_delta): if skip == 0: play_movement() if animation_player.current_animation == next_animation: return animation_player.play(next_animation) if animation_player.current_animation == "human/spin": animation_player.speed_scale = 2.0 else: animation_player.speed_scale = 1.0 func play_movement(): if !movement: play(RESET) return if movement.body.velocity.y > 0: play("human/jump") elif movement.body.velocity.y < 0: play("human/fall") elif movement.direction != Vector3.ZERO: play("human/run-fast") else: play("human/idle") func dash(): play_with_duration("human/roll", 1.0) func use_skill(slot: int): match slot: 0: play_with_duration("human/spin", 0.9) 1: play_with_duration("human/slash", 1.0) func play(action_name: StringName): next_animation = action_name func play_with_duration(action_name: StringName, duration: float): next_animation = action_name skip += 1 await get_tree().create_timer(duration).timeout skip -= 1