Merge branch 'joystick-juggling' into 'master'

Joystick juggling

See merge request STJr/SRB2!355
This commit is contained in:
Digiku 2018-12-04 11:51:55 -05:00
commit 631f6ed406
3 changed files with 78 additions and 19 deletions

View file

@ -54,6 +54,8 @@
#include "st_stuff.h" #include "st_stuff.h"
#include "i_sound.h" #include "i_sound.h"
#include "i_joy.h" // for joystick menu controls
// Condition Sets // Condition Sets
#include "m_cond.h" #include "m_cond.h"
@ -2065,6 +2067,7 @@ boolean M_Responder(event_t *ev)
INT32 ch = -1; INT32 ch = -1;
// INT32 i; // INT32 i;
static tic_t joywait = 0, mousewait = 0; static tic_t joywait = 0, mousewait = 0;
static INT32 pjoyx = 0, pjoyy = 0;
static INT32 pmousex = 0, pmousey = 0; static INT32 pmousex = 0, pmousey = 0;
static INT32 lastx = 0, lasty = 0; static INT32 lastx = 0, lasty = 0;
void (*routine)(INT32 choice); // for some casting problem void (*routine)(INT32 choice); // for some casting problem
@ -2117,26 +2120,45 @@ boolean M_Responder(event_t *ev)
{ {
if (ev->type == ev_joystick && ev->data1 == 0 && joywait < I_GetTime()) if (ev->type == ev_joystick && ev->data1 == 0 && joywait < I_GetTime())
{ {
if (ev->data3 == -1) const INT32 jdeadzone = JOYAXISRANGE/4;
if (ev->data3 != INT32_MAX)
{ {
ch = KEY_UPARROW; if (Joystick.bGamepadStyle || abs(ev->data3) > jdeadzone)
joywait = I_GetTime() + NEWTICRATE/7; {
} if (ev->data3 < 0 && pjoyy >= 0)
else if (ev->data3 == 1) {
{ ch = KEY_UPARROW;
ch = KEY_DOWNARROW; joywait = I_GetTime() + NEWTICRATE/7;
joywait = I_GetTime() + NEWTICRATE/7; }
else if (ev->data3 > 0 && pjoyy <= 0)
{
ch = KEY_DOWNARROW;
joywait = I_GetTime() + NEWTICRATE/7;
}
pjoyy = ev->data3;
}
else
pjoyy = 0;
} }
if (ev->data2 == -1) if (ev->data2 != INT32_MAX)
{ {
ch = KEY_LEFTARROW; if (Joystick.bGamepadStyle || abs(ev->data2) > jdeadzone)
joywait = I_GetTime() + NEWTICRATE/17; {
} if (ev->data2 < 0 && pjoyx >= 0)
else if (ev->data2 == 1) {
{ ch = KEY_LEFTARROW;
ch = KEY_RIGHTARROW; joywait = I_GetTime() + NEWTICRATE/17;
joywait = I_GetTime() + NEWTICRATE/17; }
else if (ev->data2 > 0 && pjoyx <= 0)
{
ch = KEY_RIGHTARROW;
joywait = I_GetTime() + NEWTICRATE/17;
}
pjoyx = ev->data2;
}
else
pjoyx = 0;
} }
} }
else if (ev->type == ev_mouse && mousewait < I_GetTime()) else if (ev->type == ev_mouse && mousewait < I_GetTime())

View file

@ -894,8 +894,8 @@ void I_GetJoystickEvents(void)
UINT64 joyhats = 0; UINT64 joyhats = 0;
#if 0 #if 0
UINT64 joybuttons = 0; UINT64 joybuttons = 0;
#endif
Sint16 axisx, axisy; Sint16 axisx, axisy;
#endif
if (!joystick_started) return; if (!joystick_started) return;
@ -963,6 +963,7 @@ void I_GetJoystickEvents(void)
} }
} }
#if 0
// send joystick axis positions // send joystick axis positions
event.type = ev_joystick; event.type = ev_joystick;
@ -1013,6 +1014,7 @@ void I_GetJoystickEvents(void)
} }
D_PostEvent(&event); D_PostEvent(&event);
} }
#endif
} }
/** \brief Open joystick handle /** \brief Open joystick handle
@ -1176,8 +1178,8 @@ void I_GetJoystick2Events(void)
UINT64 joyhats = 0; UINT64 joyhats = 0;
#if 0 #if 0
INT64 joybuttons = 0; INT64 joybuttons = 0;
#endif
INT32 axisx, axisy; INT32 axisx, axisy;
#endif
if (!joystick2_started) if (!joystick2_started)
return; return;
@ -1247,6 +1249,7 @@ void I_GetJoystick2Events(void)
} }
} }
#if 0
// send joystick axis positions // send joystick axis positions
event.type = ev_joystick2; event.type = ev_joystick2;
@ -1297,7 +1300,7 @@ void I_GetJoystick2Events(void)
} }
D_PostEvent(&event); D_PostEvent(&event);
} }
#endif
} }
/** \brief Open joystick handle /** \brief Open joystick handle

View file

@ -767,6 +767,33 @@ static void Impl_HandleJoystickAxisEvent(SDL_JoyAxisEvent evt)
D_PostEvent(&event); D_PostEvent(&event);
} }
#if 0
static void Impl_HandleJoystickHatEvent(SDL_JoyHatEvent evt)
{
event_t event;
SDL_JoystickID joyid[2];
// Determine the Joystick IDs for each current open joystick
joyid[0] = SDL_JoystickInstanceID(JoyInfo.dev);
joyid[1] = SDL_JoystickInstanceID(JoyInfo2.dev);
if (evt.hat >= JOYHATS)
return; // ignore hats with too high an index
if (evt.which == joyid[0])
{
event.data1 = KEY_HAT1 + (evt.hat*4);
}
else if (evt.which == joyid[1])
{
event.data1 = KEY_2HAT1 + (evt.hat*4);
}
else return;
// NOTE: UNFINISHED
}
#endif
static void Impl_HandleJoystickButtonEvent(SDL_JoyButtonEvent evt, Uint32 type) static void Impl_HandleJoystickButtonEvent(SDL_JoyButtonEvent evt, Uint32 type)
{ {
event_t event; event_t event;
@ -804,6 +831,8 @@ static void Impl_HandleJoystickButtonEvent(SDL_JoyButtonEvent evt, Uint32 type)
if (event.type != ev_console) D_PostEvent(&event); if (event.type != ev_console) D_PostEvent(&event);
} }
void I_GetEvent(void) void I_GetEvent(void)
{ {
SDL_Event evt; SDL_Event evt;
@ -844,6 +873,11 @@ void I_GetEvent(void)
case SDL_JOYAXISMOTION: case SDL_JOYAXISMOTION:
Impl_HandleJoystickAxisEvent(evt.jaxis); Impl_HandleJoystickAxisEvent(evt.jaxis);
break; break;
#if 0
case SDL_JOYHATMOTION:
Impl_HandleJoystickHatEvent(evt.jhat)
break;
#endif
case SDL_JOYBUTTONUP: case SDL_JOYBUTTONUP:
case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONDOWN:
Impl_HandleJoystickButtonEvent(evt.jbutton, evt.type); Impl_HandleJoystickButtonEvent(evt.jbutton, evt.type);