2025-05-18 12:36:32 -06:00

38 lines
1.2 KiB
GDScript

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)