Ejemplo n.º 1
0
 void ApplyDamage(EiDamage damage)
 {
     if (HasShieldType(damage.DamageType))
     {
         if (HasShield)
         {
             // calculate armor Loss
             var shieldLoss    = shieldData.flatShieldLoss + shieldData.shieldLossByTotalDamagePercentage * damage.Damage;
             var preCalcDamage = damage.Damage;
             // Reduce damage
             damage.ReduceDamage(shieldData.flatReduction, shieldData.damageMultiplier, calculateFlatReductionFirst);
             //fix after reduction armor loss
             shieldLoss += (preCalcDamage - damage.Damage) * shieldData.shieldLossByDamagePercentage;
             //Check if needed further damage adjustments
             var tempArmor = CurrentShield;
             if (shieldLoss > tempArmor)
             {
                 var percentage = 1f - (tempArmor / shieldLoss);
                 currentShield.Value = 0f;
                 //do some magic stuff for doing more accurate damage reduction based on armor
                 damage.SetDamage(UnityEngine.Mathf.Lerp(damage.Damage, preCalcDamage, percentage));
             }
             else
             {
                 currentShield.Value -= shieldLoss;
             }
         }
     }
 }
Ejemplo n.º 2
0
 void ApplyDamage(EiDamage damage)
 {
     for (int i = protection.Count - 1; i >= 0; i--)
     {
         var protData = protection [i];
         if (protData.damageType == damage.DamageType)
         {
             damage.ReduceDamage(protData.flatReduction, protData.damageMultiplier, calculateFlatProtectionFirst);
         }
     }
 }
Ejemplo n.º 3
0
 public void Damage(EiDamage damage)
 {
     if (damage.Target == null)
     {
         damage.Target = damageTarget;
     }
     else
     {
         if ((damage.Target) != damageTarget)
         {
             Debug.LogWarning("The damage target is different to what it hit\n" + Entity.EntityName);
         }
     }
     onHit.Trigger(damage);
     damage.ReduceDamage(flatDamageReduction.Value, damageMultiplier.Value, calculateFlatReducationFirst);
     damageTarget.Damage(damage);
 }