Files
Omens-Ascent/scenes/ui/player_hud.gd

32 lines
952 B
GDScript

class_name PlayerHUD
extends CanvasLayer
const HEART_SCENE: PackedScene = preload("res://scenes/ui/heart.tscn")
const HEALTH_PER_HEART: int = 4
@onready var _hearts_container: HBoxContainer = $MarginContainer/HeartsContainer
var _hearts: Array[Heart] = []
func _ready() -> void:
EventBus.player_health_changed.connect(_on_player_health_changed)
func _on_player_health_changed(current_health: int, max_health: int) -> void:
var heart_count: int = ceili(float(max_health) / HEALTH_PER_HEART)
if heart_count != _hearts.size():
_build_hearts(heart_count)
for i in _hearts.size():
var remaining: int = clampi(current_health - i * HEALTH_PER_HEART, 0, HEALTH_PER_HEART)
_hearts[i].set_value(remaining)
func _build_hearts(heart_count: int) -> void:
for heart in _hearts:
heart.queue_free()
_hearts.clear()
for i in heart_count:
var heart: Heart = HEART_SCENE.instantiate()
_hearts_container.add_child(heart)
_hearts.append(heart)