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); }
public KEDamage(KineticData data, Target target) : base(DamageTypes.KE, target) { _keData = data; }