| 735 | } |
| 736 | |
| 737 | void SDLGamepad::OnAxisMotion(SDL_GamepadAxis sdlAxis, int16 value) |
| 738 | { |
| 739 | GamepadAxis axis; |
| 740 | int16 deadzone = 1; // SDL reports -1 for centered axis? |
| 741 | float valueNormalized = NormalizeAxisValue(value); |
| 742 | switch (sdlAxis) |
| 743 | { |
| 744 | case SDL_GAMEPAD_AXIS_LEFTX: |
| 745 | axis = GamepadAxis::LeftStickX; |
| 746 | deadzone = LEFT_STICK_THRESHOLD; |
| 747 | _state.Buttons[(int32)GamepadButton::LeftStickLeft] = value > LEFT_STICK_THRESHOLD; |
| 748 | _state.Buttons[(int32)GamepadButton::LeftStickRight] = value < -LEFT_STICK_THRESHOLD; |
| 749 | break; |
| 750 | case SDL_GAMEPAD_AXIS_LEFTY: |
| 751 | axis = GamepadAxis::LeftStickY; |
| 752 | deadzone = LEFT_STICK_THRESHOLD; |
| 753 | _state.Buttons[(int32)GamepadButton::LeftStickUp] = value < -LEFT_STICK_THRESHOLD; |
| 754 | _state.Buttons[(int32)GamepadButton::LeftStickDown] = value > LEFT_STICK_THRESHOLD; |
| 755 | valueNormalized = -valueNormalized; |
| 756 | break; |
| 757 | case SDL_GAMEPAD_AXIS_RIGHTX: |
| 758 | deadzone = RIGHT_STICK_THRESHOLD; |
| 759 | axis = GamepadAxis::RightStickX; |
| 760 | _state.Buttons[(int32)GamepadButton::RightStickLeft] = value > RIGHT_STICK_THRESHOLD; |
| 761 | _state.Buttons[(int32)GamepadButton::RightStickRight] = value < -RIGHT_STICK_THRESHOLD; |
| 762 | break; |
| 763 | case SDL_GAMEPAD_AXIS_RIGHTY: |
| 764 | deadzone = RIGHT_STICK_THRESHOLD; |
| 765 | axis = GamepadAxis::RightStickY; |
| 766 | _state.Buttons[(int32)GamepadButton::RightStickUp] = value < -RIGHT_STICK_THRESHOLD; |
| 767 | _state.Buttons[(int32)GamepadButton::RightStickDown] = value > RIGHT_STICK_THRESHOLD; |
| 768 | valueNormalized = -valueNormalized; |
| 769 | break; |
| 770 | case SDL_GAMEPAD_AXIS_LEFT_TRIGGER: |
| 771 | deadzone = TRIGGER_THRESHOLD; |
| 772 | axis = GamepadAxis::LeftTrigger; |
| 773 | _state.Buttons[(int32)GamepadButton::LeftTrigger] = value > TRIGGER_THRESHOLD; |
| 774 | break; |
| 775 | case SDL_GAMEPAD_AXIS_RIGHT_TRIGGER: |
| 776 | deadzone = TRIGGER_THRESHOLD; |
| 777 | axis = GamepadAxis::RightTrigger; |
| 778 | _state.Buttons[(int32)GamepadButton::RightTrigger] = value > TRIGGER_THRESHOLD; |
| 779 | break; |
| 780 | default: |
| 781 | return; |
| 782 | } |
| 783 | if (value <= deadzone && value >= -deadzone) |
| 784 | valueNormalized = 0.0f; |
| 785 | _state.Axis[(int32)axis] = valueNormalized; |
| 786 | } |
| 787 | |
| 788 | void SDLGamepad::OnButtonState(SDL_GamepadButton sdlButton, bool pressed) |
| 789 | { |
no test coverage detected