Files
GameJamDungeon/Zennysoft.Game.Godot.Implementation/Components/HealthComponent.cs

55 lines
1.2 KiB
C#

using Chickensoft.Collections;
namespace Zennysoft.Game.Implementation.Components;
public class HealthComponent
{
public IAutoProp<int> CurrentHP => _currentHP;
public IAutoProp<int> MaximumHP => _maximumHP;
private readonly AutoProp<int> _currentHP;
private readonly AutoProp<int> _maximumHP;
public event Action? HealthReachedZero;
public event Action? DamageTaken;
public bool AtFullHealth => CurrentHP.Value == MaximumHP.Value;
public HealthComponent(int initialHP)
{
_maximumHP = new AutoProp<int>(initialHP);
_currentHP = new AutoProp<int>(initialHP);
}
public void Heal(int healAmount)
{
var cappedAmount = Math.Min(healAmount + _currentHP.Value, _maximumHP.Value);
_currentHP.OnNext(cappedAmount);
}
public void Damage(int damageAmount)
{
var cappedAmount = Math.Max(_currentHP.Value - damageAmount, 0);
_currentHP.OnNext(cappedAmount);
if (cappedAmount == 0)
HealthReachedZero?.Invoke();
else
DamageTaken?.Invoke();
}
public void SetHealth(int health)
{
var cappedAmount = Math.Min(health, _maximumHP.Value);
_currentHP.OnNext(cappedAmount);
}
public void RaiseMaximumHP(int raiseAmount)
{
_maximumHP.OnNext(raiseAmount);
Heal(raiseAmount);
}
}