public void ApplyDamage(float damage, AttackType attackType, DamageType damageType, bool ignoreDeflection = false, bool triggerEvent = true) { //already destroyed, don't apply damage if (destroyed || Resistances.Indestructable || (!ignoreDeflection && damage < damageDeflection)) { return; } if (Resistances.FireProof && attackType == AttackType.Fire) { return; } var damageInfo = new DamageInfo(damage, attackType, damageType, this); damage = Armor.GetDamage(damage, attackType); if (damage > 0) { if (attackType == AttackType.Fire && !onFire && !destroyed && Resistances.Flammable) { SyncOnFire(onFire, true); } integrity -= damage; lastDamageType = damageType; if (triggerEvent) { OnApplyDamage.Invoke(damageInfo); } CheckDestruction(); Logger.LogTraceFormat("{0} took {1} {2} damage from {3} attack (resistance {4}) (integrity now {5})", Category.Health, name, damage, damageType, attackType, Armor.GetRating(attackType), integrity); } }
public void InflictDamage(float damage) { if (!invulnerable) { currentHP -= damage; damaged.Invoke(damage); } }
private bool Attack() { var attackUnit = _sequence[_count]; var target = attackUnit.Target; _count++; if (_count > 3) { _count = 0; } if (target.DEX > MyRandom.GetRandom(100)) { Device.BeginInvokeOnMainThread(() => DamagedEvent?.Invoke(this, new DamageEventArgs() { Target = target, Damage = 0 }) ); return(false); } var tmp = AttackPower(attackUnit.Name) * attackUnit.AttackRatio * CalcStrongAttak(attackUnit.Name, attackUnit.AttackTargetUnit.Name); var creticalRatio = CalcCritical(target == _current ? _enemy : _current); var damage = (int)(tmp * creticalRatio); target.CurrentHP -= damage; if (target.CurrentHP < 0) { target.CurrentHP = 0; } Device.BeginInvokeOnMainThread(() => DamagedEvent?.Invoke(this, new DamageEventArgs() { Target = target, Damage = damage, IsCritical = creticalRatio != 1 }) ); if (target.CurrentHP <= 0) { var winner = target == _current ? _enemy : _current; Device.BeginInvokeOnMainThread(() => BattleFinshed?.Invoke(this, new BattleFinishedEventArgs() { Winner = winner }) ); return(true); } return(false); }
public void ReceiveDamage(float amount) { if (invincible) { return; } health -= amount; onDamaged.Invoke(amount); if (health <= 0) { health = 0; onKilled.Invoke(); } }
public void Damage(int amount) { if (!IsAlive) { return; } int oldAmount = CurrentHealth; CurrentHealth = Mathf.Max(CurrentHealth - amount, 0); if (oldAmount != CurrentHealth) { DamagedEvent?.Invoke(this, oldAmount - CurrentHealth); if (!IsAlive) { DeathEvent?.Invoke(this); } } }
public void ApplyDamage(Report data) { DamageRecieved.Invoke(data); }
public void RaiseDamagedEvent(int damage, DamageType type) { AnyDamagedEvent?.Invoke(this, damage, type); DamagedEvent?.Invoke(damage, type); }
public void Damage() { HealthPoints -= 10; DamagedEvent?.Invoke(this); }