Signal context

This commit is contained in:
Rendo 2025-07-22 19:24:34 +05:00
commit b4bf3ab8bc
13 changed files with 112 additions and 72 deletions

View file

@ -11,36 +11,52 @@ public partial class Entity : Node2D
#region Health points
[Export] public float MaxHP;
public float HP;
[Signal] public delegate void OnHPChangedEventHandler(float deltaHP, Node origin);
[Signal] public delegate void OnHPChangedEventHandler(EntitySignalContext context);
[Signal] public delegate void OnDamagedEventHandler();
public virtual void TakeDamage(float amount, Node origin)
{
EmitSignal(SignalName.OnDamaged);
var context = new EntitySignalContext()
{
target = this,
source = (Entity)origin,
actionAmount = amount
};
if (HP - amount <= 0)
{
EmitSignal(SignalName.OnHPChanged, -HP, origin);
context.deltaHP = -HP;
EmitSignal(SignalName.OnHPChanged, context);
HP = 0;
KillByDamage();
}
else
{
context.deltaHP = -amount;
HP -= amount;
EmitSignal(SignalName.OnHPChanged, -amount, origin);
EmitSignal(SignalName.OnHPChanged, context);
}
}
public virtual void Heal(float amount, Node origin)
{
var context = new EntitySignalContext()
{
target = this,
source = (Entity)origin,
actionAmount = amount
};
if (HP + amount > MaxHP)
{
EmitSignal(SignalName.OnHPChanged, MaxHP - HP, origin);
context.deltaHP = MaxHP - HP;
EmitSignal(SignalName.OnHPChanged, context);
HP = MaxHP;
}
else
{
context.deltaHP = amount;
HP += amount;
EmitSignal(SignalName.OnHPChanged, amount, origin);
EmitSignal(SignalName.OnHPChanged, context);
}
}