示例#1
0
        public override Target CalculateDamage()
        {
            Target      finalState = this.CurrentTarget;
            KineticData ke         = _keData;

            // Calculate attenuation of air friction
            ke.Power = CalculateKEAttenuationSimple(
                ke.Power,
                ke.Distance,
                ke.Friction
                );

            if (finalState.EraData.Value > 0.0f)
            {
                // Calculate effects of ERA
                float finalEra = Math.Max(
                    0.0f,
                    finalState.EraData.Value - ke.Power * finalState.EraData.KEFractionMultiplier
                    );
                finalState.EraData.Value = finalEra;

                ke.Power = CalculatePostEraPower(
                    ke.Power,
                    finalState.EraData.KEFractionMultiplier
                    );
            }

            // Armor degradation
            float finalArmor = Math.Max(
                0.0f,
                finalState.Armor - (ke.Power / finalState.Armor) * ke.Degradation
                );

            finalState.Armor = finalArmor;

            // Calculate final damage
            float finalDamage = Math.Max(
                0.0f,
                (ke.Power - finalState.Armor) * ke.HealthDamageFactor
                );
            float finalHealth = Math.Max(
                0.0f,
                finalState.Health - finalDamage
                );

            finalState.Health = finalHealth;

            return(finalState);
        }
示例#2
0
 public KEDamage(KineticData data, Target target)
     : base(DamageTypes.KE, target)
 {
     _keData = data;
 }