extends KinematicBody2D const DeathEffect = preload("res://Effects/EnemyDeathEffect.tscn") var knockback = Vector2.ZERO var velocity = Vector2.ZERO onready var stats = $Stats onready var player_detector = $PlayerDetectionZone onready var sprite = $AnimatedSprite onready var original_position = global_position export(int) var acceleration = 300 export(int) var max_speed = 300 export(int) var friction = 200 enum { IDLE, MOVE, CHASE, MOVE_BACK } onready var state = IDLE func _physics_process(delta): knockback = knockback.move_toward(Vector2.ZERO, 200 * delta) knockback = move_and_slide(knockback) match state: IDLE: velocity = velocity.move_toward(Vector2.ZERO, friction) seek_player() MOVE_BACK: # TODO: Navigation here pass MOVE: pass CHASE: var player = player_detector.player if player != null: var direction = (player.global_position - global_position).normalized() velocity = velocity.move_toward(direction * max_speed, acceleration * delta) sprite.flip_h = velocity.x < 0 else: state = IDLE velocity = move_and_slide(velocity) func around_the_original_position(): return abs(original_position.x - global_position.x) < 5 and abs(original_position.y - global_position.y) < 5 func seek_player(): if player_detector.is_player_detected(): state = CHASE func _on_HurtBox_area_entered(area): stats.health -= area.damage knockback = area.knockback_vector * 120 func _on_Stats_no_health(): queue_free() var effect = DeathEffect.instance() get_parent().add_child(effect) effect.global_position = global_position