39 lines
1.2 KiB
GDScript
39 lines
1.2 KiB
GDScript
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]
|