62 lines
1.2 KiB
C#
62 lines
1.2 KiB
C#
using Godot;
|
|
|
|
namespace Newlon.Components.Zombies;
|
|
|
|
public partial class RuntimeZombieData : Node2D, IEntity, ILocalTimescale
|
|
{
|
|
[Signal]
|
|
public delegate void OnHPChangedEventHandler(int deltaHP);
|
|
|
|
[Signal]
|
|
public delegate void OnLocalTimescaleChangedEventHandler(int currentTimescale);
|
|
|
|
private int _hp;
|
|
[Export]
|
|
private int _maxHP;
|
|
[Export]
|
|
private int _line;
|
|
|
|
private float _localTimescale = 1.0f;
|
|
public int Hp => _hp;
|
|
|
|
public int MaxHp => _maxHP;
|
|
|
|
public int Line => _line;
|
|
|
|
public float LocalTimescale
|
|
{
|
|
get => _localTimescale;
|
|
set
|
|
{
|
|
_localTimescale = value;
|
|
EmitSignal(SignalName.OnLocalTimescaleChanged,_localTimescale);
|
|
}
|
|
}
|
|
|
|
public override void _Ready()
|
|
{
|
|
_hp = _maxHP;
|
|
}
|
|
|
|
public void Heal(int amount)
|
|
{
|
|
_hp += amount;
|
|
EmitSignal(SignalName.OnHPChanged,amount);
|
|
|
|
if (MaxHp > 0)
|
|
{
|
|
_hp = MaxHp;
|
|
}
|
|
}
|
|
|
|
public void TakeDamage(int amount)
|
|
{
|
|
_hp -= amount;
|
|
EmitSignal(SignalName.OnHPChanged,-amount);
|
|
|
|
if (_hp <= 0)
|
|
{
|
|
QueueFree();
|
|
}
|
|
}
|
|
}
|