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:
48
control.cpp
48
control.cpp
@@ -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
|
||||
|
Reference in New Issue
Block a user