class_name EnemyStateStun extends EnemyState @export var animation_name: String = "stun" @export var knockback_speed: float = 200.0 @export var decelerate_speed: float = 10.0 @export_category("AI") @export var next_state: EnemyState var direction: Vector2 var damage_position: Vector2 var animation_finished: bool = false func init() -> void: enemy.enemy_damaged.connect(on_damaged) func enter() -> void: enemy.animation_player.animation_finished.connect(on_animation_finished) enemy.invulnerable = true animation_finished = false direction = enemy.global_position.direction_to(damage_position) enemy.update_animation(animation_name) enemy.set_direction(direction) enemy.velocity = direction * -knockback_speed func exit() -> void: enemy.invulnerable = false enemy.animation_player.animation_finished.disconnect(on_animation_finished) func process(delta : float) -> EnemyState: if animation_finished: return next_state enemy.velocity -= enemy.velocity * decelerate_speed * delta return null func physics(_delta : float) -> EnemyState: return null func on_damaged(hurtbox: Hurtbox) -> void: damage_position = hurtbox.global_position state_machine.change_state(self) func on_animation_finished(_name: String) -> void: animation_finished = true