Fix Joystick:getGamepadType when the gamepad is disconnected.

This commit is contained in:
Sasha Szpakowski
2025-04-12 17:03:50 -03:00
parent 5c1c23fec6
commit 6a972eec8e
2 changed files with 45 additions and 19 deletions
+44 -19
View File
@@ -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
+1
View File
@@ -112,6 +112,7 @@ private:
SDL_Gamepad *controller;
JoystickType joystickType;
GamepadType gamepadType;
SDL_JoystickID instanceid;
std::string pguid;