health_bar.gd 606 B

12345678910111213141516171819202122232425262728
  1. extends Node2D
  2. class_name HealthBar
  3. signal health_changed(new_value: int)
  4. const MAX_HEALTH = 10
  5. @export var health: int = 10:
  6. set(new_value):
  7. var new_health = clampi(new_value, 0, MAX_HEALTH)
  8. if new_health != health:
  9. health = new_health
  10. health_changed.emit(new_health)
  11. @onready var foreground: AnimatedSprite2D = $Foreground
  12. func _ready() -> void:
  13. update_foreground()
  14. func _on_health_changed(_new_value: int) -> void:
  15. update_foreground()
  16. func update_foreground():
  17. if health != 0:
  18. foreground.frame = MAX_HEALTH - health
  19. foreground.visible = true
  20. else:
  21. foreground.visible = false