Пример #1
0
        // from MyParachute.UpdateParachute()
        public static void Parachute_GetLoadEstimate(MyParachuteDefinition parachute, float targetDescendVelocity, out float maxMass, out float disreefAtmosphere)
        {
            float atmosphere = 1.0f;
            float atmosMod   = 10.0f * (atmosphere - parachute.ReefAtmosphereLevel);

            if (atmosMod <= 0.5f || double.IsNaN(atmosMod))
            {
                atmosMod = 0.5f;
            }
            else
            {
                atmosMod = (float)Math.Log(atmosMod - 0.99f) + 5.0f;

                if (atmosMod < 0.5f || double.IsNaN(atmosMod))
                {
                    atmosMod = 0.5f;
                }
            }

            float gridSize = MyDefinitionManager.Static.GetCubeSize(parachute.CubeSize);

            // basically the atmosphere level at which atmosMod is above 0.5; finds real atmosphere level at which chute starts to fully open
            // thanks to Equinox for helping with the math here and at maxMass :}
            disreefAtmosphere = ((float)Math.Exp(-4.5) + 1f) / 10 + parachute.ReefAtmosphereLevel;

            float chuteSize      = (atmosMod * parachute.RadiusMultiplier * gridSize) / 2.0f;
            float chuteArea      = MathHelper.Pi * chuteSize * chuteSize;
            float realAirDensity = (atmosphere * 1.225f);

            maxMass = 2.5f * realAirDensity * (targetDescendVelocity * targetDescendVelocity) * chuteArea * parachute.DragCoefficient / GAME_EARTH_GRAVITY;
        }
Пример #2
0
        private static List <MyDefinitionId> GetParachuteList(MyObjectBuilder_CubeBlock cube)
        {
            List <MyDefinitionId> parachuteIds = new List <MyDefinitionId>();

            try
            {
                MyParachuteDefinition parachuteDefinition = MyDefinitionManager.Static.GetCubeBlockDefinition(cube.GetId()) as MyParachuteDefinition;
                if (parachuteDefinition == null)
                {
                    return(parachuteIds);
                }
                parachuteIds.Add(parachuteDefinition.MaterialDefinitionId);
            }
            catch (Exception e)
            {
                Core.GeneralLog.WriteToLog("GetParachuteList", $"Exception getting parachute list! {e}");
            }
            return(parachuteIds);
        }