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; } }