Exemple #1
0
        private ushort[] GetScancodeSequense(XInputState st, GamePadEventType type)
        {
            string[] keystroke = new string[] { };
            switch (type)
            {
            case GamePadEventType.Button:
                keystroke = Parse.Keystroke(Parse.KeysToString(Controller.GetProfile(), (XInputWrapper.GP)st.Gamepad.WButtons));
                break;

            case GamePadEventType.RightTrigger:
                keystroke = Parse.Keystroke(Parse.KeysToString(Controller.GetProfile(), (XInputWrapper.GP) 0x3333));
                break;

            case GamePadEventType.LeftTrigger:
                keystroke = Parse.Keystroke(Parse.KeysToString(Controller.GetProfile(), (XInputWrapper.GP) 0x5555));
                break;
            }
            List <ushort> result = new List <ushort>();

            foreach (var item in keystroke)
            {
                HardwareButtons code = (HardwareButtons)Enum.Parse(typeof(HardwareButtons), item);
                if (User32Wrapper.VKeys.TryGetValue((int)code, out ushort value))
                {
                    result.Add(value);
                }
            }

            return(result.ToArray());
        }
Exemple #2
0
 public GamePadEventData(GamePadEventType eventType, TimeSpan time, int frame, InputFlags flags, Buttons button, float triggerstate = 0)
 {
     EventType       = eventType;
     Time            = time;
     Frame           = frame;
     Flags           = flags;
     Button          = button;
     TriggerState    = triggerstate;
     ThumbstickState = Vector2.Zero;
 }
Exemple #3
0
 public GamePadEventData(GamePadEventType eventType, TimeSpan time, int frame, InputFlags flags, Buttons button, Vector2 thumbStickState)
 {
     EventType       = eventType;
     Time            = time;
     Frame           = frame;
     Flags           = flags;
     Button          = button;
     TriggerState    = 0;
     ThumbstickState = thumbStickState;
 }
Exemple #4
0
        private void ExecuteAction(XInputState st, GamePadEventType etype, InputType itype)
        {
            if (etype == GamePadEventType.RightThumbStick)
            {
                _win32Sender.SendMouseMoveInput(st.Gamepad.SThumbRX, st.Gamepad.SThumbRY, GamePadStickType.Right);
            }
            else if (etype == GamePadEventType.LeftThumbStick)
            {
                _win32Sender.SendMouseMoveInput(st.Gamepad.SThumbLX, st.Gamepad.SThumbLY, GamePadStickType.Left);
            }
            else
            {
                ushort[] sequense = GetScancodeSequense(st, etype);
                if (sequense.Length == 0)
                {
                    return;
                }

                _win32Sender.SendKeyboardInput(sequense, itype);
            }
        }
Exemple #5
0
        private void SetInput(XInputState st, InputType itype, RepeatType rmode)
        {
            bool             isOutDeadzone = false;
            GamePadEventType currentStick  = GamePadEventType.LeftThumbStick;

            //Left Thumb Stick
            float LX = st.Gamepad.SThumbLX;
            float LY = st.Gamepad.SThumbLY;

            float magnitudeL = (float)Math.Sqrt(LX * LX + LY * LY);

            float normalizedLX = LX / magnitudeL;
            float normalizedLY = LY / magnitudeL;

            if (magnitudeL > (float)XInputWrapper.GP.XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
            {
                isOutDeadzone = true;
                currentStick  = GamePadEventType.LeftThumbStick;
            }

            //Right Thumb Stick
            float RX = st.Gamepad.SThumbRX;
            float RY = st.Gamepad.SThumbRY;

            float magnitudeR = (float)Math.Sqrt(RX * RX + RY * RY);

            float normalizedRX = RX / magnitudeR;
            float normalizedRY = RY / magnitudeR;

            if (magnitudeR > (float)XInputWrapper.GP.XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)
            {
                isOutDeadzone = true;
                currentStick  = GamePadEventType.RightThumbStick;
            }

            //lock
            if ((st.Gamepad.WButtons == 48) && isOutDeadzone == false)
            {
                _isStandby = !_isStandby;
                Thread.Sleep(500);
                _currentPacketNumber = st.DwPacketNumber;
            }
            if (_isStandby)
            {
                return;
            }

            if (isOutDeadzone)
            {
                ExecuteAction(st, currentStick, itype);
            }

            //EMULATE BUTTONS
            if (rmode == RepeatType.NoRepeats && _currentPacketNumber == st.DwPacketNumber)
            {
                return;
            }

            //Buttons
            if (st.Gamepad.WButtons != 0)
            {
                ExecuteAction(st, GamePadEventType.Button, itype);
            }

            //Left trigger
            if (st.Gamepad.BLeftTrigger > 254)
            {
                ExecuteAction(st, GamePadEventType.LeftTrigger, itype);
            }

            //Right trigger
            if (st.Gamepad.BRightTrigger > 254)
            {
                ExecuteAction(st, GamePadEventType.RightTrigger, itype);
            }

            st.ZeroMemory();
            XInputWrapper.XInputGetState(_gamepad.GetNumber(), ref st);
            _currentPacketNumber = st.DwPacketNumber;
        }