Ejemplo n.º 1
0
        private void UpdateAxes(ControllerConfiguration config, FlightCtrlState state)
        {
            var buttonsMask = config.iface.GetButtonsMask();

            for (int i = 0; i < config.iface.GetAxesCount(); i++)
            {
                List <ContinuousAction> actions = config.GetCurrentPreset().GetContinuousBinding(i, buttonsMask);
                if (actions == null)
                {
                    continue;
                }

                float axisState = config.iface.GetAxisState(i);

                foreach (var action in actions)
                {
                    if (config.GetCurrentPreset().IsContinuousBindingInverted(action))
                    {
                        axisState *= -1.0f;
                    }

                    if (axisState != 0.0f || action == ContinuousAction.Throttle || action == ContinuousAction.WheelThrottle)
                    {
                        EvaluateContinuousAction(config, action, axisState, state);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void UpdateAxes(ControllerConfiguration config, FlightCtrlState state)
        {
            var buttonsMask = config.iface.GetButtonsMask();

            for (int i = 0; i < config.iface.GetAxesCount(); i++)
            {
                List <ContinuousAction> actions = config.GetCurrentPreset().GetContinuousBinding(i, buttonsMask);
                if (actions == null)
                {
                    continue;
                }

                float axisState = config.iface.GetAxisState(i);

                foreach (var action in actions)
                {
                    var axisValue = axisState;
                    if (config.GetCurrentPreset().IsContinuousBindingInverted(action))
                    {
                        axisValue *= -1.0f;
                    }


                    throttleActive = true;
                    if (!AdvancedFlyByWire.Instance.settings.m_ThrottleOverride && action == ContinuousAction.Throttle)
                    {
                        if (axisValue == last_m_throttle)
                        {
                            throttleActive = false;
                        }
                        else
                        {
                            EvaluateContinuousAction(config, action, axisValue, state);
                            last_m_throttle = axisValue;
                        }
                    }
                    wheelThrottleActive = true;
                    if (!AdvancedFlyByWire.Instance.settings.m_ThrottleOverride && action == ContinuousAction.Throttle)
                    {
                        if (axisValue == m_lastWheelThrottle)
                        {
                            wheelThrottleActive = false;
                        }
                        else
                        {
                            m_lastWheelThrottle = axisValue;
                            EvaluateContinuousAction(config, action, axisValue, state);
                        }
                    }
                    if ((axisState != 0.0f && action != ContinuousAction.Throttle && action != ContinuousAction.WheelThrottle) ||
                        (AdvancedFlyByWire.Instance.settings.m_ThrottleOverride && (action == ContinuousAction.Throttle || action == ContinuousAction.WheelThrottle)))
                    {
                        EvaluateContinuousAction(config, action, axisValue, state);
                    }
                }
            }
        }
        private void UpdateAxes(ControllerConfiguration config, FlightCtrlState state)
        {
            for (int i = 0; i < config.iface.GetAxesCount(); i++)
            {
                List <ContinuousAction> actions = config.GetCurrentPreset().GetContinuousBinding(i, config.iface.GetButtonsMask());
                if (actions == null)
                {
                    continue;
                }

                foreach (var action in actions)
                {
                    float input = config.iface.GetAxisState(i);
                    if (input != 0.0f || action == ContinuousAction.Throttle)
                    {
                        EvaluateContinuousAction(config, action, config.iface.GetAxisState(i), state);
                    }
                }
            }
        }
        public void EvaluateDiscreteAction(ControllerConfiguration controller, DiscreteAction action, FlightCtrlState state)
        {
            KerbalEVA eva = null;

            if (FlightGlobals.ActiveVessel.isEVA)
            {
                eva = FlightGlobals.ActiveVessel.GetComponent <KerbalEVA>();
            }

            switch (action)
            {
            case DiscreteAction.None:
                return;

            case DiscreteAction.YawPlus:
                m_Yaw.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.YawMinus:
                m_Yaw.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchPlus:
                m_Pitch.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchMinus:
                m_Pitch.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.RollPlus:
                m_Roll.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.RollMinus:
                m_Roll.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.XPlus:
                m_X.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.XMinus:
                m_X.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.YPlus:
                m_Y.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.YMinus:
                m_Y.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.ZPlus:
                m_Z.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.ZMinus:
                m_Z.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.ThrottlePlus:
                m_Throttle.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.ThrottleMinus:
                m_Throttle.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.Stage:
                Staging.ActivateNextStage();
                return;

            case DiscreteAction.Gear:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Gear);
                return;

            case DiscreteAction.Light:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Light);
                return;

            case DiscreteAction.RCS:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.RCS);
                return;

            case DiscreteAction.SAS:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.SAS);
                return;

            case DiscreteAction.Brakes:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Brakes);
                return;

            case DiscreteAction.Abort:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Abort);
                return;

            case DiscreteAction.Custom01:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom01);
                return;

            case DiscreteAction.Custom02:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom02);
                return;

            case DiscreteAction.Custom03:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom03);
                return;

            case DiscreteAction.Custom04:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom04);
                return;

            case DiscreteAction.Custom05:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom05);
                return;

            case DiscreteAction.Custom06:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom06);
                return;

            case DiscreteAction.Custom07:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom07);
                return;

            case DiscreteAction.Custom08:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom08);
                return;

            case DiscreteAction.Custom09:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom09);
                return;

            case DiscreteAction.Custom10:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom10);
                return;

            case DiscreteAction.EVAToggleJetpack:
                if (eva != null)
                {
                    eva.JetpackDeployed = !eva.JetpackDeployed;
                }
                return;

            case DiscreteAction.EVAToggleHeadlamps:
                if (eva != null)
                {
                    eva.lampOn = !eva.lampOn;
                }
                return;

            case DiscreteAction.CutThrottle:
                m_Throttle.SetValue(-state.mainThrottle);
                return;

            case DiscreteAction.FullThrottle:
                m_Throttle.SetValue(1.0f - state.mainThrottle);
                return;

            case DiscreteAction.NextPreset:
                if (controller.currentPreset >= controller.presets.Count - 1)
                {
                    return;
                }

                controller.currentPreset++;
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                return;

            case DiscreteAction.PreviousPreset:
                if (controller.currentPreset <= 0)
                {
                    return;
                }

                controller.currentPreset--;
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                return;

            case DiscreteAction.CyclePresets:
                controller.currentPreset++;
                if (controller.currentPreset >= controller.presets.Count)
                {
                    controller.currentPreset = 0;
                }
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.LOWER_CENTER);
                return;

            case DiscreteAction.CameraZoomPlus:
                m_CameraZoom.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraZoomMinus:
                m_CameraZoom.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraXPlus:
                m_CameraHeading.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraXMinus:
                m_CameraHeading.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraYPlus:
                m_CameraPitch.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraYMinus:
                m_CameraPitch.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.OrbitMapToggle:
                if (!MapView.MapIsEnabled)
                {
                    MapView.EnterMapView();
                }
                else
                {
                    MapView.ExitMapView();
                }
                return;

            case DiscreteAction.TimeWarpPlus:
                WarpController.IncreaseWarp();
                return;

            case DiscreteAction.TimeWarpMinus:
                WarpController.DecreaseWarp();
                return;

            case DiscreteAction.PhysicsTimeWarpPlus:
                WarpController.IncreasePhysicsWarp();
                return;

            case DiscreteAction.PhysicsTimeWarpMinus:
                WarpController.DecreasePhysicsWarp();
                return;

            case DiscreteAction.NavballToggle:
                if (MapView.MapIsEnabled && MapView.fetch != null)
                {
                    MapView.fetch.maneuverModeToggle.OnPress.Invoke();
                }
                return;

            case DiscreteAction.IVAViewToggle:
                if (CameraManager.Instance != null)
                {
                    CameraManager.Instance.SetCameraIVA();
                }
                return;

            case DiscreteAction.CameraViewToggle:
                if (FlightCamera.fetch != null)
                {
                    FlightCamera.fetch.SetNextMode();
                }
                return;

            case DiscreteAction.SASHold:
                FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true);
                return;

            case DiscreteAction.LockStage:
                if (FlightInputHandler.fetch != null)
                {
                    FlightInputHandler.fetch.stageLock = !FlightInputHandler.fetch.stageLock;
                }
                return;

            case DiscreteAction.TogglePrecisionControls:
                if (FlightInputHandler.fetch != null)
                {
                    FlightInputHandler.fetch.precisionMode = !FlightInputHandler.fetch.precisionMode;
                }
                return;

            case DiscreteAction.ResetTrim:
                m_Yaw.SetTrim(0.0f);
                m_Pitch.SetTrim(0.0f);
                m_Roll.SetTrim(0.0f);
                state.ResetTrim();
                return;
            }
        }
        public virtual void DoWindow(int window)
        {
            GUI.DragWindow(new Rect(0, 0, 10000, 20));

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            if (GUILayout.Button("X", GUILayout.Height(16)) || m_Controller == null || m_Controller.iface == null)
            {
                shouldBeDestroyed = true;
                if (m_Controller != null)
                {
                    m_Controller.presetEditorOpen = false;
                }
            }

            GUILayout.EndHorizontal();

            var currentPreset = m_Controller.GetCurrentPreset();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Preset: ");

            currentPreset.name = GUILayout.TextField(currentPreset.name, GUILayout.Width(256));

            if (m_Controller.currentPreset > 0)
            {
                if (GUILayout.Button("<"))
                {
                    m_Controller.currentPreset--;
                }
            }
            else
            {
                GUI.enabled = false;
                GUILayout.Button("<");
                GUI.enabled = true;
            }

            if (m_Controller.currentPreset < m_Controller.presets.Count - 1)
            {
                if (GUILayout.Button(">"))
                {
                    m_Controller.currentPreset++;
                }
            }
            else
            {
                GUI.enabled = false;
                GUILayout.Button(">");
                GUI.enabled = true;
            }

            if (GUILayout.Button("New"))
            {
                m_Controller.presets.Add(new ControllerPreset());
                m_Controller.currentPreset = m_Controller.presets.Count - 1;
            }

            string destructiveRemoveLabel = "Delete";

            if (m_DestructiveActionWait)
            {
                destructiveRemoveLabel = "Sure?";
            }

            if (m_Controller.presets.Count <= 1)
            {
                GUI.enabled = false;
            }

            if (GUILayout.Button(destructiveRemoveLabel))
            {
                if (m_DestructiveActionWait)
                {
                    if (m_Controller.presets.Count > 1)
                    {
                        m_Controller.presets.RemoveAt(m_Controller.currentPreset);
                        m_Controller.currentPreset--;
                        if (m_Controller.currentPreset < 0)
                        {
                            m_Controller.currentPreset = 0;
                        }

                        m_DestructiveActionWait  = false;
                        m_DestructiveActionTimer = 0.0f;
                    }
                }
                else
                {
                    m_DestructiveActionWait  = true;
                    m_DestructiveActionTimer = 2.0f;
                }
            }

            GUI.enabled = true;
            GUILayout.EndHorizontal();

            m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition);

            GUILayout.Label("Continuous actions");

            foreach (var action in (ContinuousAction[])Enum.GetValues(typeof(ContinuousAction)))
            {
                if (action == ContinuousAction.None)
                {
                    continue;
                }

                GUILayout.BeginHorizontal();
                GUILayout.Label(Stringify.ContinuousActionToString(action));
                GUILayout.FlexibleSpace();

                string label = "";

                var axisBitsetPair = currentPreset.GetBitsetForContinuousBinding(action);
                if (m_CurrentlyEditingContinuousAction == action)
                {
                    label = "Press desired combination";

                    for (int i = 0; i < m_Controller.iface.GetAxesCount(); i++)
                    {
                        if (Math.Abs(m_Controller.iface.GetAxisState(i) - axisSnapshot[i]) > 0.1 && m_ClickSleepTimer == 0.0f)
                        {
                            currentPreset.SetContinuousBinding(i, m_Controller.iface.GetButtonsMask(), action);
                            m_CurrentlyEditingContinuousAction = ContinuousAction.None;
                        }
                    }
                }

                axisBitsetPair = currentPreset.GetBitsetForContinuousBinding(action);
                if (m_CurrentlyEditingContinuousAction != action)
                {
                    if (axisBitsetPair.Value == null)
                    {
                        label = "Click to assign";
                    }
                    else
                    {
                        label = m_Controller.iface.ConvertMaskToName(axisBitsetPair.Value, true, axisBitsetPair.Key);
                    }
                }

                if (GUILayout.Button(label, GUILayout.Width(256)))
                {
                    if (m_CurrentlyEditingContinuousAction != action)
                    {
                        m_CurrentlyEditingContinuousAction = action;
                        m_CurrentlyEditingDiscreteAction   = DiscreteAction.None;
                        m_ClickSleepTimer = 0.25f;

                        for (int i = 0; i < m_Controller.iface.GetAxesCount(); i++)
                        {
                            axisSnapshot[i] = m_Controller.iface.GetAxisState(i);
                        }
                    }

                    m_CurrentMask = null;
                }

                if (GUILayout.Button("X"))
                {
                    currentPreset.UnsetContinuousBinding(action);
                    m_CurrentlyEditingContinuousAction = ContinuousAction.None;
                    m_CurrentlyEditingDiscreteAction   = DiscreteAction.None;
                }

                GUILayout.EndHorizontal();
            }

            GUILayout.Label("Discrete actions");

            foreach (var action in (DiscreteAction[])Enum.GetValues(typeof(DiscreteAction)))
            {
                if (action == DiscreteAction.None)
                {
                    continue;
                }

                GUILayout.BeginHorizontal();
                GUILayout.Label(Stringify.DiscreteActionToString(action));
                GUILayout.FlexibleSpace();

                string label = "";

                var bitset = currentPreset.GetBitsetForDiscreteBinding(action);
                if (m_CurrentlyEditingDiscreteAction == action)
                {
                    label = "Press desired combination";

                    if (m_CurrentMask != null && m_ClickSleepTimer == 0.0f)
                    {
                        currentPreset.SetDiscreteBinding(m_CurrentMask, action);
                        m_CurrentMask = null;
                        m_CurrentlyEditingDiscreteAction = DiscreteAction.None;
                    }
                }

                bitset = currentPreset.GetBitsetForDiscreteBinding(action);
                if (m_CurrentlyEditingDiscreteAction != action)
                {
                    if (bitset == null)
                    {
                        label = "Click to assign";
                    }
                    else
                    {
                        label = m_Controller.iface.ConvertMaskToName(bitset);
                    }
                }

                if (GUILayout.Button(label, GUILayout.Width(256)))
                {
                    if (m_CurrentlyEditingDiscreteAction != action)
                    {
                        m_CurrentlyEditingDiscreteAction   = action;
                        m_CurrentlyEditingContinuousAction = ContinuousAction.None;
                        m_ClickSleepTimer = 0.25f;
                    }

                    m_CurrentMask = null;
                }

                if (GUILayout.Button("X"))
                {
                    currentPreset.UnsetDiscreteBinding(action);
                    m_CurrentlyEditingContinuousAction = ContinuousAction.None;
                    m_CurrentlyEditingDiscreteAction   = DiscreteAction.None;
                }

                GUILayout.EndHorizontal();
            }

            GUILayout.EndScrollView();
        }
        void DoMainWindow(int index)
        {
            GUI.DragWindow(new Rect(0, 0, 10000, 20));

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("X", GUILayout.Height(16)))
            {
                m_UIActive = false;
                InputLockManager.RemoveControlLock("AdvancedFlyByWireMainWindow");
            }

            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Use stock skin");
            m_UseKSPSkin = GUILayout.Toggle(m_UseKSPSkin, "");
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Use old presets editor");
            m_UseOldPresetsWindow = GUILayout.Toggle(m_UseOldPresetsWindow, "");
            GUILayout.FlexibleSpace();

            if (GUILayout.Button("Save configuration"))
            {
                SaveState(null);
            }

            GUILayout.EndHorizontal();

            m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition);

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("Controllers");
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            var controllers = IController.EnumerateAllControllers();

            foreach (var controller in controllers)
            {
                GUILayout.BeginHorizontal();
                ControllerConfiguration config = m_Configuration.GetConfigurationByControllerType(controller.Key,
                                                                                                  controller.Value.Key);
                bool isEnabled    = config != null && config.iface != null;
                bool newIsEnabled = GUILayout.Toggle(isEnabled, "");

                GUILayout.Label(controller.Value.Value);
                GUILayout.FlexibleSpace();

                if (!isEnabled && newIsEnabled)
                {
                    isEnabled = true;
                    m_Configuration.ActivateController
                    (
                        controller.Key,
                        controller.Value.Key,
                        new IController.ButtonPressedCallback(ButtonPressedCallback),
                        new IController.ButtonReleasedCallback(ButtonReleasedCallback)
                    );
                }
                else if (isEnabled && !newIsEnabled)
                {
                    m_Configuration.DeactivateController(controller.Key, controller.Value.Key);
                }

                if (!isEnabled || config.presetEditorOpen)
                {
                    GUI.enabled = false;
                }

                if (GUILayout.Button("Presets", GUILayout.Height(32)))
                {
                    if (m_UseOldPresetsWindow)
                    {
                        m_PresetEditors.Add(new PresetEditorWindow(config, m_PresetEditors.Count));
                    }
                    else
                    {
                        m_PresetEditors.Add(new PresetEditorWindowNG(config, m_PresetEditors.Count));
                    }

                    config.presetEditorOpen = true;
                }

                if (isEnabled)
                {
                    GUI.enabled = true;
                }

                if (!isEnabled || config.controllerConfigurationOpen)
                {
                    GUI.enabled = false;
                }

                if (GUILayout.Button("Configuration", GUILayout.Height(32)))
                {
                    m_ControllerTests.Add(new ControllerConfigurationWindow(config, m_ControllerTests.Count));
                    config.controllerConfigurationOpen = true;
                }

                if (isEnabled)
                {
                    GUI.enabled = true;
                }

                GUILayout.EndHorizontal();

                if (isEnabled)
                {
                    GUILayout.Space(4);

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();

                    GUILayout.Label("Preset: " + config.GetCurrentPreset().name);

                    if (config.currentPreset <= 0)
                    {
                        GUI.enabled = false;
                    }

                    if (GUILayout.Button("<", GUILayout.Width(32)))
                    {
                        config.currentPreset--;
                    }

                    GUI.enabled = true;
                    GUILayout.Space(4);

                    if (config.currentPreset >= config.presets.Count - 1)
                    {
                        GUI.enabled = false;
                    }

                    if (GUILayout.Button(">", GUILayout.Width(32)))
                    {
                        config.currentPreset++;
                    }

                    GUI.enabled = true;
                    GUILayout.EndHorizontal();
                }

                GUILayout.Space(24);

                GUI.enabled = true;
            }

            GUILayout.EndScrollView();
        }
Ejemplo n.º 7
0
        public void EvaluateDiscreteAction(ControllerConfiguration controller, DiscreteAction action, FlightCtrlState state)
        {
            switch (action)
            {
            case DiscreteAction.None:
                return;

            case DiscreteAction.YawPlus:
                m_Yaw.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.YawMinus:
                m_Yaw.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchPlus:
                m_Pitch.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchMinus:
                m_Pitch.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchTrimPlus:
                m_Pitch.SetTrim(Utility.Clamp(m_Pitch.GetTrim() + controller.discreteActionStep, -1.0f, 1.0f));
                return;

            case DiscreteAction.PitchTrimMinus:
                m_Pitch.SetTrim(Utility.Clamp(m_Pitch.GetTrim() - controller.discreteActionStep, -1.0f, 1.0f));
                return;

            case DiscreteAction.RollPlus:
                m_Roll.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.RollMinus:
                m_Roll.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.XPlus:
                m_X.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.XMinus:
                m_X.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.YPlus:
                m_Y.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.YMinus:
                m_Y.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.ZPlus:
                m_Z.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.ZMinus:
                m_Z.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.ThrottlePlus:
                m_Throttle.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.ThrottleMinus:
                m_Throttle.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CutThrottle:
                m_Throttle.SetValue(-state.mainThrottle);
                return;

            case DiscreteAction.FullThrottle:
                m_Throttle.SetValue(1.0f - state.mainThrottle);
                return;

            case DiscreteAction.NextPreset:
                if (controller.currentPreset >= controller.presets.Count - 1)
                {
                    return;
                }

                controller.currentPreset++;
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                return;

            case DiscreteAction.PreviousPreset:
                if (controller.currentPreset <= 0)
                {
                    return;
                }

                controller.currentPreset--;
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                return;

            case DiscreteAction.CyclePresets:
                controller.currentPreset++;
                if (controller.currentPreset >= controller.presets.Count)
                {
                    controller.currentPreset = 0;
                }
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.LOWER_CENTER);
                return;

            case DiscreteAction.CameraZoomPlus:
                m_CameraZoom.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraZoomMinus:
                m_CameraZoom.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraXPlus:
                m_CameraHeading.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraXMinus:
                m_CameraHeading.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraYPlus:
                m_CameraPitch.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraYMinus:
                m_CameraPitch.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.OrbitMapToggle:
                if (!MapView.MapIsEnabled)
                {
                    MapView.EnterMapView();
                }
                else
                {
                    MapView.ExitMapView();
                }
                return;

            case DiscreteAction.TimeWarpPlus:
                WarpController.IncreaseWarp();
                return;

            case DiscreteAction.TimeWarpMinus:
                WarpController.DecreaseWarp();
                return;

            case DiscreteAction.PhysicsTimeWarpPlus:
                WarpController.IncreasePhysicsWarp();
                return;

            case DiscreteAction.PhysicsTimeWarpMinus:
                WarpController.DecreasePhysicsWarp();
                return;

            case DiscreteAction.NavballToggle:
                if (MapView.MapIsEnabled && MapView.fetch != null)
                {
                    MapView.fetch.maneuverModeToggle.OnPress.Invoke();
                }
                return;

            case DiscreteAction.IVAViewToggle:
                if (CameraManager.Instance != null)
                {
                    CameraManager.Instance.SetCameraIVA();
                }
                return;

            case DiscreteAction.CameraViewToggle:
                if (FlightCamera.fetch != null)
                {
                    FlightCamera.fetch.SetNextMode();
                }
                return;

            case DiscreteAction.SASHold:
                FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true);
                return;

            case DiscreteAction.TogglePrecisionControls:
                if (FlightInputHandler.fetch != null)
                {
                    FlightInputHandler.fetch.precisionMode = !FlightInputHandler.fetch.precisionMode;
                    //Change color on flight input gauges manually. Hardcoded colors, but unlikely to change.
                    foreach (var r in FlightInputHandler.fetch.inputGaugeRenderers)
                    {
                        if (FlightInputHandler.fetch.precisionMode)
                        {
                            r.material.color = new Color(0.255f, 0.992f, 0.996f);
                        }
                        else
                        {
                            r.material.color = new Color(0.976f, 0.451f, 0.024f);
                        }
                    }
                }
                return;

            case DiscreteAction.ResetTrim:
                m_Yaw.SetTrim(0.0f);
                m_Pitch.SetTrim(0.0f);
                m_Roll.SetTrim(0.0f);
                state.ResetTrim();
                return;

            case DiscreteAction.IVANextCamera:
                CameraController.Instance.NextIVACamera();
                return;

            case DiscreteAction.IVALookWindow:
                CameraController.Instance.FocusIVAWindow();
                return;
            }

            if (m_DisableVesselControls)
            {
                return;
            }

            // all other actions
            switch (action)
            {
            case DiscreteAction.Stage:
                Staging.ActivateNextStage();
                return;

            case DiscreteAction.Gear:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Gear);
                return;

            case DiscreteAction.Light:
                EVAController.Instance.ToggleHeadlamp();
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Light);
                return;

            case DiscreteAction.RCS:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.RCS);
                return;

            case DiscreteAction.SAS:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.SAS);
                return;

            case DiscreteAction.Brakes:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Brakes);
                return;

            case DiscreteAction.BrakesHold:
                FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.Brakes, true);
                return;

            case DiscreteAction.Abort:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Abort);
                return;

            case DiscreteAction.Custom01:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom01);
                return;

            case DiscreteAction.Custom02:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom02);
                return;

            case DiscreteAction.Custom03:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom03);
                return;

            case DiscreteAction.Custom04:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom04);
                return;

            case DiscreteAction.Custom05:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom05);
                return;

            case DiscreteAction.Custom06:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom06);
                return;

            case DiscreteAction.Custom07:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom07);
                return;

            case DiscreteAction.Custom08:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom08);
                return;

            case DiscreteAction.Custom09:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom09);
                return;

            case DiscreteAction.Custom10:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom10);
                return;

            case DiscreteAction.SASHold:
                FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true);
                return;

            case DiscreteAction.LockStage:
                if (FlightInputHandler.fetch != null)
                {
                    FlightInputHandler.fetch.stageLock = !FlightInputHandler.fetch.stageLock;
                }
                return;

            case DiscreteAction.EVAInteract:
                EVAController.Instance.DoInteract();
                return;

            case DiscreteAction.EVAJump:
                EVAController.Instance.DoJump();
                return;

            case DiscreteAction.EVAToggleJetpack:
                EVAController.Instance.ToggleJetpack();
                return;

            case DiscreteAction.EVAAutoRunToggle:
                EVAController.Instance.ToggleAutorun();
                return;

            case DiscreteAction.EVAPlantFlag:
                EVAController.Instance.DoPlantFlag();
                return;
            }
        }
Ejemplo n.º 8
0
        public void EvaluateDiscreteAction(ControllerConfiguration controller, DiscreteAction action, FlightCtrlState state)
        {
            switch (action)
            {
            case DiscreteAction.None:
                return;

            case DiscreteAction.YawPlus:
                m_Yaw.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.YawMinus:
                m_Yaw.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchPlus:
                m_Pitch.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchMinus:
                m_Pitch.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.PitchTrimPlus:
                m_Pitch.SetTrim(Utility.Clamp(m_Pitch.GetTrim() + controller.discreteActionStep, -1.0f, 1.0f));
                return;

            case DiscreteAction.PitchTrimMinus:
                m_Pitch.SetTrim(Utility.Clamp(m_Pitch.GetTrim() - controller.discreteActionStep, -1.0f, 1.0f));
                return;

            case DiscreteAction.RollPlus:
                m_Roll.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.RollMinus:
                m_Roll.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.XPlus:
                m_X.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.XMinus:
                m_X.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.YPlus:
                m_Y.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.YMinus:
                m_Y.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.ZPlus:
                m_Z.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.ZMinus:
                m_Z.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.ThrottlePlus:
                m_Throttle.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.ThrottleMinus:
                m_Throttle.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CutThrottle:
                m_Throttle.SetValue(-state.mainThrottle);
                return;

            case DiscreteAction.FullThrottle:
                m_Throttle.SetValue(1.0f - state.mainThrottle);
                return;

            case DiscreteAction.NextPreset:
                if (controller.currentPreset >= controller.presets.Count - 1)
                {
                    return;
                }

                controller.currentPreset++;
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                return;

            case DiscreteAction.PreviousPreset:
                if (controller.currentPreset <= 0)
                {
                    return;
                }

                controller.currentPreset--;
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                return;

            case DiscreteAction.CyclePresets:
                controller.currentPreset++;
                if (controller.currentPreset >= controller.presets.Count)
                {
                    controller.currentPreset = 0;
                }
                ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.LOWER_CENTER);
                return;

            case DiscreteAction.CameraZoomPlus:
                m_CameraZoom.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraZoomMinus:
                m_CameraZoom.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraXPlus:
                m_CameraHeading.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraXMinus:
                m_CameraHeading.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraYPlus:
                m_CameraPitch.SetIncrement(1, controller.discreteActionStep);
                return;

            case DiscreteAction.CameraYMinus:
                m_CameraPitch.SetIncrement(-1, controller.discreteActionStep);
                return;

            case DiscreteAction.OrbitMapToggle:
                if (!MapView.MapIsEnabled)
                {
                    MapView.EnterMapView();
                }
                else
                {
                    MapView.ExitMapView();
                }
                return;

            case DiscreteAction.TimeWarpPlus:
                WarpController.IncreaseWarp();
                return;

            case DiscreteAction.TimeWarpMinus:
                WarpController.DecreaseWarp();
                return;

            case DiscreteAction.PhysicsTimeWarpPlus:
                WarpController.IncreasePhysicsWarp();
                return;

            case DiscreteAction.PhysicsTimeWarpMinus:
                WarpController.DecreasePhysicsWarp();
                return;

            case DiscreteAction.StopWarp:
                WarpController.StopWarp();
                return;

            case DiscreteAction.NavballToggle:
                if (MapView.MapIsEnabled && MapView.fetch != null)
                {
                    //  MapView.fetch.maneuverModeToggle.OnPress.Invoke();
                }
                return;

            case DiscreteAction.IVAViewToggle:
                if (CameraManager.Instance != null)
                {
                    CameraManager.Instance.SetCameraIVA();
                }
                return;

            case DiscreteAction.CameraViewToggle:
                if (FlightCamera.fetch != null)
                {
                    FlightCamera.fetch.SetNextMode();
                }
                return;

            case DiscreteAction.SASHold:
                FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true);
                return;

            case DiscreteAction.SASStabilityAssist:
                setAutopilotMode(VesselAutopilot.AutopilotMode.StabilityAssist, 0);
                return;

            case DiscreteAction.SASPrograde:
                setAutopilotMode(VesselAutopilot.AutopilotMode.Prograde, 1);
                return;

            case DiscreteAction.SASRetrograde:
                setAutopilotMode(VesselAutopilot.AutopilotMode.Retrograde, 2);
                return;

            case DiscreteAction.SASNormal:
                setAutopilotMode(VesselAutopilot.AutopilotMode.Normal, 3);
                return;

            case DiscreteAction.SASAntinormal:
                setAutopilotMode(VesselAutopilot.AutopilotMode.Antinormal, 4);
                return;

            case DiscreteAction.SASRadialIn:
                setAutopilotMode(VesselAutopilot.AutopilotMode.RadialIn, 5);
                return;

            case DiscreteAction.SASRadialOut:
                setAutopilotMode(VesselAutopilot.AutopilotMode.RadialOut, 6);
                return;

            case DiscreteAction.SASManeuver:
                setAutopilotMode(VesselAutopilot.AutopilotMode.Maneuver, 7);
                return;

            case DiscreteAction.SASTarget:
                setAutopilotMode(VesselAutopilot.AutopilotMode.Target, 8);
                return;

            case DiscreteAction.SASAntiTarget:
                setAutopilotMode(VesselAutopilot.AutopilotMode.AntiTarget, 9);
                return;

            case DiscreteAction.SASManeuverOrTarget:
                if (!setAutopilotMode(VesselAutopilot.AutopilotMode.Maneuver, 7))
                {
                    setAutopilotMode(VesselAutopilot.AutopilotMode.Target, 8);
                }
                ;
                return;

            case DiscreteAction.TogglePrecisionControls:
                if (FlightInputHandler.fetch != null)
                {
                    FlightInputHandler.fetch.precisionMode = !FlightInputHandler.fetch.precisionMode;
                    GameEvents.Input.OnPrecisionModeToggle.Fire(FlightInputHandler.fetch.precisionMode);
                }
                return;

            case DiscreteAction.ResetTrim:
                m_Yaw.SetTrim(0.0f);
                m_Pitch.SetTrim(0.0f);
                m_Roll.SetTrim(0.0f);
                return;

            case DiscreteAction.IVANextCamera:
                CameraController.Instance.NextIVACamera();
                return;

            case DiscreteAction.IVALookWindow:
                CameraController.Instance.FocusIVAWindow();
                return;
            }

            if (m_DisableVesselControls)
            {
                return;
            }

            // all other actions
            switch (action)
            {
            case DiscreteAction.Stage:
                KSP.UI.Screens.StageManager.ActivateNextStage();
                return;

            case DiscreteAction.Gear:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Gear);
                return;

            case DiscreteAction.Light:
                EVAController.Instance.ToggleHeadlamp();
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Light);
                return;

            case DiscreteAction.RCS:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.RCS);
                return;

            case DiscreteAction.SAS:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.SAS);
                return;

            case DiscreteAction.Brakes:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Brakes);
                return;

            case DiscreteAction.BrakesHold:
                FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.Brakes, true);
                return;

            case DiscreteAction.Abort:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Abort);
                return;

            case DiscreteAction.Custom01:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom01);
                return;

            case DiscreteAction.Custom02:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom02);
                return;

            case DiscreteAction.Custom03:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom03);
                return;

            case DiscreteAction.Custom04:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom04);
                return;

            case DiscreteAction.Custom05:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom05);
                return;

            case DiscreteAction.Custom06:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom06);
                return;

            case DiscreteAction.Custom07:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom07);
                return;

            case DiscreteAction.Custom08:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom08);
                return;

            case DiscreteAction.Custom09:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom09);
                return;

            case DiscreteAction.Custom10:
                FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom10);
                return;

            case DiscreteAction.SASHold:
                FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true);
                return;

            case DiscreteAction.LockStage:
                if (FlightInputHandler.fetch != null)
                {
                    FlightInputHandler.fetch.stageLock = !FlightInputHandler.fetch.stageLock;
                }
                return;

            case DiscreteAction.EVAInteract:
                EVAController.Instance.DoInteract();
                return;

            case DiscreteAction.EVAJump:
                EVAController.Instance.DoJump();
                return;

            case DiscreteAction.EVAToggleJetpack:
                EVAController.Instance.ToggleJetpack();
                return;

            case DiscreteAction.EVAAutoRunToggle:
                EVAController.Instance.ToggleAutorun();
                return;

            case DiscreteAction.EVAPlantFlag:
                EVAController.Instance.DoPlantFlag();
                return;
            }
        }
        private void UpdateAxes(ControllerConfiguration config, FlightCtrlState state)
        {
            var buttonsMask = config.iface.GetButtonsMask();

            for (int i = 0; i < config.iface.GetAxesCount(); i++)
            {
                List<ContinuousAction> actions = config.GetCurrentPreset().GetContinuousBinding(i, buttonsMask);
                if (actions == null)
                {
                    continue;
                }

                float axisState = config.iface.GetAxisState(i);

                foreach (var action in actions)
                {
                    if (config.GetCurrentPreset().IsContinuousBindingInverted(action))
                    {
                        axisState *= -1.0f;
                    }

                    if (axisState != 0.0f || action == ContinuousAction.Throttle || action == ContinuousAction.WheelThrottle)
                    {
                        EvaluateContinuousAction(config, action, axisState, state);
                    }
                }
            }
        }
        public void EvaluateDiscreteAction(ControllerConfiguration controller, DiscreteAction action, FlightCtrlState state)
        {
            switch (action)
            {
                case DiscreteAction.None:
                    return;
                case DiscreteAction.YawPlus:
                    m_Yaw.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.YawMinus:
                    m_Yaw.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.PitchPlus:
                    m_Pitch.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.PitchMinus:
                    m_Pitch.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.PitchTrimPlus:
                    m_Pitch.SetTrim(Utility.Clamp(m_Pitch.GetTrim() + controller.discreteActionStep, -1.0f, 1.0f));
                    return;
                case DiscreteAction.PitchTrimMinus:
                    m_Pitch.SetTrim(Utility.Clamp(m_Pitch.GetTrim() - controller.discreteActionStep, -1.0f, 1.0f));
                    return;
                case DiscreteAction.RollPlus:
                    m_Roll.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.RollMinus:
                    m_Roll.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.XPlus:
                    m_X.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.XMinus:
                    m_X.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.YPlus:
                    m_Y.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.YMinus:
                    m_Y.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.ZPlus:
                    m_Z.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.ZMinus:
                    m_Z.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.ThrottlePlus:
                    m_Throttle.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.ThrottleMinus:
                    m_Throttle.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.CutThrottle:
                    m_Throttle.SetValue(-state.mainThrottle);
                    return;
                case DiscreteAction.FullThrottle:
                    m_Throttle.SetValue(1.0f - state.mainThrottle);
                    return;
                case DiscreteAction.NextPreset:
                    if (controller.currentPreset >= controller.presets.Count - 1)
                    {
                        return;
                    }

                    controller.currentPreset++;
                    ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                    return;
                case DiscreteAction.PreviousPreset:
                    if (controller.currentPreset <= 0)
                    {
                        return;
                    }

                    controller.currentPreset--;
                    ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.UPPER_CENTER);
                    return;
                case DiscreteAction.CyclePresets:
                    controller.currentPreset++;
                    if (controller.currentPreset >= controller.presets.Count)
                    {
                        controller.currentPreset = 0;
                    }
                    ScreenMessages.PostScreenMessage("PRESET: " + controller.GetCurrentPreset().name.ToUpper(), 1.0f, ScreenMessageStyle.LOWER_CENTER);
                    return;
                case DiscreteAction.CameraZoomPlus:
                    m_CameraZoom.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.CameraZoomMinus:
                    m_CameraZoom.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.CameraXPlus:
                    m_CameraHeading.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.CameraXMinus:
                    m_CameraHeading.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.CameraYPlus:
                    m_CameraPitch.SetIncrement(1, controller.discreteActionStep);
                    return;
                case DiscreteAction.CameraYMinus:
                    m_CameraPitch.SetIncrement(-1, controller.discreteActionStep);
                    return;
                case DiscreteAction.OrbitMapToggle:
                    if (!MapView.MapIsEnabled)
                    {
                        MapView.EnterMapView();
                    }
                    else
                    {
                        MapView.ExitMapView();
                    }
                    return;
                case DiscreteAction.TimeWarpPlus:
                    WarpController.IncreaseWarp();
                    return;
                case DiscreteAction.TimeWarpMinus:
                    WarpController.DecreaseWarp();
                    return;
                case DiscreteAction.PhysicsTimeWarpPlus:
                    WarpController.IncreasePhysicsWarp();
                    return;
                case DiscreteAction.PhysicsTimeWarpMinus:
                    WarpController.DecreasePhysicsWarp();
                    return;
                case DiscreteAction.NavballToggle:
                    if (MapView.MapIsEnabled && MapView.fetch != null)
                    {
                      //  MapView.fetch.maneuverModeToggle.OnPress.Invoke();
                    }
                    return;
                case DiscreteAction.IVAViewToggle:
                    if (CameraManager.Instance != null)
                    {
                        CameraManager.Instance.SetCameraIVA();
                    }
                    return;
                case DiscreteAction.CameraViewToggle:
                    if (FlightCamera.fetch != null)
                    {
                        FlightCamera.fetch.SetNextMode();
                    }
                    return;
                case DiscreteAction.SASHold:
                    FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true);
                    return;
                case DiscreteAction.TogglePrecisionControls:
                    if (FlightInputHandler.fetch != null)
                    {
                        FlightInputHandler.fetch.precisionMode = !FlightInputHandler.fetch.precisionMode;
                        //Change color on flight input gauges manually. Hardcoded colors, but unlikely to change.
                        foreach (var r in FlightInputHandler.fetch.inputGaugeRenderers)
                        {
                            if (FlightInputHandler.fetch.precisionMode)
                                r.material.color = new Color(0.255f, 0.992f, 0.996f);
                            else
                                r.material.color = new Color(0.976f, 0.451f, 0.024f);
                        }
                    }
                    return;
                case DiscreteAction.ResetTrim:
                    m_Yaw.SetTrim(0.0f);
                    m_Pitch.SetTrim(0.0f);
                    m_Roll.SetTrim(0.0f);
                    return;
                case DiscreteAction.IVANextCamera:
                    CameraController.Instance.NextIVACamera();
                    return;
                case DiscreteAction.IVALookWindow:
                    CameraController.Instance.FocusIVAWindow();
                    return;
            }

            if (m_DisableVesselControls)
            {
                return;
            }

            // all other actions
            switch (action)
            {
                case DiscreteAction.Stage:
                    Staging.ActivateNextStage();
                    return;
                case DiscreteAction.Gear:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Gear);
                    return;
                case DiscreteAction.Light:
                    EVAController.Instance.ToggleHeadlamp();
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Light);
                    return;
                case DiscreteAction.RCS:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.RCS);
                    return;
                case DiscreteAction.SAS:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.SAS);
                    return;
                case DiscreteAction.Brakes:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Brakes);
                    return;
                case DiscreteAction.BrakesHold:
                    FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.Brakes, true);
                    return;
                case DiscreteAction.Abort:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Abort);
                    return;
                case DiscreteAction.Custom01:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom01);
                    return;
                case DiscreteAction.Custom02:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom02);
                    return;
                case DiscreteAction.Custom03:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom03);
                    return;
                case DiscreteAction.Custom04:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom04);
                    return;
                case DiscreteAction.Custom05:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom05);
                    return;
                case DiscreteAction.Custom06:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom06);
                    return;
                case DiscreteAction.Custom07:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom07);
                    return;
                case DiscreteAction.Custom08:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom08);
                    return;
                case DiscreteAction.Custom09:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom09);
                    return;
                case DiscreteAction.Custom10:
                    FlightGlobals.ActiveVessel.ActionGroups.ToggleGroup(KSPActionGroup.Custom10);
                    return;
                case DiscreteAction.SASHold:
                    FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true);
                    return;
                case DiscreteAction.LockStage:
                    if (FlightInputHandler.fetch != null)
                    {
                        FlightInputHandler.fetch.stageLock = !FlightInputHandler.fetch.stageLock;
                    }
                    return;
                case DiscreteAction.EVAInteract:
                    EVAController.Instance.DoInteract();
                    return;
                case DiscreteAction.EVAJump:
                    EVAController.Instance.DoJump();
                    return;
                case DiscreteAction.EVAToggleJetpack:
                    EVAController.Instance.ToggleJetpack();
                    return;
                case DiscreteAction.EVAAutoRunToggle:
                    EVAController.Instance.ToggleAutorun();
                    return;
                case DiscreteAction.EVAPlantFlag:
                    EVAController.Instance.DoPlantFlag();
                    return;
            }
        }