extends Sprite3D const MAX_PERCENT := 100.0 @onready var name_label: Label = $EnemyOverlay/Stats/Name @onready var health_bar: TextureProgressBar = $EnemyOverlay/Stats/Bars/Health @onready var stamina_bar: TextureProgressBar = $EnemyOverlay/Stats/Bars/Stamina func _ready() -> void: if owner == null: return owner.health_changed.connect(_on_health_changed) owner.stamina_changed.connect(_on_stamina_changed) owner.name_changed.connect(_on_name_changed) func _on_health_changed(current_health: int, maximum_health: int) -> void: _update_bar(health_bar, current_health, maximum_health) func _on_stamina_changed(current_stamina: int, maximum_stamina: int) -> void: _update_bar(stamina_bar, current_stamina, maximum_stamina) func _update_bar(bar: TextureProgressBar, current_value: int, maximum_value: int) -> void: if maximum_value <= 0: bar.value = 0.0 return var percent := clampf(float(current_value) / float(maximum_value) * MAX_PERCENT, 0.0, MAX_PERCENT) bar.value = percent func _on_name_changed(enemy_name: String, current_state: String) -> void: name_label.text = _format_name(enemy_name, current_state) func _format_name(enemy_name: String, current_state: String) -> String: return "%s (%s)" % [enemy_name, current_state]