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()); }
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; }
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; }
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); } }
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; }