Fix SDL_GAMECONTROLLER handling

1. Do not disable SDL_JOYSTICK events. Disabling these events causes
   game controller events to be disabled as well. Instead, filter these events out.

2. Fix button mapping (it was off by one).
This commit is contained in:
Gleb Mazovetskiy 2020-12-28 09:46:27 +00:00 committed by Alibek Omarov
parent a92b310e0e
commit 5a36a26dd1
2 changed files with 9 additions and 6 deletions

View File

@ -390,20 +390,24 @@ static void SDLash_EventFilter( SDL_Event *event )
/* Joystick events */
case SDL_JOYAXISMOTION:
Joy_AxisMotionEvent( event->jaxis.axis, event->jaxis.value );
if ( SDL_GameControllerFromInstanceID( event->jaxis.which ) == NULL )
Joy_AxisMotionEvent( event->jaxis.axis, event->jaxis.value );
break;
case SDL_JOYBALLMOTION:
Joy_BallMotionEvent( event->jball.ball, event->jball.xrel, event->jball.yrel );
if ( SDL_GameControllerFromInstanceID( event->jball.which ) == NULL )
Joy_BallMotionEvent( event->jball.ball, event->jball.xrel, event->jball.yrel );
break;
case SDL_JOYHATMOTION:
Joy_HatMotionEvent( event->jhat.hat, event->jhat.value );
if ( SDL_GameControllerFromInstanceID( event->jhat.which ) == NULL )
Joy_HatMotionEvent( event->jhat.hat, event->jhat.value );
break;
case SDL_JOYBUTTONDOWN:
case SDL_JOYBUTTONUP:
Joy_ButtonEvent( event->jbutton.button, event->jbutton.state );
if ( SDL_GameControllerFromInstanceID( event->jbutton.which ) == NULL )
Joy_ButtonEvent( event->jbutton.button, event->jbutton.state );
break;
case SDL_QUIT:
@ -514,7 +518,7 @@ static void SDLash_EventFilter( SDL_Event *event )
// TODO: Use joyinput funcs, for future multiple gamepads support
if( Joy_IsActive() )
Key_Event( sdlControllerButtonToEngine[event->cbutton.button], event->cbutton.state );
Key_Event( sdlControllerButtonToEngine[event->cbutton.button + 1], event->cbutton.state );
break;
}

View File

@ -260,7 +260,6 @@ static int SDLash_JoyInit_New( int numjoy )
SDL_GameControllerGetProductVersion( gamecontroller ));
#endif // SDL_VERSION_ATLEAST( 2, 0, 6 )
SDL_GameControllerEventState( SDL_ENABLE );
SDL_JoystickEventState( SDL_DISABLE );
return num;
}