59 lines
1.4 KiB
C#
59 lines
1.4 KiB
C#
using Godot;
|
|
using System;
|
|
|
|
[GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_heart.png")]
|
|
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<Timer>("DamageCatchUp");
|
|
_damagedHealth = GetNode<ProgressBar>("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;
|
|
}
|
|
}
|