예제 #1
0
        public Settings()
        {
            InitializeComponent();

            enableControlCheck.Checked = ControlState.GetSystemEnabled();

            controller0CheckBox.Checked = ControlState.GetControllerEnabled(0);
            controller1CheckBox.Checked = ControlState.GetControllerEnabled(1);
            controller2CheckBox.Checked = ControlState.GetControllerEnabled(2);
            controller3CheckBox.Checked = ControlState.GetControllerEnabled(3);
        }
예제 #2
0
        //when the application loads
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            //hide the window and the taskbar icon
            Visible       = false;
            ShowInTaskbar = false;

            //run the controller code
            bool   run = true;
            Thread t   =
                new Thread(
                    delegate() {
                while (run)
                {
                    ControllerWork.Update();
                    KeyboardWork.Update();
                    Thread.Sleep(1000 / 60);
                }
            }
                    );

            t.SetApartmentState(ApartmentState.STA);
            t.Start();

            //run the loop here
            while (!this.IsDisposed)
            {
                if (ControlState.GetSystemEnabled())
                {
                    _icon.Icon = XMouse.Properties.Resources.trayIcon_sm_enabled;
                }
                else
                {
                    _icon.Icon = XMouse.Properties.Resources.trayIcon_sm_disabled;
                }

                //allow the form app to call it events
                Application.DoEvents();

                Thread.Sleep(200);
            }

            //stop the thread
            run = false;
        }
        //do the work needed to run the controller and mouse
        public static void Update()
        {
            //if (KeyboardRobot.GetKey(27)) Application.Exit(); // quit the application if escape is pressed

            // Reset stick positions
            _rightStick.X = _leftStick.X = _rightStick.Y = _leftStick.Y = 0;

            // move mouse
            Vector2 mouseMovement = Vector2.Zero;
            Vector2 scrollAmount  = Vector2.Zero;

            // store the button states -1 is pressed, 1 is up, 0 is nochange
            float rTrigger = 0.0f;
            float lTrigger = 0.0f;

            // go through every controller to check inputs
            for (int i = 0; i < 4; i++)
            {
                GamePadState gps  = GamePad.GetState((PlayerIndex)i, GamePadDeadZone.Circular);
                GamePadState pgps = _prevGamePadStates[i];


                // check if enable key combo is enabled
                if (IsEnableToggleComboPressed(gps) && !IsEnableToggleComboPressed(pgps))
                {
                    ControlState.ToggleSystemEnabled();

                    // store they previous state
                    _prevGamePadStates[i] = gps;
                    break;
                }

                //check if the quit key combo is enabled
                if (IsCtrlQComboPressed(gps) && !IsCtrlQComboPressed(pgps))
                {
                    KeyboardRobot.PressKey(0xA2);
                    KeyboardRobot.PressKey('q');
                    KeyboardRobot.ReleaseKey('q');
                    KeyboardRobot.ReleaseKey(0xA2);
                }

                // don't do anything if the player isn't enabled or if the entire system isn't enabled
                if (!ControlState.GetControllerEnabled(i) || !ControlState.GetSystemEnabled())
                {
                    _prevGamePadStates[i] = gps;
                    continue;
                }

                // save stick states
                _rightStick += gps.ThumbSticks.Right;
                _leftStick  += gps.ThumbSticks.Left;

                // store stick amount for mouse movement
                mouseMovement += gps.ThumbSticks.Left;
                scrollAmount  += gps.ThumbSticks.Right;

                // store the largest trigger value
                if (rTrigger < gps.Triggers.Right)
                {
                    rTrigger = gps.Triggers.Right;
                }
                if (lTrigger < gps.Triggers.Left)
                {
                    lTrigger = gps.Triggers.Left;
                }


                // If we're in mouse control
                if (!ControlState.isTyping)
                {
                    // MOUSE CLICKS //
                    // left click when a pressed
                    if (KeyPressed(gps, pgps, Buttons.A))
                    {
                        MouseRobot.PressButton(0);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.A))
                    {
                        MouseRobot.ReleaseButton(0);
                    }

                    // right click when b is pressed
                    if (KeyPressed(gps, pgps, Buttons.B))
                    {
                        MouseRobot.PressButton(1);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.B))
                    {
                        MouseRobot.ReleaseButton(1);
                    }

                    // middle click when y is pressed
                    if (KeyPressed(gps, pgps, Buttons.Y))
                    {
                        MouseRobot.PressButton(2);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.Y))
                    {
                        MouseRobot.ReleaseButton(2);
                    }

                    // ENTER KEY //
                    // press enter key when start is pressed
                    if (KeyPressed(gps, pgps, Buttons.Start))
                    {
                        KeyboardRobot.PressKey(13);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.Start))
                    {
                        KeyboardRobot.ReleaseKey(13);
                    }
                }
                else
                {
                    // Toggle they alt character set
                    if (KeyPressed(gps, pgps, Buttons.LeftShoulder))
                    {
                        ControlState.ToggleAltCharacters();
                    }

                    if (KeyPressed(gps, pgps, Buttons.Y))
                    {
                        ControlState.ToggleAltCharacters();
                        KeyboardWork.firstButtonAction(ControlState.Y_BUTTON, true);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.Y))
                    {
                        KeyboardWork.firstButtonAction(ControlState.Y_BUTTON, false);
                    }

                    // backspace when X is pressed
                    if (KeyPressed(gps, pgps, Buttons.X))
                    {
                        KeyboardRobot.PressKey(KeyboardRobot.BACKSPACE_KEY);
                        KeyboardWork.firstButtonAction(ControlState.X_BUTTON, true);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.X))
                    {
                        KeyboardRobot.ReleaseKey(KeyboardRobot.BACKSPACE_KEY);
                        KeyboardWork.firstButtonAction(ControlState.X_BUTTON, false);
                    }

                    // space when A is pressed
                    if (KeyPressed(gps, pgps, Buttons.A))
                    {
                        KeyboardRobot.PressKey(' ');
                        KeyboardWork.firstButtonAction(ControlState.A_BUTTON, true);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.A))
                    {
                        KeyboardRobot.ReleaseKey(' ');
                        KeyboardWork.firstButtonAction(ControlState.A_BUTTON, false);
                    }

                    // enter when B is pressed
                    if (KeyPressed(gps, pgps, Buttons.B))
                    {
                        KeyboardRobot.PressKey(KeyboardRobot.ENTER_KEY);
                        KeyboardWork.firstButtonAction(ControlState.B_BUTTON, true);
                    }
                    else if (KeyReleased(gps, pgps, Buttons.B))
                    {
                        KeyboardRobot.ReleaseKey(KeyboardRobot.ENTER_KEY);
                        KeyboardWork.firstButtonAction(ControlState.B_BUTTON, false);
                    }
                }

                // For both key states
                // TOGGLE TYPING STATE //
                if (KeyPressed(gps, pgps, Buttons.LeftStick))
                {
                    ControlState.isTyping = !ControlState.isTyping;
                }
                // ARROW KEYS //
                // Left Arrow when left DPad
                if (KeyPressed(gps, pgps, Buttons.DPadLeft))
                {
                    KeyboardRobot.PressKey(37);
                }
                else if (KeyReleased(gps, pgps, Buttons.DPadLeft))
                {
                    KeyboardRobot.ReleaseKey(37);
                }
                // Right Arrow when right dpad
                if (KeyPressed(gps, pgps, Buttons.DPadRight))
                {
                    KeyboardRobot.PressKey(39);
                }
                else if (KeyReleased(gps, pgps, Buttons.DPadRight))
                {
                    KeyboardRobot.ReleaseKey(39);
                }
                // Up Arrow
                if (KeyPressed(gps, pgps, Buttons.DPadUp))
                {
                    KeyboardRobot.PressKey(38);
                }
                else if (KeyReleased(gps, pgps, Buttons.DPadUp))
                {
                    KeyboardRobot.ReleaseKey(38);
                }
                // Down Arrow
                if (KeyPressed(gps, pgps, Buttons.DPadDown))
                {
                    KeyboardRobot.PressKey(40);
                }
                else if (KeyReleased(gps, pgps, Buttons.DPadDown))
                {
                    KeyboardRobot.ReleaseKey(40);
                }

                // store they previous state
                _prevGamePadStates[i] = gps;
            }

            // don't do anything if the system is not enabled
            if (!ControlState.GetSystemEnabled())
            {
                return;
            }
            if (ControlState.isTyping)
            {
                return;
            }

            // super speed if right trigger is pressed
            mouseMovement *= 30;
            mouseMovement -= rTrigger * mouseMovement * .7f;
            mouseMovement -= lTrigger * mouseMovement * .7f;

            scrollAmount *= 15;
            MouseRobot.Scroll((int)scrollAmount.Y);

            // moves the mouse
            MouseRobot.MoveMouse((int)mouseMovement.X, -(int)mouseMovement.Y);
        }