public static void UpdateRanges(bool updatingFromUi = false)
        {
            Debug.Log("[PhysicsRangeExtender]:  Updating ranges");
            FloatingOrigin.fetch.threshold = Mathf.Pow(PreSettings.GlobalRange * 1000 * 1.20f, 2);

            if (updatingFromUi)
            {
                TerrainExtender.UpdateSphere();
            }

            _globalSituation = new VesselRanges.Situation(
                PreSettings.GlobalRange * 1000,
                PreSettings.GlobalRange * 1000 * 1.05f,
                PreSettings.GlobalRange * 1000 * 1.10f,
                PreSettings.GlobalRange * 1000 * 0.99f);

            _baseRanges = new VesselRanges
            {
                escaping   = _globalSituation,
                flying     = _globalSituation,
                landed     = _globalSituation,
                orbit      = _globalSituation,
                prelaunch  = _globalSituation,
                splashed   = _globalSituation,
                subOrbital = _globalSituation
            };
            ApplyRangesToVessels(updatingFromUi);
        }
Пример #2
0
        /// <summary>
        /// This method will reduce the load/unload distances using a closer range to avoid issues.
        /// </summary>
        private void UnloadLandedVessels()
        {
            var vesselsCount = FlightGlobals.Vessels.Count;

            ScreenMessages.PostScreenMessage(
                "[PhysicsRangeExtender] Unloading landed vessels during active orbital fly.", 3f, ScreenMessageStyle.UPPER_CENTER);
            for (var i = 0; i < vesselsCount; i++)
            {
                if (FlightGlobals.Vessels[i].LandedOrSplashed)
                {
                    var safeSituation = new VesselRanges.Situation(
                        load: FlightGlobals.ActiveVessel.orbit.referenceBody.inverseRotThresholdAltitude * 0.90f,
                        unload: FlightGlobals.ActiveVessel.orbit.referenceBody.inverseRotThresholdAltitude * 0.95f,
                        pack: PreSettings.GlobalRange * 1000 * 1.10f,
                        unpack: PreSettings.GlobalRange * 1000 * 0.99f);

                    var newRanges = new VesselRanges
                    {
                        escaping   = _globalSituation,
                        flying     = _globalSituation,
                        landed     = safeSituation,
                        orbit      = _globalSituation,
                        prelaunch  = safeSituation,
                        splashed   = safeSituation,
                        subOrbital = _globalSituation
                    };

                    FlightGlobals.Vessels[i].vesselRanges = newRanges;
                }
            }
        }
Пример #3
0
        public static void SetVesselRanges(Vessel vessel, float load, float unload, float pack, float unpack, float revertAltitude)
        {
            ModuleRangeReverter moduleRangeReverter;

            if (!vessel.rootPart.Modules.Contains <ModuleRangeReverter>())
            {
                moduleRangeReverter = (ModuleRangeReverter)vessel.rootPart.AddModule("ModuleRangeReverter");
                moduleRangeReverter.originalRanges = vessel.vesselRanges;
            }
            else
            {
                moduleRangeReverter = (ModuleRangeReverter)vessel.rootPart.Modules.GetModule <ModuleRangeReverter>();
            }
            moduleRangeReverter.revertAltitude = revertAltitude;

            VesselRanges newRanges = new VesselRanges(vessel.vesselRanges);

            newRanges.escaping   = new VesselRanges.Situation(load, unload, pack, unpack);
            newRanges.flying     = new VesselRanges.Situation(load, unload, pack, unpack);
            newRanges.landed     = new VesselRanges.Situation(load, unload, pack, unpack);
            newRanges.orbit      = new VesselRanges.Situation(load, unload, pack, unpack);
            newRanges.prelaunch  = new VesselRanges.Situation(load, unload, pack, unpack);
            newRanges.splashed   = new VesselRanges.Situation(load, unload, pack, unpack);
            newRanges.subOrbital = new VesselRanges.Situation(load, unload, pack, unpack);

            vessel.vesselRanges = newRanges;
        }
Пример #4
0
        public static VesselRanges SetUnpackDistance(this Vessel vessel, float distance, bool ifGreater = false)
        {
            var doNotCompare = !ifGreater;
            var pack         = distance * 1.5f;
            var unpack       = distance;
            var load         = distance * 2f;
            var unload       = distance * 2.5f;
            var orig_ranges  = new VesselRanges(vessel.vesselRanges);

            foreach (var fi in situation_ranges)
            {
                if (!(fi.GetValue(vessel.vesselRanges) is VesselRanges.Situation sit))
                {
                    continue;
                }
                if (doNotCompare || sit.pack < pack)
                {
                    sit.pack = pack;
                }
                if (doNotCompare || sit.unpack < unpack)
                {
                    sit.unpack = unpack;
                }
                if (doNotCompare || sit.unload < unload)
                {
                    sit.unload = unload;
                }
                if (doNotCompare || sit.load < load)
                {
                    sit.load = load;
                }
            }
            return(orig_ranges);
        }
Пример #5
0
 public void RestoreUnpackDistance()
 {
     if (saved_ranges == null)
     {
         return;
     }
     vessel.vesselRanges = new VesselRanges(saved_ranges);
     saved_ranges        = null;
 }
Пример #6
0
        public void SetRange(Vessel v, float _range)
        {
            float _modRange = 10000;

            if (OrXHoloKron.instance.bdaChallenge)
            {
                _modRange = _preLoadRange * 1000;
                try
                {
                    var pqs = FlightGlobals.currentMainBody.pqsController;
                    if (pqs != null)
                    {
                        if (pqs.horizonDistance <= _modRange)
                        {
                            pqs.horizonDistance               = _modRange;
                            pqs.maxDetailDistance             = _modRange;
                            pqs.minDetailDistance             = _modRange;
                            pqs.visRadSeaLevelValue           = 200;
                            pqs.collapseSeaLevelValue         = 200;
                            FloatingOrigin.fetch.threshold    = _modRange;
                            FloatingOrigin.fetch.thresholdSqr = _modRange * _modRange;
                            Debug.Log("[OrX Log Set Range] === FLOATING ORIGIN THRESHOLD: " + FloatingOrigin.fetch.threshold + " meters =====");
                        }
                    }
                }
                catch { }

                if (v.vesselRanges.landed.load <= _modRange * 950f)
                {
                    _vesselLanded = new VesselRanges.Situation(_modRange, _modRange, _modRange, _modRange);
                    _vesselFlying = new VesselRanges.Situation(_modRange * 4, _modRange * 4, _modRange * 4, _modRange * 4);
                    _vesselOther  = new VesselRanges.Situation(_modRange * 10, _modRange * 10, _modRange * 10, _modRange * 10);

                    _vesselRanges = new VesselRanges
                    {
                        escaping   = _vesselOther,
                        flying     = _vesselFlying,
                        landed     = _vesselLanded,
                        orbit      = _vesselOther,
                        prelaunch  = _vesselLanded,
                        splashed   = _vesselFlying,
                        subOrbital = _vesselOther
                    };

                    v.vesselRanges = new VesselRanges(_vesselRanges);
                }
            }
            else
            {
                SetGoalRange(v);
            }
        }
Пример #7
0
        public void SetGoalRange(Vessel v)
        {
            _vesselRanges = new VesselRanges
            {
                escaping   = new VesselRanges.Situation(10000, 10000, 10000, 10000),
                flying     = new VesselRanges.Situation(10000, 10000, 10000, 10000),
                landed     = new VesselRanges.Situation(10000, 10000, 10000, 10000),
                orbit      = new VesselRanges.Situation(10000, 10000, 10000, 10000),
                prelaunch  = new VesselRanges.Situation(10000, 10000, 10000, 10000),
                splashed   = new VesselRanges.Situation(10000, 10000, 10000, 10000),
                subOrbital = new VesselRanges.Situation(10000, 10000, 10000, 10000)
            };

            v.vesselRanges = new VesselRanges(_vesselRanges);
        }
Пример #8
0
 public void SetUnpackDistance(float distance)
 {
     if (saved_ranges == null)
     {
         saved_ranges = new VesselRanges(vessel.vesselRanges);
     }
     foreach (var fi in situation_ranges)
     {
         var sit = fi.GetValue(vessel.vesselRanges) as VesselRanges.Situation;
         if (sit == null)
         {
             continue;
         }
         sit.pack   = distance * 1.5f;
         sit.unpack = distance;
         sit.unload = distance * 2.5f;
         sit.load   = distance * 2f;
     }
 }
Пример #9
0
        public static void UpdateRanges(bool updatingFromUi = false)
        {
            Debug.Log("Updating ranges");
            FloatingOrigin.fetch.threshold = Mathf.Pow(PreSettings.GlobalRange * 1000 * 1.20f, 2);

            _globalSituation = new VesselRanges.Situation(
                load: PreSettings.GlobalRange * 1000,
                unload: PreSettings.GlobalRange * 1000 * 1.05f,
                pack: PreSettings.GlobalRange * 1000 * 1.10f,
                unpack: PreSettings.GlobalRange * 1000 * 0.99f);

            _baseRanges = new VesselRanges
            {
                escaping   = _globalSituation,
                flying     = _globalSituation,
                landed     = _globalSituation,
                orbit      = _globalSituation,
                prelaunch  = _globalSituation,
                splashed   = _globalSituation,
                subOrbital = _globalSituation
            };
            ApplyRangesToVessels(updatingFromUi);
        }
Пример #10
0
 public SituationLoadDistanceValue(VesselRanges.Situation situation)
 {
     situationValue = situation;
     InitializeSuffixes();
 }
Пример #11
0
 public LoadDistanceValue(VesselRanges ranges)
 {
     vesselRanges = ranges;
     InitializeSuffixes();
 }
Пример #12
0
 public void RestoreUnpackDistance()
 {
     if(saved_ranges == null) return;
     vessel.vesselRanges = saved_ranges;
     saved_ranges = null;
 }
Пример #13
0
 public void SetUnpackDistance(float distance)
 {
     saved_ranges = vessel.SetUnpackDistance(distance);
 }
Пример #14
0
        private VesselRanges.Situation ClampedSituationLanded(VesselRanges.Situation input, VesselRanges.Situation minSituation)
        {
            float maxLanded = 11000;
            float load = Mathf.Clamp(input.load, minSituation.load, maxLanded*.9f*.9f);
            float unload = Mathf.Clamp(input.unload, minSituation.unload, maxLanded*.9f);
            float pack = Mathf.Clamp(input.pack, minSituation.pack, maxLanded);
            float unpack = Mathf.Clamp(input.unpack, minSituation.unpack, maxLanded*.9f*.9f*.9f);

            VesselRanges.Situation output = new VesselRanges.Situation(load, unload, pack, unpack);
            return output;
        }
Пример #15
0
        private VesselRanges.Situation ClampedSituation(VesselRanges.Situation input, VesselRanges.Situation minSituation)
        {
            float load = Mathf.Clamp(input.load, minSituation.load, 81000);
            float unload = Mathf.Clamp(input.unload, minSituation.unload, 90000);
            float pack = Mathf.Clamp(input.pack, minSituation.pack, 100000);
            float unpack = Mathf.Clamp(input.unpack, minSituation.unpack, 72900);

            VesselRanges.Situation output = new VesselRanges.Situation(load, unload, pack, unpack);
            return output;
        }
Пример #16
0
 public LoadDistanceValue(VesselRanges ranges)
 {
     vesselRanges = ranges;
     InitializeSuffixes();
 }