mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
Fix Joystick:getGamepadType when the gamepad is disconnected.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -112,6 +112,7 @@ private:
|
||||
SDL_Gamepad *controller;
|
||||
|
||||
JoystickType joystickType;
|
||||
GamepadType gamepadType;
|
||||
|
||||
SDL_JoystickID instanceid;
|
||||
std::string pguid;
|
||||
|
||||
Reference in New Issue
Block a user