54 lines
911 B
C#
54 lines
911 B
C#
using Godot;
|
|
|
|
namespace Newlon.Components;
|
|
|
|
[GlobalClass]
|
|
public partial class Armor : Node
|
|
{
|
|
[Signal]
|
|
public delegate void ArmorDamagedEventHandler(int hp);
|
|
[Signal]
|
|
public delegate void ArmorLostEventHandler();
|
|
|
|
[Export]
|
|
private int _maxHP;
|
|
private int _hp;
|
|
private bool _lost = false;
|
|
|
|
public override void _Ready()
|
|
{
|
|
_hp = _maxHP;
|
|
}
|
|
|
|
public int RecieveDamage(int damage)
|
|
{
|
|
if(_lost)
|
|
return damage;
|
|
int returnAmount = 0;
|
|
_hp -= damage;
|
|
if(_hp <= 0)
|
|
{
|
|
returnAmount = -_hp;
|
|
_hp = 0;
|
|
EmitSignal(SignalName.ArmorLost);
|
|
_lost = true;
|
|
}
|
|
EmitSignal(SignalName.ArmorDamaged,_hp);
|
|
return returnAmount;
|
|
}
|
|
|
|
public int Heal(int amount)
|
|
{
|
|
if(_lost)
|
|
return amount;
|
|
int returnAmount = 0;
|
|
_hp += amount;
|
|
if (_hp >= _maxHP)
|
|
{
|
|
returnAmount = _hp-_maxHP;
|
|
_hp = _maxHP;
|
|
}
|
|
EmitSignal(SignalName.ArmorDamaged,_hp);
|
|
return returnAmount;
|
|
}
|
|
}
|