c++ - SDL is sending a wrong controller index -


i'm creating simple game , i'm using sdl2 handling inputs controllers. issue sdl not giving me correct index controller causes game crash.

/receive controller index given sdl int cidx = evt.cdevice.which;  switch (evt.type) {     case sdl_controlleraxismotion:     {         //.........         break;     }     case sdl_controllerbuttonup:     {          inputbutton sender = inputbutton(evt.cbutton.button);          controllerstates[cidx]->setbuttonstate(sender, false);         break;     }     case sdl_controllerbuttondown:     {         if (evt.cbutton.button != sdl_controller_button_invalid)         {             inputbutton sender = inputbutton(evt.cbutton.button);              controllerstates[cidx]->setbuttonstate(sender, true);         }         break;     }     case sdl_controllerdeviceadded:     {         if (sdl_isgamecontroller(cidx))         {             sdl_gamecontroller * controller = sdl_gamecontrolleropen(cidx);              addcontroller(controller);         }         break;     }     case sdl_controllerdeviceremoved:     {         removecontroller(controllers[(cidx)]);         break;     } 

}

this works fine when user add controller first time, sdl sending me 0 index in sdl_controllerdeviceadded event , 0 other events. problem if user tries disconnect , reconnect controller sdl send 0 index in sdl_controllerdeviceadded event , 1 other events causes game crash.

i can make simple check if index avoid crash useless since controller events ignored.

any appreciated.

thanks

according sdl documentation, index used on sdl_gamecontrolleropen not index identify controller in future events. need use joystick id instead.

    switch (evt.type)     {         case sdl_controlleraxismotion:         {             //...             break;         }         case sdl_controllerbuttonup:         {             //get joystick id controller index              //....             break;         }         case sdl_controllerbuttondown:         {             //get joystick id controller index              //....             break;         }         case sdl_controllerdeviceadded:         {             if (sdl_isgamecontroller(cidx))             {                 sdl_gamecontroller * controller = sdl_gamecontrolleropen(cidx);                 sdl_joystick* j      = sdl_gamecontrollergetjoystick(controller);                 sdl_joystickid joyid = sdl_joystickinstanceid(j);                  //save joystick id used in future events                 addcontroller(controller);             }             break;         }         case sdl_controllerdeviceremoved:         {              //get joystick id controller index               break;         }    } 

Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

css - Make div keyboard-scrollable in jQuery Mobile? -

android - Keyboard hides my half of edit-text and button below it even in scroll view -