health_bar.gd 585 B

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