Example #1
0
        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();
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }
Example #6
0
 internal static bool SASMonitor()
 {
     return(FlightData.thisVessel.ActionGroups[KSPActionGroup.SAS] || SurfSAS.ActivityCheck());
 }
Example #7
0
        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();
 }