extends CharacterBody3D @export var max_health: int = 3 @export var move_speed: float = 3.5 @export var aggro_range: float = 30.0 @export var contact_damage: int = 1 @export var contact_range: float = 0.7 @export var contact_cooldown: float = 1.0 @export var gravity: float = 9.8 var health: int var _contact_timer: float = 0.0 func _ready() -> void: health = max_health add_to_group("enemies") func _physics_process(delta: float) -> void: if not is_on_floor(): velocity.y -= gravity * delta else: velocity.y = 0.0 if _contact_timer > 0.0: _contact_timer -= delta var player := get_tree().get_first_node_in_group("player") if player: var to_player: Vector3 = player.global_position - global_position to_player.y = 0.0 var dist := to_player.length() if dist <= aggro_range and dist > 0.01: var dir := to_player.normalized() velocity.x = dir.x * move_speed velocity.z = dir.z * move_speed else: velocity.x = 0.0 velocity.z = 0.0 if dist <= contact_range and _contact_timer <= 0.0 and player.has_method("take_damage"): player.take_damage(contact_damage) _contact_timer = contact_cooldown else: velocity.x = 0.0 velocity.z = 0.0 move_and_slide() func take_damage(amount: int) -> void: if health <= 0: return health -= amount if health <= 0: health = 0 ArenaManager.on_enemy_died(self)