mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-13 13:21:31 +00:00
modifier key status made globally accessible
now also properly handles L/R simultaneous presses
This commit is contained in:
parent
8107765677
commit
c277125fe7
5 changed files with 41 additions and 42 deletions
|
@ -619,9 +619,7 @@ void CON_Ticker(void)
|
||||||
//
|
//
|
||||||
boolean CON_Responder(event_t *ev)
|
boolean CON_Responder(event_t *ev)
|
||||||
{
|
{
|
||||||
static boolean consdown;
|
static UINT8 consdown = false; // console is treated differently due to rare usage
|
||||||
static boolean shiftdown;
|
|
||||||
static boolean ctrldown;
|
|
||||||
|
|
||||||
// sequential completions a la 4dos
|
// sequential completions a la 4dos
|
||||||
static char completion[80];
|
static char completion[80];
|
||||||
|
@ -636,13 +634,8 @@ boolean CON_Responder(event_t *ev)
|
||||||
// let go keyup events, don't eat them
|
// let go keyup events, don't eat them
|
||||||
if (ev->type != ev_keydown && ev->type != ev_console)
|
if (ev->type != ev_keydown && ev->type != ev_console)
|
||||||
{
|
{
|
||||||
if (ev->data1 == KEY_LSHIFT || ev->data1 == KEY_RSHIFT)
|
if (ev->data1 == gamecontrol[gc_console][0] || ev->data1 == gamecontrol[gc_console][1])
|
||||||
shiftdown = false;
|
|
||||||
else if (ev->data1 == KEY_LCTRL || ev->data1 == KEY_RCTRL)
|
|
||||||
ctrldown = false;
|
|
||||||
else if (ev->data1 == gamecontrol[gc_console][0] || ev->data1 == gamecontrol[gc_console][1])
|
|
||||||
consdown = false;
|
consdown = false;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -684,20 +677,6 @@ boolean CON_Responder(event_t *ev)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// eat shift only if console active
|
|
||||||
if (key == KEY_LSHIFT || key == KEY_RSHIFT)
|
|
||||||
{
|
|
||||||
shiftdown = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// same for ctrl
|
|
||||||
if (key == KEY_LCTRL || key == KEY_RCTRL)
|
|
||||||
{
|
|
||||||
ctrldown = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// command completion forward (tab) and backward (shift-tab)
|
// command completion forward (tab) and backward (shift-tab)
|
||||||
if (key == KEY_TAB)
|
if (key == KEY_TAB)
|
||||||
{
|
{
|
||||||
|
|
36
src/d_main.c
36
src/d_main.c
|
@ -73,6 +73,7 @@ int snprintf(char *str, size_t n, const char *fmt, ...);
|
||||||
#include "dehacked.h" // Dehacked list test
|
#include "dehacked.h" // Dehacked list test
|
||||||
#include "m_cond.h" // condition initialization
|
#include "m_cond.h" // condition initialization
|
||||||
#include "fastcmp.h"
|
#include "fastcmp.h"
|
||||||
|
#include "keys.h"
|
||||||
|
|
||||||
#ifdef CMAKECONFIG
|
#ifdef CMAKECONFIG
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -176,6 +177,38 @@ void D_PostEvent(const event_t *ev)
|
||||||
void D_PostEvent_end(void) {};
|
void D_PostEvent_end(void) {};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// modifier keys
|
||||||
|
UINT8 shiftdown = 0; // 0x1 left, 0x2 right
|
||||||
|
UINT8 ctrldown = 0; // 0x1 left, 0x2 right
|
||||||
|
UINT8 altdown = 0; // 0x1 left, 0x2 right
|
||||||
|
//
|
||||||
|
// D_ModifierKeyResponder
|
||||||
|
// Sets global shift/ctrl/alt variables, never actually eats events
|
||||||
|
//
|
||||||
|
static inline void D_ModifierKeyResponder(event_t *ev)
|
||||||
|
{
|
||||||
|
if (ev->type == ev_keydown) switch (ev->data1)
|
||||||
|
{
|
||||||
|
case KEY_LSHIFT: shiftdown |= 0x1; return;
|
||||||
|
case KEY_RSHIFT: shiftdown |= 0x2; return;
|
||||||
|
case KEY_LCTRL: ctrldown |= 0x1; return;
|
||||||
|
case KEY_RCTRL: ctrldown |= 0x2; return;
|
||||||
|
case KEY_LALT: altdown |= 0x1; return;
|
||||||
|
case KEY_RALT: altdown |= 0x2; return;
|
||||||
|
default: return;
|
||||||
|
}
|
||||||
|
else if (ev->type == ev_keyup) switch (ev->data1)
|
||||||
|
{
|
||||||
|
case KEY_LSHIFT: shiftdown &= ~0x1; return;
|
||||||
|
case KEY_RSHIFT: shiftdown &= ~0x2; return;
|
||||||
|
case KEY_LCTRL: ctrldown &= ~0x1; return;
|
||||||
|
case KEY_RCTRL: ctrldown &= ~0x2; return;
|
||||||
|
case KEY_LALT: altdown &= ~0x1; return;
|
||||||
|
case KEY_RALT: altdown &= ~0x2; return;
|
||||||
|
default: return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// D_ProcessEvents
|
// D_ProcessEvents
|
||||||
// Send all the events of the given timestamp down the responder chain
|
// Send all the events of the given timestamp down the responder chain
|
||||||
|
@ -188,6 +221,9 @@ void D_ProcessEvents(void)
|
||||||
{
|
{
|
||||||
ev = &events[eventtail];
|
ev = &events[eventtail];
|
||||||
|
|
||||||
|
// Set global shift/ctrl/alt down variables
|
||||||
|
D_ModifierKeyResponder(ev); // never eats events
|
||||||
|
|
||||||
// Screenshots over everything so that they can be taken anywhere.
|
// Screenshots over everything so that they can be taken anywhere.
|
||||||
if (M_ScreenshotResponder(ev))
|
if (M_ScreenshotResponder(ev))
|
||||||
continue; // ate the event
|
continue; // ate the event
|
||||||
|
|
|
@ -394,6 +394,9 @@ extern INT32 cv_debug;
|
||||||
// Misc stuff for later...
|
// Misc stuff for later...
|
||||||
// =======================
|
// =======================
|
||||||
|
|
||||||
|
// Modifier key variables, accessible anywhere
|
||||||
|
extern UINT8 shiftdown, ctrldown, altdown;
|
||||||
|
|
||||||
// if we ever make our alloc stuff...
|
// if we ever make our alloc stuff...
|
||||||
#define ZZ_Alloc(x) Z_Malloc(x, PU_STATIC, NULL)
|
#define ZZ_Alloc(x) Z_Malloc(x, PU_STATIC, NULL)
|
||||||
|
|
||||||
|
|
|
@ -757,15 +757,8 @@ void HU_clearChatChars(void)
|
||||||
//
|
//
|
||||||
boolean HU_Responder(event_t *ev)
|
boolean HU_Responder(event_t *ev)
|
||||||
{
|
{
|
||||||
static boolean shiftdown = false;
|
|
||||||
UINT8 c;
|
UINT8 c;
|
||||||
|
|
||||||
if (ev->data1 == KEY_LSHIFT || ev->data1 == KEY_RSHIFT)
|
|
||||||
{
|
|
||||||
shiftdown = (ev->type == ev_keydown);
|
|
||||||
return chat_on;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ev->type != ev_keydown)
|
if (ev->type != ev_keydown)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
12
src/m_menu.c
12
src/m_menu.c
|
@ -182,9 +182,6 @@ static INT32 vidm_selected = 0;
|
||||||
static INT32 vidm_nummodes;
|
static INT32 vidm_nummodes;
|
||||||
static INT32 vidm_column_size;
|
static INT32 vidm_column_size;
|
||||||
|
|
||||||
// what a headache.
|
|
||||||
static boolean shiftdown = false;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// PROTOTYPES
|
// PROTOTYPES
|
||||||
//
|
//
|
||||||
|
@ -2080,11 +2077,6 @@ boolean M_Responder(event_t *ev)
|
||||||
|| gamestate == GS_CREDITS || gamestate == GS_EVALUATION)
|
|| gamestate == GS_CREDITS || gamestate == GS_EVALUATION)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (ev->type == ev_keyup && (ev->data1 == KEY_LSHIFT || ev->data1 == KEY_RSHIFT))
|
|
||||||
{
|
|
||||||
shiftdown = false;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (noFurtherInput)
|
if (noFurtherInput)
|
||||||
{
|
{
|
||||||
// Ignore input after enter/escape/other buttons
|
// Ignore input after enter/escape/other buttons
|
||||||
|
@ -2098,10 +2090,6 @@ boolean M_Responder(event_t *ev)
|
||||||
// added 5-2-98 remap virtual keys (mouse & joystick buttons)
|
// added 5-2-98 remap virtual keys (mouse & joystick buttons)
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
case KEY_LSHIFT:
|
|
||||||
case KEY_RSHIFT:
|
|
||||||
shiftdown = true;
|
|
||||||
break; //return false;
|
|
||||||
case KEY_MOUSE1:
|
case KEY_MOUSE1:
|
||||||
case KEY_JOY1:
|
case KEY_JOY1:
|
||||||
case KEY_JOY1 + 2:
|
case KEY_JOY1 + 2:
|
||||||
|
|
Loading…
Reference in a new issue