Files
glitch-in-the-system/scripts/v2/enemy.gd
2024-01-21 18:18:15 +01:00

60 lines
1.2 KiB
GDScript

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