35 if (SDL_IsGameController(_index))
36 _pad = SDL_GameControllerOpen(_index);
41 SDL_GameControllerClose(_pad);
45 return _pad !=
nullptr && SDL_GameControllerGetAttached(_pad);
53 return isAvailable() && SDL_GameControllerGetButton(_pad, _buttons.at(button)) != 0;
61 return SDL_GameControllerGetAxis(_pad, _axes.at(axis)) / 32767.f;
69 SDL_GameController *_pad =
nullptr;
71 const std::unordered_map<IGamepad::Button, SDL_GameControllerButton> _buttons = {
72 {IGamepad::BUTTON_A, SDL_CONTROLLER_BUTTON_A},
73 {IGamepad::BUTTON_B, SDL_CONTROLLER_BUTTON_B},
74 {IGamepad::BUTTON_X, SDL_CONTROLLER_BUTTON_X},
75 {IGamepad::BUTTON_Y, SDL_CONTROLLER_BUTTON_Y},
76 {IGamepad::BUTTON_LEFT_BUMPER, SDL_CONTROLLER_BUTTON_LEFTSHOULDER},
77 {IGamepad::BUTTON_RIGHT_BUMPER, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER},
78 {IGamepad::BUTTON_BACK, SDL_CONTROLLER_BUTTON_BACK},
79 {IGamepad::BUTTON_START, SDL_CONTROLLER_BUTTON_START},
80 {IGamepad::BUTTON_LEFT_THUMB, SDL_CONTROLLER_BUTTON_LEFTSTICK},
81 {IGamepad::BUTTON_RIGHT_THUMB, SDL_CONTROLLER_BUTTON_RIGHTSTICK},
82 {IGamepad::BUTTON_DPAD_UP, SDL_CONTROLLER_BUTTON_DPAD_UP},
83 {IGamepad::BUTTON_DPAD_RIGHT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT},
84 {IGamepad::BUTTON_DPAD_DOWN, SDL_CONTROLLER_BUTTON_DPAD_DOWN},
85 {IGamepad::BUTTON_DPAD_LEFT, SDL_CONTROLLER_BUTTON_DPAD_LEFT},
88 const std::unordered_map<IGamepad::Axis, SDL_GameControllerAxis> _axes = {
89 {IGamepad::AXIS_LEFT_X, SDL_CONTROLLER_AXIS_LEFTX},
90 {IGamepad::AXIS_LEFT_Y, SDL_CONTROLLER_AXIS_LEFTY},
91 {IGamepad::AXIS_RIGHT_X, SDL_CONTROLLER_AXIS_RIGHTX},
92 {IGamepad::AXIS_RIGHT_Y, SDL_CONTROLLER_AXIS_RIGHTY},
93 {IGamepad::AXIS_LEFT_TRIGGER, SDL_CONTROLLER_AXIS_TRIGGERLEFT},
94 {IGamepad::AXIS_RIGHT_TRIGGER, SDL_CONTROLLER_AXIS_TRIGGERRIGHT},