45 lines
1.4 KiB
GDScript
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
|