//VesselOrCrewStuff private static Boolean CheckVesselOrCrewForJump(String ID, KACAlarm.AlarmTypeEnum aType) { if (aType == KACAlarm.AlarmTypeEnum.Crew && StoredCrewExists(ID)) { return(true); } else if (StoredVesselExists(ID)) { if (settings.AllowJumpToAsteroid) { return(true); } else if (StoredVessel(ID).vesselType != VesselType.SpaceObject) { return(true); } else { return(false); } } else { return(false); } }
//VesselOrCrewStuff private static Boolean CheckVesselOrCrewForJump(String ID, KACAlarm.AlarmTypeEnum aType) { if (aType == KACAlarm.AlarmTypeEnum.Crew && StoredCrewExists(ID)) { return(true); } else { Vessel v = StoredVessel(ID); if (v != null) { if (v.vesselType != VesselType.SpaceObject && v.DiscoveryInfo.Level != DiscoveryLevels.Owned) { return(false); } else if (settings.AllowJumpToAsteroid) { return(true); } else if (StoredVessel(ID).vesselType != VesselType.SpaceObject) { return(true); } else { return(false); } } else { return(false); } } }
/// <summary> /// Create a new Alarm method for calling via API /// </summary> /// <param name="AlarmType">Enum of type of alarm</param> /// <param name="Name">Text Name of the Alarm</param> /// <param name="UT">Universal Time of the Alarm</param> /// <returns>Alarms Unique ID</returns> public String CreateAlarm(KACAlarm.AlarmTypeEnum AlarmType, String Name, Double UT) //public KACAlarm CreateAlarm(String Name) { KACAlarm tmpAlarm = new KACAlarm(UT); tmpAlarm.TypeOfAlarm = AlarmType; tmpAlarm.Name = Name; alarms.Add(tmpAlarm); return(tmpAlarm.ID); }
internal static KACAlarm LoadFromString3(String AlarmDetails, Double CurrentUT) { //String is "VesselID|Name|Notes|AlarmTime.UT|AlarmMarginSecs|Type|Enabled|HaltWarp|PauseGame|ActionedAt|Maneuver|Xfer|Target|Options|<ENDLINE>"); String[] vars = AlarmDetails.Split("|".ToCharArray(), StringSplitOptions.None); MonoBehaviourExtended.LogFormatted("AlarmExtract"); for (int i = 0; i < vars.Length; i++) { MonoBehaviourExtended.LogFormatted("{0}:{1}", i, vars[i]); } String SaveName = HighLogic.CurrentGame.Title; String VesselID = vars[0]; String Name = KACUtils.DecodeVarStrings(vars[1]); String Notes = KACUtils.DecodeVarStrings(vars[2]); Double UT = Convert.ToDouble(vars[3]); Double AlarmMarginSecs = Convert.ToDouble(vars[4]); KACAlarm.AlarmTypeEnum TypeOfAlarm = (KACAlarm.AlarmTypeEnum)Enum.Parse(typeof(KACAlarm.AlarmTypeEnum), vars[5]); Boolean Enabled = Convert.ToBoolean(vars[6]); Boolean HaltWarp = Convert.ToBoolean(vars[7]); Boolean PauseGame = Convert.ToBoolean(vars[8]); Double ActionedAt = Convert.ToDouble(vars[9]); List <ManeuverNode> ManNodes = null; String XferOriginBodyName = "", XferTargetBodyName = ""; ITargetable TargetObject = null; String TargetLoader = ""; Boolean Triggered = false, Actioned = false, AlarmWindowClosed = false; if (vars[10] != "") { ManNodes = ManNodeDeserializeList(vars[10]); } if (vars[11] != "") { try { MonoBehaviourExtended.LogFormatted("{0}", vars[11]); String[] XferParts = vars[11].Split(",".ToCharArray()); XferOriginBodyName = XferParts[0]; XferTargetBodyName = XferParts[1]; } catch (Exception ex) { MonoBehaviourExtended.LogFormatted("Unable to load transfer details for {0}", Name); MonoBehaviourExtended.LogFormatted(ex.Message); } } if (vars[12] != "") { //find the targetable object and set it TargetObject = TargetDeserialize(vars[12]); if (TargetObject == null && vars[12].StartsWith("Vessel,")) { TargetLoader = vars[12]; } } //Now do the work to set Actioned/triggered/etc if needed //LogFormatted("A:{0},T:{1:0},Act:{2:0}", this.Name, CurrentUT, this.ActionedAt); if (ActionedAt > 0 && CurrentUT > ActionedAt) { MonoBehaviourExtended.LogFormatted("Suppressing Alarm on Load:{0}", Name); Triggered = true; Actioned = true; AlarmWindowClosed = true; } else if (ActionedAt > CurrentUT) { MonoBehaviourExtended.LogFormatted("Reenabling Alarm on Load:{0}", Name); Triggered = false; Actioned = false; ActionedAt = 0; AlarmWindowClosed = false; } KACAlarm resultAlarm = new KACAlarm(UT); resultAlarm.Name = Name; resultAlarm.VesselID = VesselID; resultAlarm.Enabled = Enabled; resultAlarm.Notes = Notes; resultAlarm.AlarmMarginSecs = AlarmMarginSecs; resultAlarm.TypeOfAlarm = TypeOfAlarm; if (HaltWarp) { resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.KillWarp; } else if (PauseGame) { resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.PauseGame; } if (ManNodes != null) { resultAlarm.ManNodes = ManNodes; } if (TargetObject != null) { resultAlarm.TargetObject = TargetObject; } resultAlarm.TargetLoader = TargetLoader; resultAlarm.XferOriginBodyName = XferOriginBodyName; resultAlarm.XferTargetBodyName = XferTargetBodyName; resultAlarm.Triggered = Triggered; resultAlarm.Actioned = Actioned; resultAlarm.AlarmWindowClosed = AlarmWindowClosed; return(resultAlarm); }
// <summary> // Basically deserializing the alarm // </summary> // <param name="AlarmDetails"></param> //internal static KACAlarm LoadFromString(String AlarmDetails) //{ // String[] vars = AlarmDetails.Split("|".ToCharArray()); // String VesselID = ""; // String SaveName = vars[0]; // String Name = vars[1]; // Boolean Enabled = Convert.ToBoolean(vars[2]); // Double UT = Convert.ToDouble(vars[3]); // Boolean HaltWarp = Convert.ToBoolean(vars[4]); // Boolean PauseGame = false; // String Notes = ""; // if (vars.Length == 6) // Notes = vars[5]; // else // { // PauseGame = Convert.ToBoolean(vars[5]); // Notes = vars[6]; // } // KACAlarm resultAlarm = new KACAlarm(UT); // resultAlarm.Name = Name; // resultAlarm.Enabled = Enabled; // resultAlarm.Notes = Notes; // resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.MessageOnly; // if (HaltWarp) // resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.KillWarp; // else if (PauseGame) // resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.PauseGame; // return resultAlarm; //} internal static KACAlarm LoadFromString2(String AlarmDetails) { String[] vars = AlarmDetails.Split("|".ToCharArray(), StringSplitOptions.None); String SaveName = HighLogic.CurrentGame.Title; String VesselID = vars[0]; String Name = vars[1]; String Notes = vars[2]; Double UT = Convert.ToDouble(vars[3]); Double AlarmMarginSecs = Convert.ToDouble(vars[4]); KACAlarm.AlarmTypeEnum TypeOfAlarm = (KACAlarm.AlarmTypeEnum)Enum.Parse(typeof(KACAlarm.AlarmTypeEnum), vars[5]); Boolean Enabled = Convert.ToBoolean(vars[6]); Boolean HaltWarp = Convert.ToBoolean(vars[7]); Boolean PauseGame = Convert.ToBoolean(vars[8]); String strOptions = vars[9]; List <ManeuverNode> ManNodes = null; String XferOriginBodyName = "", XferTargetBodyName = ""; ITargetable TargetObject = null; String TargetLoader = ""; switch (TypeOfAlarm) { case KACAlarm.AlarmTypeEnum.Maneuver: //Generate the Nodes List from the string ManNodes = ManNodeDeserializeList(strOptions); break; case KACAlarm.AlarmTypeEnum.Transfer: try { String[] XferParts = strOptions.Split(",".ToCharArray()); XferOriginBodyName = XferParts[0]; XferTargetBodyName = XferParts[1]; } catch (Exception ex) { MonoBehaviourExtended.LogFormatted("Unable to load transfer details for {0}", Name); MonoBehaviourExtended.LogFormatted(ex.Message); } break; case KACAlarm.AlarmTypeEnum.AscendingNode: case KACAlarm.AlarmTypeEnum.DescendingNode: case KACAlarm.AlarmTypeEnum.LaunchRendevous: if (strOptions != "") { //find the targetable object and set it TargetObject = TargetDeserialize(strOptions); if (TargetObject == null && strOptions.StartsWith("Vessel,")) { TargetLoader = strOptions; } } break; default: break; } KACAlarm resultAlarm = new KACAlarm(UT); resultAlarm.Name = Name; resultAlarm.VesselID = VesselID; resultAlarm.Enabled = Enabled; resultAlarm.Notes = Notes; resultAlarm.AlarmMarginSecs = AlarmMarginSecs; resultAlarm.TypeOfAlarm = TypeOfAlarm; if (HaltWarp) { resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.KillWarp; } else if (PauseGame) { resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.PauseGame; } if (ManNodes != null) { resultAlarm.ManNodes = ManNodes; } if (TargetObject != null) { resultAlarm.TargetObject = TargetObject; } resultAlarm.TargetLoader = TargetLoader; resultAlarm.XferOriginBodyName = XferOriginBodyName; resultAlarm.XferTargetBodyName = XferTargetBodyName; return(resultAlarm); }
/// <summary> /// Code to reset the settings etc when the new button is hit /// </summary> private void NewAddAlarm() { //Set time variables timeRaw.BuildFromUT(600); strRawUT = ""; _ShowAddMessages = false; //option for xfer mode if (settings.XferUseModelData) intXferType = 0; else intXferType = 1; //default margin timeMargin.BuildFromUT(settings.AlarmDefaultMargin); //set default strings if (KACWorkerGameState.CurrentVessel != null) strAlarmName = KACWorkerGameState.CurrentVessel.vesselName + ""; else strAlarmName = "No Vessel"; strAlarmNotes = ""; AddNotesHeight = 100; AddActions = settings.AlarmDefaultAction.Duplicate(); //blnHaltWarp = true; //set initial alarm type based on whats on the flight path if (KACWorkerGameState.ManeuverNodeExists) AddType = KACAlarm.AlarmTypeEnum.Maneuver;//AddAlarmType.Node; else if (KACWorkerGameState.SOIPointExists) AddType = KACAlarm.AlarmTypeEnum.SOIChange;//AddAlarmType.Node; else AddType = KACAlarm.AlarmTypeEnum.Raw;//AddAlarmType.Node; //trigger the work to set each type AddTypeChanged(); //build the XFer parents list SetUpXferParents(); intXferCurrentParent = 0; SetupXferOrigins(); intXferCurrentOrigin = 0; if (KACWorkerGameState.CurrentVessel != null) { //if the craft is orbiting a body on the parents list then set it as the default if (XferParentBodies.Contains(KACWorkerGameState.CurrentVessel.mainBody.referenceBody)) { intXferCurrentParent = XferParentBodies.IndexOf(KACWorkerGameState.CurrentVessel.mainBody.referenceBody); SetupXferOrigins(); intXferCurrentOrigin = XferOriginBodies.IndexOf(KACWorkerGameState.CurrentVessel.mainBody); } } //set initial targets SetupXFerTargets(); intXferCurrentTarget = 0; intSelectedCrew = 0; intSelectedContract = 0; strCrewUT = ""; ddlKERNodeMargin.SelectedIndex = (Int32)settings.DefaultKERMargin; //ddlAddAlarm.SelectedIndex = ddlAddAlarm.Items.IndexOf(settings.AlarmsSoundName); //PlaySound = settings.AlarmPlaySound; }
internal void WindowLayout_AddTypeApPe() { GUILayout.BeginHorizontal(); GUILayout.Label("apsis Type:", KACResources.styleAddHeading); int intOption = 0; if (AddType != KACAlarm.AlarmTypeEnum.Apoapsis) intOption = 1; if (DrawRadioList(ref intOption, "Apoapsis", "Periapsis")) { if (intOption == 0) AddType = KACAlarm.AlarmTypeEnum.Apoapsis; else { AddType = KACAlarm.AlarmTypeEnum.Periapsis; } AddTypeChanged(); } GUILayout.EndHorizontal(); }
/// <summary> /// Draw the Add Window contents /// </summary> /// <param name="WindowID"></param> internal void FillAddWindow(int WindowID) { GUILayout.BeginVertical(); //AddType = (KACAlarm.AlarmType)GUILayout.Toolbar((int)AddType, strAddTypes,KACResources.styleButton); GUIContent[] guiButtons = guiTypes; //if (ViewAlarmsOnly) guiButtons = guiTypesView; switch (MonoName) { case "KACSpaceCenter": guiButtons = guiTypesSpaceCenter; break; case "KACTrackingStation": guiButtons = guiTypesTrackingStation; break; case "KACEditor": guiButtons = guiTypesEditor; break; default: break; } if (DrawButtonList(ref AddType,guiButtons)) { //if the choice was the Ap/Pe one then work out the best next choice if(AddType== KACAlarm.AlarmTypeEnum.Apoapsis) { if(!KACWorkerGameState.ApPointExists && KACWorkerGameState.PePointExists) AddType = KACAlarm.AlarmTypeEnum.Periapsis; else if(KACWorkerGameState.ApPointExists && KACWorkerGameState.PePointExists && ((KACWorkerGameState.CurrentVessel == null) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToAp) > ((KACWorkerGameState.CurrentVessel == null ) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToPe)) AddType = KACAlarm.AlarmTypeEnum.Periapsis; } AddTypeChanged(); } //if (AddType == KACAlarm.AlarmType.Apoapsis || AddType == KACAlarm.AlarmType.Periapsis) // WindowLayout_AddTypeApPe(); //if (AddType == KACAlarm.AlarmType.AscendingNode || AddType == KACAlarm.AlarmType.DescendingNode) // WindowLayout_AddTypeANDN(); //calc height for common stuff intHeight_AddWindowCommon = 71; if (AddType != KACAlarm.AlarmTypeEnum.Raw && AddType!= KACAlarm.AlarmTypeEnum.Crew && AddType != KACAlarm.AlarmTypeEnum.ScienceLab) //add stuff for margins intHeight_AddWindowCommon += 28; if (ScenesForAttachOption.Contains(KACWorkerGameState.CurrentGUIScene) && TypesForAttachOption.Contains(AddType) && KACWorkerGameState.CurrentVessel != null) //add stuff for attach to ship intHeight_AddWindowCommon += 30; if (KACWorkerGameState.CurrentGUIScene == GameScenes.TRACKSTATION) intHeight_AddWindowCommon += 18; //layout the right fields for the common components Boolean blnAttachPre = blnAlarmAttachToVessel; //WindowLayout_CommonFields2(ref strAlarmName, ref blnAlarmAttachToVessel, ref AddAction, ref timeMargin, AddType, intHeight_AddWindowCommon); WindowLayout_CommonFields3(ref strAlarmName, ref blnAlarmAttachToVessel, ref AddActions, ref timeMargin, AddType, intHeight_AddWindowCommon); Double dblTimeToPoint = 0; //layout the specific pieces for each type of alarm switch (AddType) { case KACAlarm.AlarmTypeEnum.Raw: if (blnAttachPre!=blnAlarmAttachToVessel) BuildRawStrings(); WindowLayout_AddPane_Raw(); break; case KACAlarm.AlarmTypeEnum.Maneuver: WindowLayout_AddPane_Maneuver(); break; case KACAlarm.AlarmTypeEnum.SOIChange: dblTimeToPoint = (KACWorkerGameState.CurrentVessel==null) ? 0 : KACWorkerGameState.CurrentVessel.orbit.UTsoi - KACWorkerGameState.CurrentTime.UT; WindowLayout_AddPane_NodeEvent(KACWorkerGameState.SOIPointExists,dblTimeToPoint); //WindowLayout_AddPane_SOI2(); break; case KACAlarm.AlarmTypeEnum.Transfer: case KACAlarm.AlarmTypeEnum.TransferModelled: if (blnAttachPre != blnAlarmAttachToVessel) BuildTransferStrings(); WindowLayout_AddPane_Transfer(); break; case KACAlarm.AlarmTypeEnum.Apoapsis: WindowLayout_AddTypeApPe(); if (!KACWorkerGameState.ApPointExists && HighLogic.CurrentGame.Mode == Game.Modes.CAREER && GameVariables.Instance.GetOrbitDisplayMode(ScenarioUpgradeableFacilities.GetFacilityLevel(SpaceCenterFacility.TrackingStation)) != GameVariables.OrbitDisplayMode.PatchedConics) { GUILayout.Label("Apoapsis Alarms cannot be set without upgrading the Tracking Station", GUILayout.ExpandWidth(true)); } else { dblTimeToPoint = (KACWorkerGameState.CurrentVessel == null) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToAp; WindowLayout_AddPane_NodeEvent(KACWorkerGameState.ApPointExists && !KACWorkerGameState.CurrentVessel.LandedOrSplashed, dblTimeToPoint); } break; case KACAlarm.AlarmTypeEnum.Periapsis: WindowLayout_AddTypeApPe(); if (!KACWorkerGameState.PePointExists && HighLogic.CurrentGame.Mode == Game.Modes.CAREER && GameVariables.Instance.GetOrbitDisplayMode(ScenarioUpgradeableFacilities.GetFacilityLevel(SpaceCenterFacility.TrackingStation)) != GameVariables.OrbitDisplayMode.PatchedConics) { GUILayout.Label("Periapsis Alarms cannot be set without upgrading the Tracking Station", GUILayout.ExpandWidth(true)); } else { dblTimeToPoint = (KACWorkerGameState.CurrentVessel == null ) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToPe; WindowLayout_AddPane_NodeEvent(KACWorkerGameState.PePointExists && !KACWorkerGameState.CurrentVessel.LandedOrSplashed, dblTimeToPoint); } break; case KACAlarm.AlarmTypeEnum.AscendingNode: WindowLayout_AddTypeANDN(); if (KACWorkerGameState.CurrentVesselTarget==null) { WindowLayout_AddPane_AscendingNodeEquatorial(); } else if (KACWorkerGameState.CurrentVessel.orbit.referenceBody == KACWorkerGameState.CurrentVesselTarget.GetOrbit().referenceBody) { //Must be orbiting Same parent body for this to make sense WindowLayout_AddPane_AscendingNode(); } else { GUILayout.Label("Target Not Currently Orbiting Same Parent", KACResources.styleAddXferName, GUILayout.Height(18)); GUILayout.Label("", KACResources.styleAddXferName, GUILayout.Height(18)); GUILayout.Label("There is no Ascending Node between orbits", KACResources.styleAddXferName, GUILayout.Height(18)); } break; case KACAlarm.AlarmTypeEnum.DescendingNode: WindowLayout_AddTypeANDN(); if (KACWorkerGameState.CurrentVesselTarget==null) { WindowLayout_AddPane_DescendingNodeEquatorial(); } else if (KACWorkerGameState.CurrentVessel.orbit.referenceBody == KACWorkerGameState.CurrentVesselTarget.GetOrbit().referenceBody) { //Must be orbiting Same parent body for this to make sense WindowLayout_AddPane_DescendingNode(); } else { GUILayout.Label("Target Not Currently Orbiting Same Parent", KACResources.styleAddXferName, GUILayout.Height(18)); GUILayout.Label("", KACResources.styleAddXferName, GUILayout.Height(18)); GUILayout.Label("There is no Ascending Node between orbits", KACResources.styleAddXferName, GUILayout.Height(18)); } break; case KACAlarm.AlarmTypeEnum.LaunchRendevous: WindowLayout_AddTypeANDN(); if (KACWorkerGameState.CurrentVessel.orbit.referenceBody == KACWorkerGameState.CurrentVesselTarget.GetOrbit().referenceBody) { //Must be orbiting Same parent body for this to make sense WindowLayout_AddPane_LaunchRendevous(); } else { GUILayout.Label("Target Not Currently Orbiting Same Parent", KACResources.styleAddXferName, GUILayout.Height(18)); GUILayout.Label("", KACResources.styleAddXferName, GUILayout.Height(18)); GUILayout.Label("There is no Ascending Node between orbits", KACResources.styleAddXferName, GUILayout.Height(18)); } break; case KACAlarm.AlarmTypeEnum.Closest: WindowLayout_AddTypeDistanceChoice(); WindowLayout_AddPane_ClosestApproach(); break; case KACAlarm.AlarmTypeEnum.Distance: WindowLayout_AddTypeDistanceChoice(); WindowLayout_AddPane_TargetDistance(); break; case KACAlarm.AlarmTypeEnum.Crew: WindowLayout_AddPane_Crew(); break; case KACAlarm.AlarmTypeEnum.Contract: case KACAlarm.AlarmTypeEnum.ContractAuto: WindowLayout_AddPane_Contract(); break; case KACAlarm.AlarmTypeEnum.ScienceLab: WindowLayout_AddPane_ScienceLab(); break; default: break; } GUILayout.EndVertical(); SetTooltipText(); }