using Godot; using System; [GlobalClass] public partial class Healthbar : ProgressBar { private Timer _damageCatchUpTimer; private ProgressBar _damagedHealth; private float _currentHealth; public float CurrentHealth { get => _currentHealth; set => SetHealth(value); } public override void _Ready() { _damageCatchUpTimer = GetNode("DamageCatchUp"); _damagedHealth = GetNode("Damagebar"); _damageCatchUpTimer.Timeout += OnDamageCatchUp; Visible = false; } public void Initialize(float initialHealth) { _currentHealth = initialHealth; MaxValue = initialHealth; Value = initialHealth; _damagedHealth.MaxValue = initialHealth; _damagedHealth.Value = initialHealth; } public void SetHealth(float newHealth) { var previousHealth = _currentHealth; _currentHealth = Mathf.Min(newHealth, (float) MaxValue); _currentHealth = newHealth; Value = _currentHealth; Visible = _currentHealth < MaxValue; if (_currentHealth < previousHealth) { _damageCatchUpTimer.Start(); } else { _damagedHealth.Value = _currentHealth; } } public void OnDamageCatchUp() { _damagedHealth.Value = _currentHealth; } }