protected float GetImpactWeakeningByRange(float distance, DamageWeakeningByDistanceComponent weakeningConfig)
        {
            float minDamagePercent  = weakeningConfig.MinDamagePercent;
            float radiusOfMaxDamage = weakeningConfig.RadiusOfMaxDamage;
            float radiusOfMinDamage = weakeningConfig.RadiusOfMinDamage;
            float num4 = radiusOfMinDamage - radiusOfMaxDamage;

            return((num4 > 0f) ? ((distance > radiusOfMaxDamage) ? ((distance < radiusOfMinDamage) ? (0.01f * (minDamagePercent + (((radiusOfMinDamage - distance) * (100f - minDamagePercent)) / num4))) : (0.01f * minDamagePercent)) : 1f) : 1f);
        }
        private void PrepareImpactByBaseHitEvent(HitEvent evt, ImpactWeakeningNode weapon)
        {
            DamageWeakeningByDistanceComponent damageWeakeningByDistance = weapon.damageWeakeningByDistance;
            List <HitTarget> targets = evt.Targets;
            int   count       = targets.Count;
            float impactForce = weapon.impact.ImpactForce;

            for (int i = 0; i < count; i++)
            {
                HitTarget target                 = targets[i];
                float     hitDistance            = target.HitDistance;
                float     impactWeakeningByRange = base.GetImpactWeakeningByRange(hitDistance, damageWeakeningByDistance);
                base.PrepareImpactForHitTarget(weapon.Entity, target, impactForce, impactWeakeningByRange);
            }
        }
Esempio n. 3
0
        public void PrepareImpactOnShot(FixedUpdateEvent evt, ImpactNode weapon)
        {
            ImpactComponent impact = weapon.impact;
            DamageWeakeningByDistanceComponent damageWeakeningByDistance = weapon.damageWeakeningByDistance;
            HitTarget tankHit = weapon.streamHit.TankHit;

            if (tankHit != null)
            {
                float             deltaTime              = evt.DeltaTime;
                VulcanImpactEvent eventInstance          = new VulcanImpactEvent();
                float             hitDistance            = tankHit.HitDistance;
                float             impactWeakeningByRange = base.GetImpactWeakeningByRange(hitDistance, damageWeakeningByDistance);
                eventInstance.Force          = (((Vector3.Normalize(tankHit.HitDirection) * impact.ImpactForce) * WeaponConstants.WEAPON_FORCE_MULTIPLIER) * deltaTime) * impactWeakeningByRange;
                eventInstance.LocalHitPoint  = tankHit.LocalHitPoint;
                eventInstance.WeakeningCoeff = impactWeakeningByRange;
                Entity[] entities = new Entity[] { weapon.Entity, tankHit.Entity };
                base.NewEvent(eventInstance).AttachAll(entities).Schedule();
            }
        }