27 lines
711 B
GDScript
27 lines
711 B
GDScript
extends Node
|
|
|
|
const ATTACK_RANGE := 2.0
|
|
const ATTACK_COOLDOWN := 1.5
|
|
const ATTACK_DAMAGE := 5.0
|
|
|
|
var attack_timer := 0.0
|
|
|
|
@onready var enemy: CharacterBody3D = get_parent()
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
attack_timer -= delta
|
|
if enemy.state != enemy.State.ATTACK:
|
|
return
|
|
if not is_instance_valid(enemy.target):
|
|
enemy.state = enemy.State.RETURN
|
|
return
|
|
var dist := enemy.global_position.distance_to(enemy.target.global_position)
|
|
if dist > ATTACK_RANGE:
|
|
enemy.state = enemy.State.CHASE
|
|
return
|
|
if attack_timer <= 0:
|
|
attack_timer = ATTACK_COOLDOWN
|
|
EventBus.damage_requested.emit(enemy, enemy.target, ATTACK_DAMAGE)
|
|
enemy.velocity.x = 0
|
|
enemy.velocity.z = 0
|