Example #1
0
        public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode)
        {
            int number = (int)playerIndex;

            if (number < s_numJoysticks)
            {
                IntPtr j = _sticks[number];

                _state[number].buttons.A             = (ButtonState)Sdl.SDL_JoystickGetButton(j, A);
                _state[number].buttons.B             = (ButtonState)Sdl.SDL_JoystickGetButton(j, B);
                _state[number].buttons.X             = (ButtonState)Sdl.SDL_JoystickGetButton(j, X);
                _state[number].buttons.Y             = (ButtonState)Sdl.SDL_JoystickGetButton(j, Y);
                _state[number].buttons.Back          = (ButtonState)Sdl.SDL_JoystickGetButton(j, Back);
                _state[number].buttons.Start         = (ButtonState)Sdl.SDL_JoystickGetButton(j, Start);
                _state[number].buttons.LeftShoulder  = (ButtonState)Sdl.SDL_JoystickGetButton(j, LeftShoulder);
                _state[number].buttons.LeftStick     = (ButtonState)Sdl.SDL_JoystickGetButton(j, LeftStick);
                _state[number].buttons.RightShoulder = (ButtonState)Sdl.SDL_JoystickGetButton(j, RightShoulder);
                _state[number].buttons.RightStick    = (ButtonState)Sdl.SDL_JoystickGetButton(j, RightStick);

                float x1 = Rescale((float)(Sdl.SDL_JoystickGetAxis(j, (int)JoystickAxis.Horizontal) + JOYSTICK_ADJUSTMENT) / JOYSTICK_SCALE);
                float y1 = Rescale(Sdl.SDL_JoystickGetAxis(j, (int)JoystickAxis.Vertical));
                float x2 = Rescale(Sdl.SDL_JoystickGetAxis(j, (int)JoystickAxis.Axis3));
                float y2 = Rescale(Sdl.SDL_JoystickGetAxis(j, (int)JoystickAxis.Axis4));

                switch (deadZoneMode)
                {
                case GamePadDeadZone.IndependentAxes:
                    _state[number].thumbSticks.left  = IndependentAxisDeadZone(x1, y1);
                    _state[number].thumbSticks.right = IndependentAxisDeadZone(x2, y2);
                    break;

                case GamePadDeadZone.Circular:
                    _state[number].thumbSticks.left  = CircularAxisDeadZone(x1, y1);
                    _state[number].thumbSticks.right = CircularAxisDeadZone(x2, y2);
                    break;

                case GamePadDeadZone.None:
                    _state[number].thumbSticks.left  = new Vector2(x1, y1);
                    _state[number].thumbSticks.right = new Vector2(x2, y2);
                    break;
                }
                GamePadDPad.ToGamePadDPad(ref _state[number].dPad, Sdl.SDL_JoystickGetHat(j, 0));

                // converts ButtonKeyState.Pressed ( = 1) to float of 1.0f
                // since SDL doesn't support reading the position of the trigger.  Will review this later
                _state[number].triggers.left  = (int)Sdl.SDL_JoystickGetButton(j, LeftTrigger) * 1.0f;
                _state[number].triggers.right = (int)Sdl.SDL_JoystickGetButton(j, RightTrigger) * 1.0f;
            }
            else
            {
                _state[number].isConnected = false;
            }

            return(_state[number]);
        }