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); } }
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(); } }