public void Start() { instance = this; StartCoroutine(Initialise()); RenderingManager.AddToPostDrawQueue(5, drawGUI); FlightData.thisVessel.OnAutopilotUpdate += new FlightInputCallback(SurfaceSAS); GameEvents.onVesselChange.Add(vesselSwitch); }
public static void loadCraftSSASPreset(SurfSAS instance) { if (Instance.craftPresetDict.ContainsKey(FlightGlobals.ActiveVessel.vesselName) && !ReferenceEquals(Instance.craftPresetDict[FlightGlobals.ActiveVessel.vesselName].SSASPreset, null)) { loadSSASPreset(Instance.craftPresetDict[FlightGlobals.ActiveVessel.vesselName].SSASPreset, instance); } else { loadSSASPreset(Instance.craftPresetDict[craftDefaultName].SSASPreset, instance); } }
public static void loadSSASPreset(SSASPreset p, SurfSAS instance) { PIDErrorController[] c = instance.SASControllers; foreach (SASList s in Enum.GetValues(typeof(SASList))) { c[(int)s].PGain = p.PIDGains[(int)s, 0]; c[(int)s].IGain = p.PIDGains[(int)s, 1]; c[(int)s].DGain = p.PIDGains[(int)s, 2]; c[(int)s].Scalar = p.PIDGains[(int)s, 3]; } Instance.activeSSASPreset = p; if (Instance.activeSSASPreset != Instance.craftPresetDict[craftDefaultName].SSASPreset) { updateCraftPreset(p, instance.vesModule.vesselRef); } saveToFile(); }
public void drawGUI() { GUI.skin = GeneralUI.UISkin; GeneralUI.Styles(); // SAS toggle button if (bArmed) { if (SurfSAS.ActivityCheck()) { GUI.backgroundColor = GeneralUI.ActiveBackground; } else { GUI.backgroundColor = GeneralUI.InActiveBackground; } if (GUI.Button(new Rect(Screen.width / 2 + 50, Screen.height - 200, 50, 30), "SSAS")) { ActivitySwitch(!ActivityCheck()); updateTarget(); if (ActivityCheck()) { setStockSAS(false); } } GUI.backgroundColor = GeneralUI.stockBackgroundGUIColor; } // Main and preset window stuff if (!AppLauncherFlight.bDisplaySAS) { return; } Draw(); }
private void displayWindow(int id) { if (GUI.Button(new Rect(window.width - 16, 2, 14, 14), "")) { AppLauncherFlight.bDisplayAssistant = false; } if (IsPaused()) { GUILayout.Box("CONTROL PAUSED", GeneralUI.labelAlertStyle); } GUI.backgroundColor = GeneralUI.HeaderButtonBackground; if (GUILayout.Button("Options", GUILayout.Width(205))) { bShowSettings = !bShowSettings; } GUI.backgroundColor = GeneralUI.stockBackgroundGUIColor; if (bShowSettings) { showPresets = GUILayout.Toggle(showPresets, showPresets ? "Hide Presets" : "Show Presets", GUILayout.Width(200)); showPIDLimits = GUILayout.Toggle(showPIDLimits, showPIDLimits ? "Hide PID Limits" : "Show PID Limits", GUILayout.Width(200)); showControlSurfaces = GUILayout.Toggle(showControlSurfaces, showControlSurfaces ? "Hide Control Surfaces" : "Show Control Surfaces", GUILayout.Width(200)); } #region Hdg GUI GUILayout.BeginHorizontal(); // button background colour GUI.backgroundColor = GeneralUI.HeaderButtonBackground; if (GUILayout.Button("Roll and Yaw Control", GUILayout.Width(186))) { bShowHdg = !bShowHdg; } // Toggle colour if (bHdgActive) { GUI.backgroundColor = GeneralUI.ActiveBackground; } else { GUI.backgroundColor = GeneralUI.InActiveBackground; } bool toggleCheck = GUILayout.Toggle(bHdgActive, ""); if (toggleCheck != bHdgActive) { bHdgActive = toggleCheck; bPause = false; SurfSAS.setStockSAS(false); SurfSAS.ActivitySwitch(false); } // reset colour GUI.backgroundColor = GeneralUI.stockBackgroundGUIColor; GUILayout.EndHorizontal(); if (bShowHdg) { bWingLeveller = GUILayout.Toggle(bWingLeveller, bWingLeveller ? "Mode: Wing Leveller" : "Mode: Hdg Control", GUILayout.Width(200)); if (!bWingLeveller) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Target Hdg: ", GUILayout.Width(98))) { double newHdg; if (double.TryParse(targetHeading, out newHdg) && newHdg >= 0 && newHdg <= 360) { Utils.GetAsst(PIDList.HdgBank).SetPoint = newHdg; Utils.GetAsst(PIDList.HdgYaw).SetPoint = newHdg; bHdgActive = bHdgWasActive = true; // skip toggle check to avoid being overwritten } } targetHeading = GUILayout.TextField(targetHeading, GUILayout.Width(98)); GUILayout.EndHorizontal(); } scrollbarHdg = GUILayout.BeginScrollView(scrollbarHdg, GUILayout.Height(hdgScrollHeight)); if (!bWingLeveller) { drawPIDvalues(PIDList.HdgBank, "Heading", "\u00B0", FlightData.heading, 2, "Bank", "\u00B0", false, true, false); drawPIDvalues(PIDList.HdgYaw, "Bank => Yaw", "\u00B0", FlightData.yaw, 2, "Yaw", "\u00B0", true, false, false); } if (showControlSurfaces) { drawPIDvalues(PIDList.Aileron, "Bank", "\u00B0", FlightData.roll, 3, "Deflection", "\u00B0", false, true, false); drawPIDvalues(PIDList.Rudder, "Yaw", "\u00B0", FlightData.yaw, 3, "Deflection", "\u00B0", false, true, false); } GUILayout.EndScrollView(); Utils.GetAsst(PIDList.Aileron).OutMin = Math.Min(Math.Max(Utils.GetAsst(PIDList.Aileron).OutMin, -1), 1); Utils.GetAsst(PIDList.Aileron).OutMax = Math.Min(Math.Max(Utils.GetAsst(PIDList.Aileron).OutMax, -1), 1); Utils.GetAsst(PIDList.Rudder).OutMin = Math.Min(Math.Max(Utils.GetAsst(PIDList.Rudder).OutMin, -1), 1); Utils.GetAsst(PIDList.Rudder).OutMax = Math.Min(Math.Max(Utils.GetAsst(PIDList.Rudder).OutMax, -1), 1); } #endregion #region Pitch GUI GUILayout.BeginHorizontal(); // button background GUI.backgroundColor = GeneralUI.HeaderButtonBackground; if (GUILayout.Button("Vertical Control", GUILayout.Width(186))) { bShowVert = !bShowVert; } // Toggle colour if (bVertActive) { GUI.backgroundColor = GeneralUI.ActiveBackground; } else { GUI.backgroundColor = GeneralUI.InActiveBackground; } toggleCheck = GUILayout.Toggle(bVertActive, ""); if (toggleCheck != bVertActive) { bVertActive = toggleCheck; if (!toggleCheck) { bPause = false; } SurfSAS.setStockSAS(false); SurfSAS.ActivitySwitch(false); } // reset colour GUI.backgroundColor = GeneralUI.stockBackgroundGUIColor; GUILayout.EndHorizontal(); if (bShowVert) { bAltitudeHold = GUILayout.Toggle(bAltitudeHold, bAltitudeHold ? "Mode: Altitude" : "Mode: Vertical Speed", GUILayout.Width(200)); GUILayout.BeginHorizontal(); if (GUILayout.Button(bAltitudeHold ? "Target Altitude:" : "Target Speed:", GUILayout.Width(98))) { ScreenMessages.PostScreenMessage("Target " + (PilotAssistant.Instance.bAltitudeHold ? "Altitude" : "Vertical Speed") + " updated"); double newVal; double.TryParse(targetVert, out newVal); if (bAltitudeHold) { Utils.GetAsst(PIDList.Altitude).SetPoint = newVal; } else { Utils.GetAsst(PIDList.VertSpeed).SetPoint = newVal; } bVertActive = bVertWasActive = true; // skip the toggle check so value isn't overwritten } targetVert = GUILayout.TextField(targetVert, GUILayout.Width(98)); GUILayout.EndHorizontal(); scrollbarVert = GUILayout.BeginScrollView(scrollbarVert, GUILayout.Height(vertScrollHeight)); if (bAltitudeHold) { drawPIDvalues(PIDList.Altitude, "Altitude", "m", FlightData.thisVessel.altitude, 2, "Speed ", "m/s", true, true, false); } drawPIDvalues(PIDList.VertSpeed, "Vertical Speed", "m/s", FlightData.thisVessel.verticalSpeed, 2, "AoA", "\u00B0", true); if (showControlSurfaces) { drawPIDvalues(PIDList.Elevator, "Angle of Attack", "\u00B0", FlightData.AoA, 3, "Deflection", "\u00B0", true, true, false); } Utils.GetAsst(PIDList.Elevator).OutMin = Math.Min(Math.Max(Utils.GetAsst(PIDList.Elevator).OutMin, -1), 1); Utils.GetAsst(PIDList.Elevator).OutMax = Math.Min(Math.Max(Utils.GetAsst(PIDList.Elevator).OutMax, -1), 1); GUILayout.EndScrollView(); } #endregion #region Throttle GUI GUILayout.BeginHorizontal(); // button background GUI.backgroundColor = GeneralUI.HeaderButtonBackground; if (GUILayout.Button("Throttle Control", GUILayout.Width(186))) { bShowThrottle = !bShowThrottle; } // Toggle colour if (bThrottleActive) { GUI.backgroundColor = GeneralUI.ActiveBackground; } else { GUI.backgroundColor = GeneralUI.InActiveBackground; } toggleCheck = GUILayout.Toggle(bThrottleActive, ""); if (toggleCheck != bThrottleActive) { bThrottleActive = toggleCheck; if (!toggleCheck) { bPause = false; } SurfSAS.setStockSAS(false); SurfSAS.ActivitySwitch(false); } // reset colour GUI.backgroundColor = GeneralUI.stockBackgroundGUIColor; GUILayout.EndHorizontal(); if (bShowThrottle) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Target Velocity:", GUILayout.Width(118))) { ScreenMessages.PostScreenMessage("Target Velocity updated"); double newVal; double.TryParse(targetSpeed, out newVal); Utils.GetAsst(PIDList.Throttle).SetPoint = newVal; bThrottleActive = bWasThrottleActive = true; // skip the toggle check so value isn't overwritten } targetSpeed = GUILayout.TextField(targetSpeed, GUILayout.Width(78)); GUILayout.EndHorizontal(); drawPIDvalues(PIDList.Throttle, "Velocity", "m/s", FlightData.thisVessel.srfSpeed, 2, "Throttle", "", true); // can't have people bugging things out now can we... Utils.GetAsst(PIDList.Throttle).OutMin = Math.Min(Math.Max(Utils.GetAsst(PIDList.Throttle).OutMin, -1), 0); Utils.GetAsst(PIDList.Throttle).OutMax = Math.Min(Math.Max(Utils.GetAsst(PIDList.Throttle).OutMax, -1), 0); } #endregion GUI.DragWindow(); }
internal static bool SASMonitor() { return(FlightData.thisVessel.ActionGroups[KSPActionGroup.SAS] || SurfSAS.ActivityCheck()); }
private void keyPressChanges() { if (InputLockManager.IsLocked(ControlTypes.ALL_SHIP_CONTROLS)) { return; } bool mod = GameSettings.MODIFIER_KEY.GetKey(); if (Input.GetKeyDown(KeyCode.Tab)) { bHdgWasActive = false; // reset heading/vert lock on unpausing bVertWasActive = false; bWasThrottleActive = false; // reset target speed on unpausing bPause = !bPause; if (!bPause) { SurfSAS.setStockSAS(false); SurfSAS.ActivitySwitch(false); } if (bPause) { Messaging.statusMessage(0); } else { Messaging.statusMessage(1); } } if (GameSettings.SAS_TOGGLE.GetKeyDown()) { bHdgWasActive = false; // reset heading/vert lock on unpausing bVertWasActive = false; } if (mod && Input.GetKeyDown(KeyCode.X)) { Utils.GetAsst(PIDList.VertSpeed).SetPoint = 0; Utils.GetAsst(PIDList.Throttle).SetPoint = FlightData.thisVessel.srfSpeed; bAltitudeHold = false; bWasAltitudeHold = false; bWingLeveller = true; targetVert = "0"; targetSpeed = FlightData.thisVessel.srfSpeed.ToString("G2"); Messaging.statusMessage(4); } if (Input.GetKeyDown(KeyCode.Keypad9) && GameSettings.MODIFIER_KEY.GetKey()) { bHdgActive = !bHdgActive; } if (Input.GetKeyDown(KeyCode.Keypad6) && GameSettings.MODIFIER_KEY.GetKey()) { bVertActive = !bVertActive; } if (Input.GetKeyDown(KeyCode.Keypad3) && GameSettings.MODIFIER_KEY.GetKey()) { bThrottleActive = !bThrottleActive; } if (!IsPaused()) { double scale = mod ? 10 : 1; bool bFineControl = FlightInputHandler.fetch.precisionMode; if (bHdgActive && (GameSettings.YAW_LEFT.GetKey() || GameSettings.YAW_RIGHT.GetKey() || !GameSettings.AXIS_YAW.IsNeutral())) { double hdg = double.Parse(targetHeading); if (GameSettings.YAW_LEFT.GetKey()) { hdg -= bFineControl ? 0.04 / scale : 0.4 * scale; } else if (GameSettings.YAW_RIGHT.GetKey()) { hdg += bFineControl ? 0.04 / scale : 0.4 * scale; } else if (!GameSettings.AXIS_YAW.IsNeutral()) { hdg += (bFineControl ? 0.04 / scale : 0.4 * scale) * GameSettings.AXIS_YAW.GetAxis(); } if (hdg < 0) { hdg += 360; } else if (hdg > 360) { hdg -= 360; } Utils.GetAsst(PIDList.HdgBank).SetPoint = hdg; Utils.GetAsst(PIDList.HdgYaw).SetPoint = hdg; targetHeading = hdg.ToString(); } if (bVertActive && (GameSettings.PITCH_DOWN.GetKey() || GameSettings.PITCH_UP.GetKey() || !GameSettings.AXIS_PITCH.IsNeutral())) { double vert = double.Parse(targetVert); if (bAltitudeHold) { vert /= 10; } if (GameSettings.PITCH_DOWN.GetKey()) { vert -= bFineControl ? 0.04 / scale : 0.4 * scale; } else if (GameSettings.PITCH_UP.GetKey()) { vert += bFineControl ? 0.04 / scale : 0.4 * scale; } else if (!GameSettings.AXIS_PITCH.IsNeutral()) { vert += (bFineControl ? 0.04 / scale : 0.4 * scale) * GameSettings.AXIS_PITCH.GetAxis(); } if (bAltitudeHold) { vert = Math.Max(vert * 10, 0); Utils.GetAsst(PIDList.Altitude).SetPoint = vert; } else { Utils.GetAsst(PIDList.VertSpeed).SetPoint = vert; } targetVert = vert.ToString(); } if (bThrottleActive && (GameSettings.THROTTLE_UP.GetKey() || GameSettings.THROTTLE_DOWN.GetKey()) || (GameSettings.THROTTLE_CUTOFF.GetKeyDown() && !GameSettings.MODIFIER_KEY.GetKey()) || GameSettings.THROTTLE_FULL.GetKeyDown()) { double velocity = double.Parse(targetSpeed); if (GameSettings.THROTTLE_UP.GetKey()) { velocity += bFineControl ? 0.1 / scale : 1 * scale; } else if (GameSettings.THROTTLE_DOWN.GetKey()) { velocity -= bFineControl ? 0.1 / scale : 1 * scale; } if (GameSettings.THROTTLE_CUTOFF.GetKeyDown() && !GameSettings.MODIFIER_KEY.GetKey()) { velocity = 0; } if (GameSettings.THROTTLE_FULL.GetKeyDown()) { velocity = 2400; } Utils.GetAsst(PIDList.Throttle).SetPoint = velocity; targetSpeed = Math.Max(velocity, 0).ToString(); } } }
public static void UpdateSSASPreset(SurfSAS instance) { Instance.activeSSASPreset.Update(instance.SASControllers); saveToFile(); }