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