Created
February 6, 2019 17:57
-
-
Save lindsaygcox/133accdd8fd83cd394185a6b00ea3614 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using XInputDotNetPure; | |
public sealed class XInputWrapper | |
{ | |
private PlayerIndex _playerIndex; | |
private bool _playerIndexSet; | |
private GamePadState _state, _prevState; | |
private const int kPadCount = 4; | |
public event Action OnAPressed; | |
public event Action OnAReleased; | |
public event Action OnBPressed; | |
public event Action OnBReleased; | |
public event Action OnXPressed; | |
public event Action OnXReleased; | |
public event Action OnYPressed; | |
public event Action OnYReleased; | |
public event Action OnStartPressed; | |
public event Action OnStartReleased; | |
public event Action OnBackPressed; | |
public event Action OnBackReleased; | |
public event Action OnLeftShoulderPressed; | |
public event Action OnLeftShoulderReleased; | |
public event Action OnRightShoulderPressed; | |
public event Action OnRightShoulderReleased; | |
public event Action OnGuidePressed; | |
public event Action OnGuideReleased; | |
public event Action OnLeftStickPressed; | |
public event Action OnLeftStickReleased; | |
public event Action OnRightStickPressed; | |
public event Action OnRightStickReleased; | |
public float LeftStickX | |
{ | |
get | |
{ | |
return _state.ThumbSticks.Left.X; | |
} | |
} | |
public float LeftStickY | |
{ | |
get | |
{ | |
return _state.ThumbSticks.Left.Y; | |
} | |
} | |
public float RightStickX | |
{ | |
get | |
{ | |
return _state.ThumbSticks.Right.X; | |
} | |
} | |
public float RightStickY | |
{ | |
get | |
{ | |
return _state.ThumbSticks.Right.Y; | |
} | |
} | |
public void Update() | |
{ | |
PlayerIndexUpdate(); | |
if (!_playerIndexSet) | |
{ | |
return; | |
} | |
StateUpdate(); | |
ButtonsUpdate(); | |
} | |
private void PlayerIndexUpdate() | |
{ | |
if (!_playerIndexSet || _prevState.IsConnected) | |
{ | |
for (int i = 0; i < kPadCount; ++i) | |
{ | |
PlayerIndex pI = (PlayerIndex)i; | |
GamePadState state = GamePad.GetState(pI); | |
if (state.IsConnected) | |
{ | |
_playerIndex = pI; | |
_playerIndexSet = true; | |
} | |
} | |
} | |
} | |
private void StateUpdate() | |
{ | |
_prevState = _state; | |
_state = GamePad.GetState(_playerIndex); | |
} | |
private void ButtonsUpdate() | |
{ | |
//START | |
if (_prevState.Buttons.Start == ButtonState.Released && _state.Buttons.Start == ButtonState.Pressed) | |
{ | |
OnStartPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.Start == ButtonState.Pressed && _state.Buttons.Start == ButtonState.Released) | |
{ | |
OnStartReleased?.Invoke(); | |
} | |
//BACK | |
if (_prevState.Buttons.Back == ButtonState.Released && _state.Buttons.Back == ButtonState.Pressed) | |
{ | |
OnBackPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.Back == ButtonState.Pressed && _state.Buttons.Back == ButtonState.Released) | |
{ | |
OnBackReleased?.Invoke(); | |
} | |
//Left Shoulder | |
if (_prevState.Buttons.LeftShoulder == ButtonState.Released && _state.Buttons.LeftShoulder== ButtonState.Pressed) | |
{ | |
OnLeftShoulderPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.LeftShoulder == ButtonState.Pressed && _state.Buttons.LeftShoulder == ButtonState.Released) | |
{ | |
OnLeftShoulderReleased?.Invoke(); | |
} | |
//Right Shoulder | |
if (_prevState.Buttons.RightShoulder == ButtonState.Released && _state.Buttons.RightShoulder == ButtonState.Pressed) | |
{ | |
OnRightShoulderPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.RightShoulder == ButtonState.Pressed && _state.Buttons.RightShoulder == ButtonState.Released) | |
{ | |
OnRightShoulderReleased?.Invoke(); | |
} | |
//Guide | |
if (_prevState.Buttons.Guide == ButtonState.Released && _state.Buttons.Guide == ButtonState.Pressed) | |
{ | |
OnGuidePressed?.Invoke(); | |
} | |
if (_prevState.Buttons.Guide == ButtonState.Pressed && _state.Buttons.Guide == ButtonState.Released) | |
{ | |
OnGuideReleased?.Invoke(); | |
} | |
//A | |
if (_prevState.Buttons.A == ButtonState.Released && _state.Buttons.A == ButtonState.Pressed) | |
{ | |
OnAPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.A == ButtonState.Pressed && _state.Buttons.A == ButtonState.Released) | |
{ | |
OnAReleased?.Invoke(); | |
} | |
//B | |
if (_prevState.Buttons.B == ButtonState.Released && _state.Buttons.B == ButtonState.Pressed) | |
{ | |
OnBPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.B == ButtonState.Pressed && _state.Buttons.B == ButtonState.Released) | |
{ | |
OnBReleased?.Invoke(); | |
} | |
//Y | |
if (_prevState.Buttons.Y == ButtonState.Released && _state.Buttons.Y == ButtonState.Pressed) | |
{ | |
OnYPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.Y == ButtonState.Pressed && _state.Buttons.Y == ButtonState.Released) | |
{ | |
OnYReleased?.Invoke(); | |
} | |
//X | |
if (_prevState.Buttons.X == ButtonState.Released && _state.Buttons.X == ButtonState.Pressed) | |
{ | |
OnXPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.X == ButtonState.Pressed && _state.Buttons.X == ButtonState.Released) | |
{ | |
OnXReleased?.Invoke(); | |
} | |
//Left Stick | |
if (_prevState.Buttons.LeftStick == ButtonState.Released && _state.Buttons.LeftStick == ButtonState.Pressed) | |
{ | |
OnLeftStickPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.LeftStick == ButtonState.Pressed && _state.Buttons.LeftStick == ButtonState.Released) | |
{ | |
OnLeftStickReleased?.Invoke(); | |
} | |
//Right Stick | |
if (_prevState.Buttons.RightStick == ButtonState.Released && _state.Buttons.RightStick == ButtonState.Pressed) | |
{ | |
OnRightStickPressed?.Invoke(); | |
} | |
if (_prevState.Buttons.RightStick == ButtonState.Pressed && _state.Buttons.RightStick == ButtonState.Released) | |
{ | |
OnRightStickReleased?.Invoke(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment