Win and loose conditions

This commit is contained in:
Rendo 2025-07-20 04:23:22 +05:00
commit b551c7f012
15 changed files with 193 additions and 122 deletions

View file

@ -24,16 +24,23 @@ public partial class Armor : Node
{
if(_lost)
return damage;
float returnAmount = 0;
_hp -= damage;
if(_hp <= 0)
{
returnAmount = -_hp;
_hp = 0;
EmitSignal(SignalName.ArmorLost);
_lost = true;
}
EmitSignal(SignalName.ArmorDamaged,_hp);
float returnAmount = damage - _hp;
if (returnAmount < 0)
returnAmount = 0;
if (_hp - damage <= 0)
{
var delta = _hp;
_hp = 0;
EmitSignal(SignalName.ArmorDamaged, delta);
EmitSignal(SignalName.ArmorLost);
_lost = true;
}
else
{
_hp -= damage;
EmitSignal(SignalName.ArmorDamaged, damage);
}
return returnAmount;
}

View file

@ -11,12 +11,12 @@ public partial class DegradingSprite : Sprite2D
public override void _Ready()
{
armor.ArmorDamaged += OnZombieHPChanged;
armor.ArmorDamaged += OnArmorHPChanged;
}
private void OnZombieHPChanged(float hp)
private void OnArmorHPChanged(float hp)
{
float percent = hp / armor.MaxHP;
float percent = armor._hp / armor.MaxHP;
for (int i = 0; i < degradationStages.Count; i++)
{
if (percent <= thresholdPercentage[i])

View file

@ -15,20 +15,32 @@ public partial class Entity : Node2D
public virtual void TakeDamage(float amount, Node origin)
{
HP -= amount;
EmitSignal(SignalName.OnHPChanged, -amount, origin);
EmitSignal(SignalName.OnDamaged);
if (HP <= 0)
if (HP - amount <= 0)
{
EmitSignal(SignalName.OnHPChanged, -HP, origin);
HP = 0;
KillByDamage();
}
else
{
HP -= amount;
EmitSignal(SignalName.OnHPChanged, -amount, origin);
}
}
public virtual void Heal(float amount, Node origin)
{
EmitSignal(SignalName.OnHPChanged, amount, origin);
HP += amount;
if (HP > MaxHP) HP = MaxHP;
if (HP + amount > MaxHP)
{
EmitSignal(SignalName.OnHPChanged, MaxHP - HP, origin);
HP = MaxHP;
}
else
{
HP += amount;
EmitSignal(SignalName.OnHPChanged, amount, origin);
}
}
public virtual void KillByDamage()

View file

@ -16,13 +16,13 @@ public partial class EntityHPObserver : Node
private void OnHPChanged(float delta, Node origin)
{
if (_setGreater == false && _observedEntity.HP / _observedEntity.MaxHP < _threshold)
if (_setGreater == false && _observedEntity.HP / _observedEntity.MaxHP <= _threshold)
{
EmitSignal(SignalName.ThresholdReached);
_observedEntity.OnHPChanged -= OnHPChanged;
QueueFree();
}
else if (_setGreater && _observedEntity.HP / _observedEntity.MaxHP > _threshold)
else if (_setGreater && _observedEntity.HP / _observedEntity.MaxHP >= _threshold)
{
EmitSignal(SignalName.ThresholdReached);
_observedEntity.OnHPChanged -= OnHPChanged;

View file

@ -35,18 +35,24 @@ public partial class RuntimeZombieData : Entity
}
public override void TakeDamage(float amount, Node origin)
{
var damage = amount;
if (_armor != null)
{
HP -= _armor.RecieveDamage(amount);
damage = _armor.RecieveDamage(amount);
}
EmitSignal(SignalName.OnDamaged);
if (HP - damage <= 0)
{
var delta = -HP;
HP = 0;
EmitSignal(SignalName.OnHPChanged, delta, origin);
KillByDamage();
}
else
HP -= amount;
EmitSignal(SignalName.OnHPChanged, -amount, origin);
EmitSignal(SignalName.OnDamaged);
if (HP <= 0)
{
KillByDamage();
HP -= damage;
EmitSignal(SignalName.OnHPChanged, -damage, origin);
}
}
public void HPChangedMixedInvokerSource(float delta, Node source)