class_name Enemy extends Creature enum State { IDLE, CHASE, ATTACK } @export var state: State = State.IDLE @export_category("Parts") @export var animation_player: AnimationPlayer @export var sprite: Sprite2D @export var detection_area: Area2D var _chase_target: Node2D var _target_is_left: bool = false func _play_animation(animation: String) -> void: if not animation_player: return if not animation_player.has_animation(animation): return if animation_player.is_playing() and animation_player.current_animation == animation: return animation_player.play(animation) func _on_ready() -> void: self.detection_area.body_entered.connect(self._on_detection_area_entered) func _process(delta: float) -> void: var animation_name = str(State.keys()[self.state]).to_lower() self._play_animation(animation_name) sprite.flip_h = self._target_is_left func _physics_process(delta: float) -> void: match self.state: State.CHASE: if not self._chase_target: self.state = State.IDLE self._target_is_left = self._chase_target.position.x < self.position.x func _on_detection_area_entered(body: CollisionObject2D) -> void: match state: State.IDLE: if body is Player: self._chase_target = body self.state = State.CHASE