public override DamageData.Target CalculateDamage() { DamageData.Target finalState = this.CurrentTarget; DamageData.HeatData heat = _heatData; // No air friction attenuation as HEAT round detonates on surface of the armor if (finalState.EraData.Value > 0.0f) { // Calculate effects of ERA float finalEra = Math.Max( 0.0f, finalState.EraData.Value - heat.Power * finalState.EraData.HeatFractionMultiplier ); finalState.EraData.Value = finalEra; heat.Power = CalculatePostEraPower( heat.Power, finalState.EraData.HeatFractionMultiplier ); } // Armor degradation float finalArmor = Math.Max( 0.0f, finalState.Armor - (heat.Power / finalState.Armor) * heat.Degradation ); finalState.Armor = finalArmor; // Calculate final damage float finalDamage = Math.Max( 0.0f, (heat.Power - finalState.Armor) * heat.HealthDamageFactor ); float finalHealth = Math.Max( 0.0f, finalState.Health - finalDamage ); finalState.Health = finalHealth; return(finalState); }
public HeatDamage(DamageData.HeatData data, DamageData.Target target) : base(DamageType.HEAT, target) { _heatData = data; }