make stick keyrepeat speed based on tilt

hat keyrepeat still is non-existent
This commit is contained in:
minenice55 2026-02-15 22:32:47 -05:00
parent 0a6e66ae12
commit f770b5c8f5

View file

@ -1327,7 +1327,7 @@ static INT32 RemapGamepadButton(event_t *ev)
{ gc_aimbackward, KEY_DOWNARROW }, { gc_aimbackward, KEY_DOWNARROW },
{ gc_turnleft, KEY_LEFTARROW }, { gc_turnleft, KEY_LEFTARROW },
{ gc_turnright, KEY_RIGHTARROW }, { gc_turnright, KEY_RIGHTARROW },
{ gc_horncode, KEY_TAB }, { gc_lookback, KEY_TAB },
}; };
for (size_t r = 0; r < sizeof(joyremap)/sizeof(*joyremap); r++) for (size_t r = 0; r < sizeof(joyremap)/sizeof(*joyremap); r++)
@ -1364,7 +1364,7 @@ static INT32 RemapGamepadButton(event_t *ev)
boolean M_Responder(event_t *ev) boolean M_Responder(event_t *ev)
{ {
INT32 ch = -1; INT32 ch = -1;
static tic_t joywait = 0, mousewait = 0; static tic_t mousewait = 0, joyxwait = 0, joyywait = 0;
static INT32 pjoyx = 0, pjoyy = 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;
@ -1407,46 +1407,66 @@ boolean M_Responder(event_t *ev)
} }
else if (menustack[0]) else if (menustack[0])
{ {
if (ev->type == ev_joystick && deviceplayer == 0 && joywait < I_GetTime()) if (ev->type == ev_joystick && deviceplayer == 0)
{ {
if (ev->data1 == 1) fixed_t rate = 0;
UINT32 repeat = 0;
if ((ev->data1 == 1))
{ {
if (abs(ev->data2) > (JOYAXISRANGE/4)) pjoyy = (abs(ev->data2) > JOYAXISRANGE/4) ? ev->data2 : 0;
}
else
{
pjoyx = (abs(ev->data2) > JOYAXISRANGE/4) ? ev->data2 : 0;
}
if (pjoyx == 0 && pjoyy == 0)
{
joyywait = 0;
}
else if (abs(pjoyy) > abs(pjoyx))
{
rate = FixedDiv(abs(pjoyy), JOYAXISRANGE);
repeat = (FixedMul(2*FRACUNIT, rate) + FixedMul(FRACUNIT - rate, (NEWTICRATE/2)*FRACUNIT))/FRACUNIT;
if (pjoyy > 0)
{ {
if (ev->data2 > 0 && pjoyy <= 0) if (joyywait < I_GetTime())
{ {
ch = KEY_DOWNARROW; ch = KEY_DOWNARROW;
joywait = I_GetTime() + NEWTICRATE/10; joyywait = I_GetTime() + repeat;
} }
else if (ev->data2 < 0 && pjoyy >= 0) }
else if (pjoyy < 0)
{
if (joyywait < I_GetTime())
{ {
ch = KEY_UPARROW; ch = KEY_UPARROW;
joywait = I_GetTime() + NEWTICRATE/10; joyywait = I_GetTime() + repeat;
} }
} }
else
{
pjoyy = 0;
}
} }
else if (ev->data1 == 0) else
{ {
if (abs(ev->data2) > (JOYAXISRANGE/4)) rate = FixedDiv(abs(pjoyx), JOYAXISRANGE);
repeat = (FixedMul(2*FRACUNIT, rate) + FixedMul(FRACUNIT - rate, (NEWTICRATE/2)*FRACUNIT))/FRACUNIT;
if (pjoyx > 0)
{ {
if (ev->data2 > 0 && pjoyx <= 0) if (joyxwait < I_GetTime())
{ {
ch = KEY_RIGHTARROW; ch = KEY_RIGHTARROW;
joywait = I_GetTime() + NEWTICRATE/10; joyxwait = I_GetTime() + repeat;
}
else if (ev->data2 < 0 && pjoyx >= 0)
{
ch = KEY_LEFTARROW;
joywait = I_GetTime() + NEWTICRATE/10;
} }
} }
else else if (pjoyx < 0)
{ {
pjoyx = 0; if (joyxwait < I_GetTime())
{
ch = KEY_LEFTARROW;
joyxwait = I_GetTime() + repeat;
}
} }
} }
} }