Example #1
0
        public bool PatchBody(CelestialBody body, ConfigNode node)
        {
            if ((object)body == null)
            {
                return(false);
            }
            double dtmp;
            bool   btmp;

            bool   updateMass = false;
            double origRadius = body.Radius;

            if (node != null)
            {
                print("Patching body " + body.bodyName + " from node.");
                if (node.HasValue("rotationPeriod"))
                {
                    if (double.TryParse(node.GetValue("rotationPeriod"), out dtmp))
                    {
                        body.rotationPeriod = dtmp;
                    }
                }
                if (node.HasValue("atmosphereDepth"))
                {
                    if (double.TryParse(node.GetValue("atmosphereDepth"), out dtmp))
                    {
                        body.atmosphereDepth = dtmp;
                    }
                }
                if (node.HasValue("atmosphereAdiabaticIndex"))
                {
                    if (double.TryParse(node.GetValue("atmosphereAdiabaticIndex"), out dtmp))
                    {
                        body.atmosphereAdiabaticIndex = dtmp;
                    }
                }
                if (node.HasValue("atmosphereMolarMass"))
                {
                    if (double.TryParse(node.GetValue("atmosphereMolarMass"), out dtmp))
                    {
                        body.atmosphereMolarMass = dtmp;
                    }
                }
                if (node.HasValue("atmospherePressureSeaLevel"))
                {
                    if (double.TryParse(node.GetValue("atmospherePressureSeaLevel"), out dtmp))
                    {
                        body.atmospherePressureSeaLevel = dtmp;
                    }
                }
                if (node.HasValue("atmosphereTemperatureSeaLevel"))
                {
                    if (double.TryParse(node.GetValue("atmosphereTemperatureSeaLevel"), out dtmp))
                    {
                        body.atmosphereTemperatureSeaLevel = dtmp;
                    }
                }

                if (node.HasNode("atmospherePressureCurve"))
                {
                    body.atmosphereUsePressureCurve = true;
                    body.atmospherePressureCurve.Load(node.GetNode("atmospherePressureCurve"));
                }
                else if (node.HasValue("atmosphereUsePressureCurve"))
                {
                    if (bool.TryParse(node.GetValue("atmosphereUsePressureCurve"), out btmp))
                    {
                        body.atmosphereUsePressureCurve = btmp;
                    }
                }
                if (node.HasNode("atmosphereTemperatureCurve"))
                {
                    body.atmosphereUseTemperatureCurve = true;
                    body.atmosphereTemperatureCurve.Load(node.GetNode("atmosphereTemperatureCurve"));
                }
                else if (node.HasValue("atmosphereUseTemperatureCurve"))
                {
                    if (bool.TryParse(node.GetValue("atmosphereUseTemperatureCurve"), out btmp))
                    {
                        body.atmosphereUseTemperatureCurve = btmp;
                    }
                }
                if (node.HasNode("latitudeTemperatureBiasCurve"))
                {
                    body.latitudeTemperatureBiasCurve.Load(node.GetNode("latitudeTemperatureBiasCurve"));
                }
                if (node.HasNode("latitudeTemperatureSunMultCurve"))
                {
                    body.latitudeTemperatureSunMultCurve.Load(node.GetNode("latitudeTemperatureSunMultCurve"));
                }
                if (node.HasNode("axialTemperatureSunMultCurve"))
                {
                    body.axialTemperatureSunMultCurve.Load(node.GetNode("axialTemperatureSunMultCurve"));
                }
                if (node.HasNode("atmosphereTemperatureSunMultCurve"))
                {
                    body.atmosphereTemperatureSunMultCurve.Load(node.GetNode("atmosphereTemperatureSunMultCurve"));
                }
                if (node.HasNode("axialTemperatureSunBiasCurve"))
                {
                    body.axialTemperatureSunBiasCurve.Load(node.GetNode("axialTemperatureSunBiasCurve"));
                }
                if (node.HasNode("axialTemperatureSunMultCurve"))
                {
                    body.axialTemperatureSunMultCurve.Load(node.GetNode("axialTemperatureSunMultCurve"));
                }
                if (node.HasNode("eccentricityTemperatureBiasCurve"))
                {
                    body.eccentricityTemperatureBiasCurve.Load(node.GetNode("eccentricityTemperatureBiasCurve"));
                }

                if (node.HasValue("Radius"))
                {
                    if (double.TryParse(node.GetValue("Radius"), out dtmp))
                    {
                        body.Radius = dtmp;
                        updateMass  = true;
                    }
                }

                // Orbit
                ConfigNode onode = node.GetNode("Orbit");
                if (body.orbitDriver != null && body.orbit != null && onode != null)
                {
                    patchOrbits = true;

                    if (node.HasValue("semiMajorAxis"))
                    {
                        if (double.TryParse(node.GetValue("semiMajorAxis"), out dtmp))
                        {
                            body.orbit.semiMajorAxis = dtmp;
                        }
                    }
                    if (node.HasValue("eccentricity"))
                    {
                        if (double.TryParse(node.GetValue("eccentricity"), out dtmp))
                        {
                            body.orbit.eccentricity = dtmp;
                        }
                    }
                    if (node.HasValue("meanAnomalyAtEpoch"))
                    {
                        if (double.TryParse(node.GetValue("meanAnomalyAtEpoch"), out dtmp))
                        {
                            body.orbit.meanAnomalyAtEpoch = dtmp;
                        }
                    }

                    if (node.HasValue("meanAnomalyAtEpochD"))
                    {
                        if (double.TryParse(node.GetValue("meanAnomalyAtEpochD"), out dtmp))
                        {
                            body.orbit.meanAnomalyAtEpoch  = dtmp;
                            body.orbit.meanAnomalyAtEpoch *= DEG2RAD;
                        }
                    }
                    if (node.HasValue("inclination"))
                    {
                        if (double.TryParse(node.GetValue("inclination"), out dtmp))
                        {
                            body.orbit.inclination = dtmp;
                        }
                    }
                    if (node.HasValue("LAN"))
                    {
                        if (double.TryParse(node.GetValue("LAN"), out dtmp))
                        {
                            body.orbit.LAN = dtmp;
                        }
                    }
                    if (node.HasValue("argumentOfPeriapsis"))
                    {
                        if (double.TryParse(node.GetValue("argumentOfPeriapsis"), out dtmp))
                        {
                            body.orbit.argumentOfPeriapsis = dtmp;
                        }
                    }
                }
            }
            else if (globalRotationRescale != 1d || globalRescale != 1d)
            {
                print("Patching body " + body.bodyName + " from globals.");
            }

            body.rotationPeriod *= globalRotationRescale;

            if (globalRescale != 1d)
            {
                body.Radius *= globalRescale;
                updateMass   = true;
            }
            if (updateMass)
            {
                patchOrbits = true;
                GeeASLToOthers(body);
            }
            if (globalRescaleAtmo != 1d && body.atmosphere)
            {
                body.atmospherePressureCurve           = RescaleCurve(body.atmospherePressureCurve, globalRescaleAtmo);
                body.atmosphereTemperatureCurve        = RescaleCurve(body.atmosphereTemperatureCurve, globalRescaleAtmo);
                body.atmosphereTemperatureSunMultCurve = RescaleCurve(body.atmosphereTemperatureSunMultCurve, globalRescaleAtmo);
                body.atmosphereDepth *= globalRescaleAtmo;
            }


            body.SetupConstants();
            // Fix up PQS
            if (PatchPQS(body, node, origRadius) || origRadius != body.Radius)
            {
                StartCoroutine(PatchScaledSpace(body, node, origRadius));
            }
            body.CBUpdate();
            return(true);
        }
Example #2
0
        public bool PatchBody(CelestialBody body, ConfigNode node)
        {
            if((object)body == null)
                return false;
            double dtmp;
            bool btmp;

            bool updateMass = false;
            double origRadius = body.Radius;

            if (node != null)
            {
                print("Patching body " + body.bodyName + " from node.");
                if (node.HasValue("rotationPeriod"))
                    if (double.TryParse(node.GetValue("rotationPeriod"), out dtmp))
                        body.rotationPeriod = dtmp;
                if (node.HasValue("atmosphereDepth"))
                    if (double.TryParse(node.GetValue("atmosphereDepth"), out dtmp))
                        body.atmosphereDepth = dtmp;
                if (node.HasValue("atmosphereAdiabaticIndex"))
                    if (double.TryParse(node.GetValue("atmosphereAdiabaticIndex"), out dtmp))
                        body.atmosphereAdiabaticIndex = dtmp;
                if (node.HasValue("atmosphereMolarMass"))
                    if (double.TryParse(node.GetValue("atmosphereMolarMass"), out dtmp))
                        body.atmosphereMolarMass = dtmp;
                if (node.HasValue("atmospherePressureSeaLevel"))
                    if (double.TryParse(node.GetValue("atmospherePressureSeaLevel"), out dtmp))
                        body.atmospherePressureSeaLevel = dtmp;
                if (node.HasValue("atmosphereTemperatureSeaLevel"))
                    if (double.TryParse(node.GetValue("atmosphereTemperatureSeaLevel"), out dtmp))
                        body.atmosphereTemperatureSeaLevel = dtmp;

                if (node.HasNode("atmospherePressureCurve"))
                {
                    body.atmosphereUsePressureCurve = true;
                    body.atmospherePressureCurve.Load(node.GetNode("atmospherePressureCurve"));
                }
                else if (node.HasValue("atmosphereUsePressureCurve"))
                {
                    if (bool.TryParse(node.GetValue("atmosphereUsePressureCurve"), out btmp))
                        body.atmosphereUsePressureCurve = btmp;
                }
                if (node.HasNode("atmosphereTemperatureCurve"))
                {
                    body.atmosphereUseTemperatureCurve = true;
                    body.atmosphereTemperatureCurve.Load(node.GetNode("atmosphereTemperatureCurve"));
                }
                else if (node.HasValue("atmosphereUseTemperatureCurve"))
                {
                    if (bool.TryParse(node.GetValue("atmosphereUseTemperatureCurve"), out btmp))
                        body.atmosphereUseTemperatureCurve = btmp;
                }
                if (node.HasNode("latitudeTemperatureBiasCurve"))
                {
                    body.latitudeTemperatureBiasCurve.Load(node.GetNode("latitudeTemperatureBiasCurve"));
                }
                if (node.HasNode("latitudeTemperatureSunMultCurve"))
                {
                    body.latitudeTemperatureSunMultCurve.Load(node.GetNode("latitudeTemperatureSunMultCurve"));
                }
                if (node.HasNode("axialTemperatureSunMultCurve"))
                {
                    body.axialTemperatureSunMultCurve.Load(node.GetNode("axialTemperatureSunMultCurve"));
                }
                if (node.HasNode("atmosphereTemperatureSunMultCurve"))
                {
                    body.atmosphereTemperatureSunMultCurve.Load(node.GetNode("atmosphereTemperatureSunMultCurve"));
                }
                if (node.HasNode("axialTemperatureSunBiasCurve"))
                {
                    body.axialTemperatureSunBiasCurve.Load(node.GetNode("axialTemperatureSunBiasCurve"));
                }
                if (node.HasNode("axialTemperatureSunMultCurve"))
                {
                    body.axialTemperatureSunMultCurve.Load(node.GetNode("axialTemperatureSunMultCurve"));
                }
                if (node.HasNode("eccentricityTemperatureBiasCurve"))
                {
                    body.eccentricityTemperatureBiasCurve.Load(node.GetNode("eccentricityTemperatureBiasCurve"));
                }

                if (node.HasValue("Radius"))
                {
                    if (double.TryParse(node.GetValue("Radius"), out dtmp))
                    {
                        body.Radius = dtmp;
                        updateMass = true;
                    }
                }

                // Orbit
                ConfigNode onode = node.GetNode("Orbit");
                if (body.orbitDriver != null && body.orbit != null && onode != null)
                {
                    patchOrbits = true;

                    if (node.HasValue("semiMajorAxis"))
                        if (double.TryParse(node.GetValue("semiMajorAxis"), out dtmp))
                            body.orbit.semiMajorAxis = dtmp;
                    if (node.HasValue("eccentricity"))
                        if (double.TryParse(node.GetValue("eccentricity"), out dtmp))
                            body.orbit.eccentricity = dtmp;
                    if (node.HasValue("meanAnomalyAtEpoch"))
                        if (double.TryParse(node.GetValue("meanAnomalyAtEpoch"), out dtmp))
                            body.orbit.meanAnomalyAtEpoch = dtmp;

                    if (node.HasValue("meanAnomalyAtEpochD"))
                    {
                        if (double.TryParse(node.GetValue("meanAnomalyAtEpochD"), out dtmp))
                        {
                            body.orbit.meanAnomalyAtEpoch = dtmp;
                            body.orbit.meanAnomalyAtEpoch *= DEG2RAD;
                        }
                    }
                    if (node.HasValue("inclination"))
                        if (double.TryParse(node.GetValue("inclination"), out dtmp))
                            body.orbit.inclination = dtmp;
                    if (node.HasValue("LAN"))
                        if (double.TryParse(node.GetValue("LAN"), out dtmp))
                            body.orbit.LAN = dtmp;
                    if (node.HasValue("argumentOfPeriapsis"))
                        if (double.TryParse(node.GetValue("argumentOfPeriapsis"), out dtmp))
                            body.orbit.argumentOfPeriapsis = dtmp;

                }
            }
            else if (globalRotationRescale != 1d || globalRescale != 1d)
                print("Patching body " + body.bodyName + " from globals.");

            body.rotationPeriod *= globalRotationRescale;

            if(globalRescale != 1d)
            {
                body.Radius *= globalRescale;
                updateMass = true;
            }
            if (updateMass)
            {
                patchOrbits = true;
                GeeASLToOthers(body);
            }
            if (globalRescaleAtmo != 1d && body.atmosphere)
            {
                body.atmospherePressureCurve = RescaleCurve(body.atmospherePressureCurve, globalRescaleAtmo);
                body.atmosphereTemperatureCurve = RescaleCurve(body.atmosphereTemperatureCurve, globalRescaleAtmo);
                body.atmosphereTemperatureSunMultCurve = RescaleCurve(body.atmosphereTemperatureSunMultCurve, globalRescaleAtmo);
                body.atmosphereDepth *= globalRescaleAtmo;
            }

            body.SetupConstants();
            // Fix up PQS
            if(PatchPQS(body, node, origRadius) || origRadius != body.Radius)
                StartCoroutine(PatchScaledSpace(body, node, origRadius));
            body.CBUpdate();
            return true;
        }