From 3504f7ebd38f5223feeb1b3bdb31aee4bb5d739a Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 19 Feb 2022 16:30:23 -0800 Subject: [PATCH] Map buffered inputs to menucmd This lets buffered tapping not count as one held input. --- src/d_main.c | 8 ++++++++ src/k_menu.h | 1 + src/k_menufunc.c | 27 ++++++++++++++++++--------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index e80d38b7b..a1bc307af 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -182,6 +182,7 @@ void D_ProcessEvents(void) event_t *ev; boolean eaten; + boolean menuresponse = false; memset(deviceResponding, false, sizeof (deviceResponding)); for (; eventtail != eventhead; eventtail = (eventtail+1) & (MAXEVENTS-1)) @@ -205,6 +206,7 @@ void D_ProcessEvents(void) } // Menu input + menuresponse = true; #ifdef HAVE_THREADS I_lock_mutex(&k_menu_mutex); #endif @@ -244,6 +246,12 @@ void D_ProcessEvents(void) G_Responder(ev); } + + // Reset menu controls when no event is processed + if (!menuresponse) + { + M_MapMenuControls(NULL); + } } // diff --git a/src/k_menu.h b/src/k_menu.h index b809a2c07..650fe63b0 100644 --- a/src/k_menu.h +++ b/src/k_menu.h @@ -424,6 +424,7 @@ void Addons_option_Onchange(void); void M_SortServerList(void); +void M_MapMenuControls(event_t *ev); boolean M_Responder(event_t *ev); boolean M_MenuButtonPressed(UINT8 pid, UINT32 bt); void M_StartControlPanel(void); diff --git a/src/k_menufunc.c b/src/k_menufunc.c index 6299be4fe..89a28cc8c 100644 --- a/src/k_menufunc.c +++ b/src/k_menufunc.c @@ -828,8 +828,7 @@ boolean M_Responder(event_t *ev) menuKey = ev->data1; } - // update keys current state - G_MapEventsToControls(ev); + M_MapMenuControls(ev); // Profiles: Control mapping. // We take the WHOLE EVENT for convenience. @@ -1163,6 +1162,23 @@ static void M_UpdateMenuCMD(UINT8 i) } } +void M_MapMenuControls(event_t *ev) +{ + INT32 i; + + if (ev) + { + // update keys current state + G_MapEventsToControls(ev); + } + + // Update menu CMD + for (i = 0; i < MAXSPLITSCREENPLAYERS; i++) + { + M_UpdateMenuCMD(i); + } +} + boolean M_MenuButtonPressed(UINT8 pid, UINT32 bt) { if (menucmd[pid].buttonsHeld & bt) @@ -1326,16 +1342,9 @@ static void M_MenuTypingInput(INT32 key) static void M_HandleMenuInput(void) { void (*routine)(INT32 choice); // for some casting problem - INT32 i; UINT8 pid = 0; // todo: Add ability for any splitscreen player to bring up the menu. SINT8 lr = 0, ud = 0; - // Update menu CMD - for (i = 0; i < MAXSPLITSCREENPLAYERS; i++) - { - M_UpdateMenuCMD(i); - } - if (menuactive == false) { // We're not in the menu.