Signal context
This commit is contained in:
parent
8a7295be82
commit
b4bf3ab8bc
13 changed files with 112 additions and 72 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue