Example #1
0
    /// <summary>
    /// Damage this Unit for N ammounts of damage, reduced by Defence.
    /// </summary>
    /// <param name="n">N.</param>
    public int Damage(DamageData attackData)
    {
        // Run attack through defencive buffs and abiliites
        DefenceModifiers(attackData);

        int n = attackData.ApplyDefences(Character.ModifiedStats.defense, Character.ModifiedStats.resistance);

        if (attackData.testAttack)
        {
            return(n);
        }

        AddDamageData(attackData);
        damageTaken += n;
        NotifyHealthObservers(-n);
        if (damageTaken >= Character.ModifiedStats.maxHP)
        {
            attackData.killingBlow = true;
        }

        attackData.Callback();
        if (attackData.crit)
        {
            Particle.Crit(transform.position);
        }

        if (attackData.killingBlow)
        {
            Death(false);
            SFXPlayer.Instance.DeathSound();
        }

        return(n);
    }