Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public HeatDamage(DamageData.HeatData data, DamageData.Target target)
     : base(DamageType.HEAT, target)
 {
     _heatData = data;
 }