class_name State_Attack extends State @onready var walk: State = $"../walk" @onready var idle: State = $"../idle" @onready var animation_player: AnimationPlayer = $"../../AnimationPlayer" @onready var attack_animation_player: AnimationPlayer = $"../../Sprite2D/attack_effect/AnimationPlayer" @onready var audio_player: AudioStreamPlayer2D = $"../../audio/audio" @onready var hurtbox: Hurtbox = %attack_hurtbox @export var attack_sound: AudioStream @export_range(1, 20, 0.5) var decelerate_speed: float = 5.0 var attacking: bool = false func enter() -> void: animation_player.animation_finished.connect(end_attack) player.update_animation("attack") attack_animation_player.play("attack_" + player.anim_direction()) audio_player.stream = attack_sound audio_player.pitch_scale = randf_range(0.9, 1.1) audio_player.play() attacking = true await get_tree().create_timer(0.075).timeout if attacking: hurtbox.monitoring = true func exit() -> void: animation_player.animation_finished.disconnect(end_attack) attacking = false hurtbox.monitoring = false func process(delta : float) -> State: player.velocity -= player.velocity * decelerate_speed * delta if attacking: return null return idle if player.direction == Vector2.ZERO else walk func physics(_delta : float) -> State: return null func handle_input(_event : InputEvent) -> State: return null func end_attack(_new_animation_name: String) -> void: attacking = false