mirror of
https://github.com/kodzukye/omens-ascent.git
synced 2026-08-10 05:13:10 +00:00
32 lines
952 B
GDScript
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)
|