Пример #1
0
        internal static string GetRangeStateText(RangeState rangeState, FlightStatus corridorState)
        {
            string state       = "DISARM";
            string description = string.Empty;

            switch (rangeState)
            {
            case RangeState.Nominal:
                state = "NOMINAL";
                break;

            case RangeState.Armed:
                state = "ARM";
                break;

            case RangeState.Destroyed:
                state = "DESTROYED";
                break;

            case RangeState.Safe:
                state = "SAFE";
                break;
            }
            description = FlightCorridorBase.GetFlightStatusText(corridorState);
            return(string.Format("{0}: {1}", state, description));
        }
Пример #2
0
 protected void Start()
 {
     try
     {
         settings       = Settings.InstantiateFromConfig();
         flightCorridor = FlightCorridorBase.InstantiateFromConfig();
         flightCorridor.SystemSettings = settings;
         flightRange = new FlightRange();
         flightRange.Initialize(this);
     }
     catch (Exception ex)
     {
         Debug.LogException(ex);
     }
 }
Пример #3
0
        internal static IFlightCorridor InstantiateFromConfig()
        {
            if (FlightGlobals.ActiveVessel == null)
            {
                return(null);
            }

            ConfigNode         rootNode      = null;
            ConfigNode         configNode    = null;
            ConfigNode         corridorsNode = null;
            ConfigNode         tempNode      = null;
            ConfigNode         defaultNode   = null;
            FlightCorridorBase instance      = null;

            try
            {
                var path = string.Format("{0}GameData/RangeSafety/FlightCorridors.cfg", KSPUtil.ApplicationRootPath);
                rootNode = ConfigNode.Load(path);

                if (rootNode.TryGetNode("RANGESAFETY", ref tempNode))
                {
                    if (tempNode.TryGetNode("FlightCorridors", ref corridorsNode))
                    {
                        for (int i = 0; i < corridorsNode.nodes.Count; i++)
                        {
                            ConfigNode testNode = corridorsNode.nodes[i];
                            double     lat = 0, lon = 0;
                            if (!testNode.TryGetValue("latitude", ref lat))
                            {
                                break;
                            }
                            if (!testNode.TryGetValue("longitude", ref lon))
                            {
                                break;
                            }
                            var vesselCoords = new Coordinates(FlightGlobals.ActiveVessel.latitude, FlightGlobals.ActiveVessel.longitude);
                            var padCoords    = new Coordinates(lat, lon);
                            if (vesselCoords.DistanceTo(padCoords) <= 1500)
                            {
                                configNode = testNode;
                                break;
                            }
                            else if (testNode.HasValue("default"))
                            {
                                defaultNode = testNode;
                            }
                        }
                    }
                }

                if (configNode == null)
                {
                    configNode = defaultNode;
                }
                if (configNode == null)
                {
                    return(null);
                }
                if (configNode.HasNode("Inclination"))
                {
                    instance = new FlightCorridorInclinations();
                }
                else
                {
                    instance = new FlightCorridorBase();
                }
                instance.ParseFromConfig(configNode);
            }
            catch (Exception e)
            {
                Debug.LogError("FlightCorridorBase.InstantiateFromConfig() caught an exception trying to load FlightCorridors.cfg: " + e);
            }
            return(instance);
        }
Пример #4
0
 private void EnterSafeState(FlightStatus triggerStatus)
 {
     FlightLogger.eventLog.Add(string.Format("[{0}]: Range safety entered SAFE state: {1}", KSPUtil.PrintTimeCompact((int)Math.Floor(FlightGlobals.ActiveVessel.missionTime), false), FlightCorridorBase.GetFlightStatusText(triggerStatus)));
     State = RangeState.Safe;
 }
Пример #5
0
        private void EnterArmedState(FlightStatus triggerStatus)
        {
            FlightLogger.eventLog.Add(string.Format("[{0}]: Range safety entered ARM state: {1}", KSPUtil.PrintTimeCompact((int)Math.Floor(FlightGlobals.ActiveVessel.missionTime), false), FlightCorridorBase.GetFlightStatusText(triggerStatus)));
            State = RangeState.Armed;

            if (rangeSafetyInstance.settings.terminateThrustOnArm)
            {
                actionQueue.Enqueue(RangeActions.TerminateThrust);
            }
            if (rangeSafetyInstance.settings.destroySolids)
            {
                actionQueue.Enqueue(RangeActions.DestroySolids);
            }
            if (rangeSafetyInstance.settings.coastToApogeeBeforeAbort)
            {
                actionQueue.Enqueue(RangeActions.CoastToApogee);
            }
            if (rangeSafetyInstance.settings.abortOnArm)
            {
                actionQueue.Enqueue(RangeActions.ExecuteAbort);
            }
            if (rangeSafetyInstance.settings.delay3secAfterAbort)
            {
                actionQueue.Enqueue(RangeActions.WaitForAbortToClear);
            }
            if (rangeSafetyInstance.settings.destroyLaunchVehicle)
            {
                actionQueue.Enqueue(RangeActions.TerminateFlight);
            }
        }