1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-09-04 11:37:55 +00:00

faster joystick intiialization

This commit is contained in:
Zeno Rogue
2024-05-28 11:59:03 +02:00
parent 6bf198946c
commit 5901d9598d
3 changed files with 56 additions and 10 deletions

View File

@@ -212,16 +212,30 @@ EX void mousemovement() {
EX SDL_Joystick* sticks[8];
EX int numsticks;
EX void initJoysticks() {
EX bool joysticks_initialized;
if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1)
{
printf("Failed to initialize joysticks.\n");
numsticks = 0;
return;
#if HDR
enum eJoystickInit { jiNoJoystick, jiFast, jiWait };
#endif
EX eJoystickInit joy_init = jiFast;
#if CAP_THREAD
EX std::thread *joythread;
std::atomic<bool> joystick_done(false);
#endif
EX void initJoysticks_async() {
if(joy_init == jiNoJoystick) return;
#if CAP_THREAD
if(joy_init == jiWait) { initJoysticks(); return; }
joythread = new std::thread([] { initJoysticks(); joystick_done = true; });
#else
initJoysticks();
#endif
}
DEBB(DF_INIT, ("init joysticks"));
EX void countJoysticks() {
DEBB(DF_INIT, ("opening joysticks"));
numsticks = SDL_NumJoysticks();
if(numsticks > 8) numsticks = 8;
for(int i=0; i<numsticks; i++) {
@@ -235,6 +249,22 @@ EX void initJoysticks() {
}
}
EX void initJoysticks() {
DEBBI(DF_INIT, ("init joystick"));
DEBB(DF_INIT, ("init joystick subsystem"));
if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1)
{
printf("Failed to initialize joysticks.\n");
numsticks = 0;
return;
}
countJoysticks();
joysticks_initialized = true;
}
EX void closeJoysticks() {
DEBB(DF_INIT, ("close joysticks"));
for(int i=0; i<numsticks; i++) {
@@ -1000,6 +1030,7 @@ EX void mainloopiter() {
fix_mouseh();
#if CAP_SDLJOY
if(joydir.d != -1) checkjoy();
if(joystick_done && joythread) { joythread->join(); delete joythread; joystick_done = false; }
#endif
}
@@ -1015,8 +1046,7 @@ EX void handle_event(SDL_Event& ev) {
/* if(ev.type == SDL_JOYDEVICEADDED || ev.type == SDL_JOYDEVICEREMOVED) {
joyx = joyy = 0;
panjoyx = panjoyy = 0;
closeJoysticks();
initJoysticks();
countJoysticks();
} */
#if CAP_SDL2