Example #1
0
    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);
        }
    }
Example #2
0
 public void InflictDamage(float damage)
 {
     if (!invulnerable)
     {
         currentHP -= damage;
         damaged.Invoke(damage);
     }
 }
Example #3
0
        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);
        }
Example #4
0
    public void ReceiveDamage(float amount)
    {
        if (invincible)
        {
            return;
        }

        health -= amount;

        onDamaged.Invoke(amount);

        if (health <= 0)
        {
            health = 0;
            onKilled.Invoke();
        }
    }
Example #5
0
    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);
            }
        }
    }
Example #6
0
 public void ApplyDamage(Report data)
 {
     DamageRecieved.Invoke(data);
 }
Example #7
0
 public void RaiseDamagedEvent(int damage, DamageType type)
 {
     AnyDamagedEvent?.Invoke(this, damage, type);
     DamagedEvent?.Invoke(damage, type);
 }
 public void Damage()
 {
     HealthPoints -= 10;
     DamagedEvent?.Invoke(this);
 }