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