private void ProcessGamePadInput(int p)
{
int sign = 1;
GamePadState currentState = GamePad.GetState(gamePadPlayerIndex[p - 1]);
if (System.Environment.OSVersion.Platform != PlatformID.Unix || System.Environment.OSVersion.Platform != PlatformID.MacOSX)
sign = -1;
if (currentState.IsConnected)
{
if (previousGamePadState[p - 1].DPad.Up == ButtonState.Released && currentState.DPad.Up == ButtonState.Pressed)
OnInput(InputMessage.MessageType.ControlsUp, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].DPad.Down == ButtonState.Released && currentState.DPad.Down == ButtonState.Pressed)
OnInput(InputMessage.MessageType.ControlsDown, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].DPad.Left == ButtonState.Released && currentState.DPad.Left == ButtonState.Pressed)
OnInput(InputMessage.MessageType.ControlsLeft, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].DPad.Right == ButtonState.Released && currentState.DPad.Right == ButtonState.Pressed)
OnInput(InputMessage.MessageType.ControlsRight, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].IsButtonUp(Buttons.B) && currentState.IsButtonDown(Buttons.B))
OnInput(InputMessage.MessageType.ControlsBack, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].IsButtonUp(Buttons.A) && currentState.IsButtonDown(Buttons.A))
OnInput(InputMessage.MessageType.ControlsAction, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].IsButtonUp(Buttons.X) && currentState.IsButtonDown(Buttons.X))
OnInput(InputMessage.MessageType.ControlsJump, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.X <= 0.5 && currentState.ThumbSticks.Left.X > 0.5)
OnInput(InputMessage.MessageType.ControlsRight, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.X >= -0.5 && currentState.ThumbSticks.Left.X < -0.5)
OnInput(InputMessage.MessageType.ControlsLeft, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.Y * sign <= 0.5 && currentState.ThumbSticks.Left.Y * sign > 0.5)
OnInput(InputMessage.MessageType.ControlsDown, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.Y * sign >= -0.5 && currentState.ThumbSticks.Left.Y * sign < -0.5)
OnInput(InputMessage.MessageType.ControlsUp, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].Buttons.LeftStick == ButtonState.Released && currentState.Buttons.LeftStick == ButtonState.Pressed)
OnInput(InputMessage.MessageType.ControlsJump, true, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.X > 0.5 && currentState.ThumbSticks.Left.X <= 0.5)
OnInput(InputMessage.MessageType.ControlsRight, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.X < -0.5 && currentState.ThumbSticks.Left.X >= -0.5)
OnInput(InputMessage.MessageType.ControlsLeft, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.Y * sign > 0.5 && currentState.ThumbSticks.Left.Y * sign <= 0.5)
OnInput(InputMessage.MessageType.ControlsDown, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].ThumbSticks.Left.Y * sign < -0.5 && currentState.ThumbSticks.Left.Y * sign >= -0.5)
OnInput(InputMessage.MessageType.ControlsUp, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].Buttons.LeftStick == ButtonState.Pressed && currentState.Buttons.LeftStick == ButtonState.Released)
OnInput(InputMessage.MessageType.ControlsJump, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].DPad.Up == ButtonState.Pressed && currentState.DPad.Up == ButtonState.Released)
OnInput(InputMessage.MessageType.ControlsUp, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].DPad.Down == ButtonState.Pressed && currentState.DPad.Down == ButtonState.Released)
OnInput(InputMessage.MessageType.ControlsDown, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].DPad.Left == ButtonState.Pressed && currentState.DPad.Left == ButtonState.Released)
OnInput(InputMessage.MessageType.ControlsLeft, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].DPad.Right == ButtonState.Pressed && currentState.DPad.Right == ButtonState.Released)
OnInput(InputMessage.MessageType.ControlsRight, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].IsButtonDown(Buttons.B) && currentState.IsButtonUp(Buttons.B))
OnInput(InputMessage.MessageType.ControlsBack, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].IsButtonDown(Buttons.A) && currentState.IsButtonUp(Buttons.A))
OnInput(InputMessage.MessageType.ControlsAction, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
if (previousGamePadState[p - 1].IsButtonDown(Buttons.X) && currentState.IsButtonUp(Buttons.X))
OnInput(InputMessage.MessageType.ControlsJump, false, char.MinValue, Ballz.The().Match?.PlayerByNumber(p));
}
previousGamePadState[p - 1] = currentState;
}