newlon/scripts/entities/Armor.cs
2025-07-23 16:07:55 +05:00

65 lines
1.2 KiB
C#

using Godot;
namespace Newlon.Components;
[GlobalClass]
public partial class Armor : Node
{
[Signal]
public delegate void DamagedEventHandler();
[Signal]
public delegate void HpChangedEventHandler(float hp);
[Signal]
public delegate void ArmorLostEventHandler();
[Export]
public float MaxHP { get; private set; }
public float _hp;
private bool _lost = false;
public override void _Ready()
{
_hp = MaxHP;
}
public float RecieveDamage(float damage)
{
if(_lost)
return damage;
float returnAmount = damage - _hp;
if (returnAmount < 0)
returnAmount = 0;
if (_hp - damage <= 0)
{
var delta = _hp;
_hp = 0;
EmitSignal(SignalName.HpChanged, -delta);
EmitSignal(SignalName.Damaged);
EmitSignal(SignalName.ArmorLost);
_lost = true;
}
else
{
_hp -= damage;
EmitSignal(SignalName.HpChanged, -damage);
EmitSignal(SignalName.Damaged);
}
return returnAmount;
}
public float Heal(float amount)
{
if(_lost)
return amount;
float returnAmount = 0;
_hp += amount;
if (_hp >= MaxHP)
{
returnAmount = _hp-MaxHP;
_hp = MaxHP;
}
EmitSignal(SignalName.HpChanged,_hp);
return returnAmount;
}
}