class_name Enemy extends CharacterBody3D @export var max_health: float = 20.0 @export var xp_value: int = 30 @export var damage: float = 20.0 @export var crit_chance: float = 0.05 @onready var rig: Node3D = $Rig @onready var health_component: HealthComponent = $HealthComponent @onready var collision_shape: CollisionShape3D = $CollisionShape3D @onready var player_detector: ShapeCast3D = $Rig/PlayerDetector @onready var area_attack: ShapeCast3D = $Rig/AreaAttack @onready var player: Player = get_tree().get_first_node_in_group("Player") func _ready() -> void: var mesh = rig.villager_meshes.pick_random() rig.set_active_mesh(mesh) health_component.update_max_health(max_health) func _physics_process(_delta: float) -> void: if rig.is_idle(): check_for_attacks() func check_for_attacks() -> void: for collision_id in player_detector.get_collision_count(): var collider = player_detector.get_collider(collision_id) if collider is Player: rig.playback.travel("Overhead") func _on_health_component_defeat() -> void: player.stats.xp += xp_value rig.playback.travel("Defeat") collision_shape.disabled = true set_physics_process(false) func _on_rig_heavy_attack() -> void: area_attack.deal_damage(damage, crit_chance)