mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 17:49:43 +01:00
Controller layout detection
This commit is contained in:
parent
8e3e29a14c
commit
7b40a052ed
3 changed files with 63 additions and 6 deletions
|
@ -167,6 +167,44 @@ void BUTTONGLYPHS_keyboard_set_active(bool active)
|
||||||
keyboard_is_active = active;
|
keyboard_is_active = active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BUTTONGLYPHS_update_layout(Uint16 vendor, Uint16 product)
|
||||||
|
{
|
||||||
|
if (vendor == 0x054c)
|
||||||
|
{
|
||||||
|
layout = LAYOUT_PLAYSTATION;
|
||||||
|
}
|
||||||
|
else if (vendor == 0x28de)
|
||||||
|
{
|
||||||
|
layout = LAYOUT_DECK;
|
||||||
|
}
|
||||||
|
else if (vendor == 0x057e)
|
||||||
|
{
|
||||||
|
if (product == 0x2006)
|
||||||
|
{
|
||||||
|
layout = LAYOUT_NINTENDO_SWITCH_JOYCON_L;
|
||||||
|
}
|
||||||
|
else if (product == 0x2007)
|
||||||
|
{
|
||||||
|
layout = LAYOUT_NINTENDO_SWITCH_JOYCON_R;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
layout = LAYOUT_NINTENDO_SWITCH_PRO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (vendor == 0x2dc8) /* 8BitDo */
|
||||||
|
{
|
||||||
|
layout = LAYOUT_NINTENDO_SWITCH_PRO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* For now we assume Xbox (0x045e), Generic will be used when
|
||||||
|
* migrating to SDL_ActionSet
|
||||||
|
*/
|
||||||
|
layout = LAYOUT_XBOX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const char* BUTTONGLYPHS_get_wasd_text(void)
|
const char* BUTTONGLYPHS_get_wasd_text(void)
|
||||||
{
|
{
|
||||||
/* Returns the string to use in Welcome Aboard */
|
/* Returns the string to use in Welcome Aboard */
|
||||||
|
|
|
@ -17,6 +17,8 @@ bool BUTTONGLYPHS_keyboard_is_available(void);
|
||||||
bool BUTTONGLYPHS_keyboard_is_active(void);
|
bool BUTTONGLYPHS_keyboard_is_active(void);
|
||||||
void BUTTONGLYPHS_keyboard_set_active(bool active);
|
void BUTTONGLYPHS_keyboard_set_active(bool active);
|
||||||
|
|
||||||
|
void BUTTONGLYPHS_update_layout(Uint16 vendor, Uint16 product);
|
||||||
|
|
||||||
const char* BUTTONGLYPHS_get_wasd_text(void);
|
const char* BUTTONGLYPHS_get_wasd_text(void);
|
||||||
const char* BUTTONGLYPHS_get_button(ActionSet actionset, Action action, int binding);
|
const char* BUTTONGLYPHS_get_button(ActionSet actionset, Action action, int binding);
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,7 @@ void KeyPoll::Poll(void)
|
||||||
bool hidemouse = false;
|
bool hidemouse = false;
|
||||||
bool altpressed = false;
|
bool altpressed = false;
|
||||||
bool fullscreenkeybind = false;
|
bool fullscreenkeybind = false;
|
||||||
|
SDL_GameController *controller = NULL;
|
||||||
SDL_Event evt;
|
SDL_Event evt;
|
||||||
while (SDL_PollEvent(&evt))
|
while (SDL_PollEvent(&evt))
|
||||||
{
|
{
|
||||||
|
@ -276,6 +277,12 @@ void KeyPoll::Poll(void)
|
||||||
case SDL_CONTROLLERBUTTONDOWN:
|
case SDL_CONTROLLERBUTTONDOWN:
|
||||||
buttonmap[(SDL_GameControllerButton) evt.cbutton.button] = true;
|
buttonmap[(SDL_GameControllerButton) evt.cbutton.button] = true;
|
||||||
BUTTONGLYPHS_keyboard_set_active(false);
|
BUTTONGLYPHS_keyboard_set_active(false);
|
||||||
|
|
||||||
|
controller = controllers[evt.cbutton.which];
|
||||||
|
BUTTONGLYPHS_update_layout(
|
||||||
|
SDL_GameControllerGetVendor(controller),
|
||||||
|
SDL_GameControllerGetProduct(controller)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case SDL_CONTROLLERBUTTONUP:
|
case SDL_CONTROLLERBUTTONUP:
|
||||||
buttonmap[(SDL_GameControllerButton) evt.cbutton.button] = false;
|
buttonmap[(SDL_GameControllerButton) evt.cbutton.button] = false;
|
||||||
|
@ -309,26 +316,36 @@ void KeyPoll::Poll(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
BUTTONGLYPHS_keyboard_set_active(false);
|
BUTTONGLYPHS_keyboard_set_active(false);
|
||||||
|
|
||||||
|
controller = controllers[evt.caxis.which];
|
||||||
|
BUTTONGLYPHS_update_layout(
|
||||||
|
SDL_GameControllerGetVendor(controller),
|
||||||
|
SDL_GameControllerGetProduct(controller)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SDL_CONTROLLERDEVICEADDED:
|
case SDL_CONTROLLERDEVICEADDED:
|
||||||
{
|
{
|
||||||
SDL_GameController *toOpen = SDL_GameControllerOpen(evt.cdevice.which);
|
controller = SDL_GameControllerOpen(evt.cdevice.which);
|
||||||
vlog_info(
|
vlog_info(
|
||||||
"Opened SDL_GameController ID #%i, %s",
|
"Opened SDL_GameController ID #%i, %s",
|
||||||
evt.cdevice.which,
|
evt.cdevice.which,
|
||||||
SDL_GameControllerName(toOpen)
|
SDL_GameControllerName(controller)
|
||||||
);
|
);
|
||||||
controllers[SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(toOpen))] = toOpen;
|
controllers[SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(controller))] = controller;
|
||||||
BUTTONGLYPHS_keyboard_set_active(false);
|
BUTTONGLYPHS_keyboard_set_active(false);
|
||||||
|
BUTTONGLYPHS_update_layout(
|
||||||
|
SDL_GameControllerGetVendor(controller),
|
||||||
|
SDL_GameControllerGetProduct(controller)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SDL_CONTROLLERDEVICEREMOVED:
|
case SDL_CONTROLLERDEVICEREMOVED:
|
||||||
{
|
{
|
||||||
SDL_GameController *toClose = controllers[evt.cdevice.which];
|
controller = controllers[evt.cdevice.which];
|
||||||
controllers.erase(evt.cdevice.which);
|
controllers.erase(evt.cdevice.which);
|
||||||
vlog_info("Closing %s", SDL_GameControllerName(toClose));
|
vlog_info("Closing %s", SDL_GameControllerName(controller));
|
||||||
SDL_GameControllerClose(toClose);
|
SDL_GameControllerClose(controller);
|
||||||
if (controllers.empty())
|
if (controllers.empty())
|
||||||
{
|
{
|
||||||
BUTTONGLYPHS_keyboard_set_active(true);
|
BUTTONGLYPHS_keyboard_set_active(true);
|
||||||
|
|
Loading…
Reference in a new issue