Files
aarpg/player/scripts/state_attack.gd
Andriy Yednarovych e877c5f058 init
2026-02-22 19:26:26 +01:00

45 lines
1.4 KiB
GDScript

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