sdl2: restore joystick code

remarkably it still works even though the API has changed.
This commit is contained in:
Ronald Kinard 2014-04-06 21:43:40 -05:00
parent 6ea03a23b4
commit 080f8e4008
2 changed files with 64 additions and 14 deletions

View file

@ -994,10 +994,8 @@ void I_GetJoystickEvents(void)
static event_t event = {0,0,0,0}; static event_t event = {0,0,0,0};
INT32 i = 0; INT32 i = 0;
UINT64 joyhats = 0; UINT64 joyhats = 0;
#if 0
UINT64 joybuttons = 0; UINT64 joybuttons = 0;
Sint16 axisx, axisy; Sint16 axisx, axisy;
#endif
if (!joystick_started) return; if (!joystick_started) return;
@ -1070,7 +1068,6 @@ void I_GetJoystickEvents(void)
} }
} }
#if 0
// send joystick axis positions // send joystick axis positions
event.type = ev_joystick; event.type = ev_joystick;
@ -1123,7 +1120,6 @@ void I_GetJoystickEvents(void)
} }
D_PostEvent(&event); D_PostEvent(&event);
} }
#endif
} }
/** \brief Open joystick handle /** \brief Open joystick handle
@ -1136,8 +1132,6 @@ void I_GetJoystickEvents(void)
*/ */
static int joy_open(const char *fname) static int joy_open(const char *fname)
{ {
return -1; // TODO SDL2 joystick overhaul
#if 0
int joyindex = atoi(fname); int joyindex = atoi(fname);
int num_joy = 0; int num_joy = 0;
int i; int i;
@ -1225,7 +1219,6 @@ static int joy_open(const char *fname)
return JoyInfo.axises; return JoyInfo.axises;
} }
#endif
} }
//Joystick2 //Joystick2
@ -1291,10 +1284,8 @@ void I_GetJoystick2Events(void)
static event_t event = {0,0,0,0}; static event_t event = {0,0,0,0};
INT32 i = 0; INT32 i = 0;
UINT64 joyhats = 0; UINT64 joyhats = 0;
#if 0
INT64 joybuttons = 0; INT64 joybuttons = 0;
INT32 axisx, axisy; INT32 axisx, axisy;
#endif
if (!joystick2_started) if (!joystick2_started)
return; return;
@ -1364,7 +1355,6 @@ void I_GetJoystick2Events(void)
} }
} }
#if 0
// send joystick axis positions // send joystick axis positions
event.type = ev_joystick2; event.type = ev_joystick2;
@ -1419,7 +1409,6 @@ void I_GetJoystick2Events(void)
} }
D_PostEvent(&event); D_PostEvent(&event);
} }
#endif
} }
@ -1433,8 +1422,6 @@ void I_GetJoystick2Events(void)
*/ */
static int joy_open2(const char *fname) static int joy_open2(const char *fname)
{ {
return -1; // TODO SDL2 joystick overhaul
#if 0
int joyindex = atoi(fname); int joyindex = atoi(fname);
int num_joy = 0; int num_joy = 0;
int i; int i;
@ -1520,7 +1507,6 @@ static int joy_open2(const char *fname)
return JoyInfo2.axises; return JoyInfo2.axises;
} }
#endif
} }
// //

View file

@ -918,6 +918,63 @@ static void Impl_HandleMouseWheelEvent(SDL_MouseWheelEvent evt)
} }
} }
static void Impl_HandleJoystickAxisEvent(SDL_JoyAxisEvent evt)
{
event_t event;
evt.which++;
evt.axis++;
event.data1 = event.data2 = event.data3 = INT32_MAX;
if (cv_usejoystick.value == evt.which)
{
event.type = ev_joystick;
}
else if (cv_usejoystick.value == evt.which)
{
event.type = ev_joystick2;
}
else return;
//axis
if (evt.axis > JOYAXISSET*2)
return;
//vaule
if (evt.axis%2)
{
event.data1 = evt.axis / 2;
event.data2 = SDLJoyAxis(evt.value, event.type);
}
else
{
evt.axis--;
event.data1 = evt.axis / 2;
event.data3 = SDLJoyAxis(evt.value, event.type);
}
D_PostEvent(&event);
}
static void Impl_HandleJoystickButtonEvent(SDL_JoyButtonEvent evt, Uint32 type)
{
event_t event;
evt.which++;
if (cv_usejoystick.value == evt.which)
event.data1 = KEY_JOY1;
else if (cv_usejoystick.value == evt.which)
event.data1 = KEY_2JOY1;
else return;
if (type == SDL_JOYBUTTONUP)
event.type = ev_keyup;
else if (type == SDL_JOYBUTTONDOWN)
event.type = ev_keydown;
else return;
if (evt.button < JOYBUTTONS)
event.data1 += evt.button;
else
return;
SDLJoyRemap(&event);
if (event.type != ev_console) D_PostEvent(&event);
}
void I_GetEvent(void) void I_GetEvent(void)
{ {
SDL_Event evt; SDL_Event evt;
@ -948,6 +1005,13 @@ void I_GetEvent(void)
case SDL_MOUSEWHEEL: case SDL_MOUSEWHEEL:
Impl_HandleMouseWheelEvent(evt.wheel); Impl_HandleMouseWheelEvent(evt.wheel);
break; break;
case SDL_JOYAXISMOTION:
Impl_HandleJoystickAxisEvent(evt.jaxis);
break;
case SDL_JOYBUTTONUP:
case SDL_JOYBUTTONDOWN:
Impl_HandleJoystickButtonEvent(evt.jbutton, evt.type);
break;
case SDL_QUIT: case SDL_QUIT:
I_Quit(); I_Quit();
M_QuitResponse('y'); M_QuitResponse('y');