diff --git a/src/modules/joystick/sdl/Joystick.cpp b/src/modules/joystick/sdl/Joystick.cpp index 15d8820bf..47433ca1b 100644 --- a/src/modules/joystick/sdl/Joystick.cpp +++ b/src/modules/joystick/sdl/Joystick.cpp @@ -42,6 +42,7 @@ Joystick::Joystick(int id) : joyhandle(nullptr) , controller(nullptr) , joystickType(JOYSTICK_TYPE_UNKNOWN) + , gamepadType(GAMEPAD_TYPE_UNKNOWN) , instanceid(-1) , id(id) { @@ -114,6 +115,48 @@ bool Joystick::open(int64 deviceid) joystickType = JOYSTICK_TYPE_UNKNOWN; break; } + + if (controller != nullptr) + { + switch (SDL_GetGamepadType(controller)) + { + case SDL_GAMEPAD_TYPE_UNKNOWN: + gamepadType = GAMEPAD_TYPE_UNKNOWN; + break; + case SDL_GAMEPAD_TYPE_XBOX360: + gamepadType = GAMEPAD_TYPE_XBOX360; + break; + case SDL_GAMEPAD_TYPE_XBOXONE: + gamepadType = GAMEPAD_TYPE_XBOXONE; + break; + case SDL_GAMEPAD_TYPE_PS3: + gamepadType = GAMEPAD_TYPE_PS3; + break; + case SDL_GAMEPAD_TYPE_PS4: + gamepadType = GAMEPAD_TYPE_PS4; + break; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO: + gamepadType = GAMEPAD_TYPE_NINTENDO_SWITCH_PRO; + break; + case SDL_GAMEPAD_TYPE_PS5: + gamepadType = GAMEPAD_TYPE_PS5; + break; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: + gamepadType = GAMEPAD_TYPE_JOYCON_LEFT; + break; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: + gamepadType = GAMEPAD_TYPE_JOYCON_RIGHT; + break; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: + gamepadType = GAMEPAD_TYPE_JOYCON_PAIR; + break; + default: + gamepadType = GAMEPAD_TYPE_UNKNOWN; + break; + } + } + else + gamepadType = GAMEPAD_TYPE_UNKNOWN; } return isConnected(); @@ -255,25 +298,7 @@ bool Joystick::isGamepad() const Joystick::GamepadType Joystick::getGamepadType() const { - if (controller == nullptr) - return GAMEPAD_TYPE_UNKNOWN; - - switch (SDL_GetGamepadType(controller)) - { - case SDL_GAMEPAD_TYPE_UNKNOWN: return GAMEPAD_TYPE_UNKNOWN; - case SDL_GAMEPAD_TYPE_XBOX360: return GAMEPAD_TYPE_XBOX360; - case SDL_GAMEPAD_TYPE_XBOXONE: return GAMEPAD_TYPE_XBOXONE; - case SDL_GAMEPAD_TYPE_PS3: return GAMEPAD_TYPE_PS3; - case SDL_GAMEPAD_TYPE_PS4: return GAMEPAD_TYPE_PS4; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO: return GAMEPAD_TYPE_NINTENDO_SWITCH_PRO; - case SDL_GAMEPAD_TYPE_PS5: return GAMEPAD_TYPE_PS5; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: return GAMEPAD_TYPE_JOYCON_LEFT; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: return GAMEPAD_TYPE_JOYCON_RIGHT; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: return GAMEPAD_TYPE_JOYCON_PAIR; - default: return GAMEPAD_TYPE_UNKNOWN; - } - - return GAMEPAD_TYPE_UNKNOWN; + return gamepadType; } float Joystick::getGamepadAxis(love::joystick::Joystick::GamepadAxis axis) const diff --git a/src/modules/joystick/sdl/Joystick.h b/src/modules/joystick/sdl/Joystick.h index 75b19d33f..410526f02 100644 --- a/src/modules/joystick/sdl/Joystick.h +++ b/src/modules/joystick/sdl/Joystick.h @@ -112,6 +112,7 @@ private: SDL_Gamepad *controller; JoystickType joystickType; + GamepadType gamepadType; SDL_JoystickID instanceid; std::string pguid;