From 0621e9c993ffb322aa3a0dd52ca5a6cfbb7aa343 Mon Sep 17 00:00:00 2001 From: Lily Rose Date: Tue, 4 Mar 2025 22:36:32 +1100 Subject: [PATCH] Add gamepad switching handling --- main.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index de4f1e5..b720f20 100644 --- a/main.c +++ b/main.c @@ -202,7 +202,14 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { SDL_GamepadDeviceEvent device_event = event->gdevice; SDL_JoystickID joystick_id = device_event.which; SDL_Log("Gamepad ID %d added", joystick_id); - state->gamepad = SDL_OpenGamepad(joystick_id); // TODO: store multiple gamepads in state + // TODO: handle multiple gamepads in state + if (state->gamepad) { + SDL_Log("Closing gamepad"); + SDL_CloseGamepad(state->gamepad); + state->gamepad = NULL; + } + SDL_Log("Opening gamepad"); + state->gamepad = SDL_OpenGamepad(joystick_id); if (!state->gamepad) { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Failed to open gamepad: %s", SDL_GetError()); } @@ -212,6 +219,11 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { SDL_GamepadDeviceEvent device_event = event->gdevice; SDL_JoystickID joystick_id = device_event.which; SDL_Log("Gamepad ID %d removed", joystick_id); + if (state->gamepad && SDL_GetGamepadID(state->gamepad) == joystick_id) { + SDL_Log("Closing gamepad"); + SDL_CloseGamepad(state->gamepad); + state->gamepad = NULL; + } break; } case SDL_EVENT_GAMEPAD_BUTTON_DOWN: {