diff options
author | StapleButter <thetotalworm@gmail.com> | 2018-12-30 00:27:12 +0100 |
---|---|---|
committer | StapleButter <thetotalworm@gmail.com> | 2018-12-30 00:27:12 +0100 |
commit | 1cf49e0dbe74007a077f3c032b28e335fccb6d75 (patch) | |
tree | ed39102b40ee0a8d2b107805bb7507ac7f8eba55 /src | |
parent | 65c27c5c288818193d7957ae3549d687ccafaec5 (diff) |
make joystick hotpluggable
Diffstat (limited to 'src')
-rw-r--r-- | src/libui_sdl/main.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/libui_sdl/main.cpp b/src/libui_sdl/main.cpp index cd350f7..9f8f678 100644 --- a/src/libui_sdl/main.cpp +++ b/src/libui_sdl/main.cpp @@ -401,7 +401,11 @@ int EmuThreadFunc(void* burp) if (Joystick) { njoybuttons = SDL_JoystickNumButtons(Joystick); - if (njoybuttons) joybuttons = new Uint8[njoybuttons]; + if (njoybuttons) + { + joybuttons = new Uint8[njoybuttons]; + memset(joybuttons, 0, sizeof(Uint8)*njoybuttons); + } } u32 nframes = 0; @@ -416,15 +420,27 @@ int EmuThreadFunc(void* burp) if (EmuRunning == 1) { EmuStatus = 1; - + + SDL_JoystickUpdate(); + + if (Joystick) + { + if (!SDL_JoystickGetAttached(Joystick)) + { + SDL_JoystickClose(Joystick); + Joystick = NULL; + } + } + if (!Joystick && (SDL_NumJoysticks() > 0)) + { + Joystick = SDL_JoystickOpen(0); + } // poll input u32 keymask = KeyInputMask; u32 joymask = 0xFFF; if (Joystick) { - SDL_JoystickUpdate(); - Uint32 hat = SDL_JoystickGetHat(Joystick, 0); Sint16 axisX = SDL_JoystickGetAxis(Joystick, 0); Sint16 axisY = SDL_JoystickGetAxis(Joystick, 1); |