Ejemplo n.º 1
0
        private float ComputeAmmoDamage(IMyEntity ammoEnt)
        {
            AmmoInfo ammoInfo;

            Session.Instance.AmmoCollection.TryGetValue(ammoEnt.Model.AssetName, out ammoInfo);
            var damage = 10f;

            if (ammoInfo == null)
            {
                if (Session.Enforced.Debug == 3)
                {
                    Log.Line($"ShieldId:{Shield.EntityId.ToString()} - No Missile Ammo Match Found for {((MyEntity)ammoEnt).DebugName}! Let wepaon mod author know their ammo definition has improper model path");
                }
                return(damage);
            }
            var dmgMulti = UtilsStatic.GetDmgMulti(ammoInfo.BackKickForce);

            if (dmgMulti > 0)
            {
                if (ammoInfo.Explosive)
                {
                    damage = (ammoInfo.Damage * (ammoInfo.Radius * 0.5f)) * 7.5f * dmgMulti;
                }
                else
                {
                    damage = ammoInfo.Mass * ammoInfo.Speed * dmgMulti;
                }
                return(damage);
            }
            if (dmgMulti.Equals(-1f))
            {
                damage = -damage;
                return(damage);
            }
            if (ammoInfo.BackKickForce < 0 && dmgMulti.Equals(0))
            {
                damage = float.NegativeInfinity;
            }
            else if (ammoInfo.Explosive)
            {
                damage = ammoInfo.Damage * (ammoInfo.Radius * 0.5f) * 7.5f;
            }
            else
            {
                damage = ammoInfo.Mass * ammoInfo.Speed;
            }

            if (ammoInfo.Mass < 0 && ammoInfo.Radius <= 0)
            {
                damage = -damage;
            }
            return(damage);
        }