ref: c6a63b6286567001f80a5366648ea88265abb2ce
parent: 56383f628bfebc65f96b20fccf3abbf55c4e0925
author: Jonathan Dowland <jon+github@alcopop.org>
date: Tue Mar 21 03:03:39 EDT 2017
doom menu joystick handling cleanup Introduce two macros (JOY_BUTTON_MAPPED and JOY_BUTTON_PRESSED) to clean up the menu code that checks joystick button state and simulates keyboard key presses depending on context. Re-order the new context checks for Y/N questions so they are nested under the existing checks for use/fire button presses. This cleans up some double-presses and some undefined behaviour with the unbound button X.
--- a/src/doom/m_menu.c
+++ b/src/doom/m_menu.c
@@ -1419,34 +1419,39 @@
key = key_menu_right;
joywait = I_GetTime() + 2;
}
-
- if (ev->data1&1)
- {
- key = key_menu_forward;
- joywait = I_GetTime() + 5;
- }
- if (ev->data1&2)
- {
- key = key_menu_back;
- joywait = I_GetTime() + 5;
- }
- if (joybmenu >= 0 && (ev->data1 & (1 << joybmenu)) != 0)
+
+#define JOY_BUTTON_MAPPED(x) ((x) >= 0)
+#define JOY_BUTTON_PRESSED(x) (JOY_BUTTON_MAPPED(x) && (ev->data1 & (1 << (x))) != 0)
+
+ if (JOY_BUTTON_PRESSED(joybfire))
{
- key = key_menu_activate;
- joywait = I_GetTime() + 5;
+ // Simulate a 'Y' keypress when Doom show a Y/N dialog with Fire button.
+ if (messageToPrint && messageNeedsInput)
+ {
+ key = key_menu_confirm;
+ }
+ else
+ {
+ key = key_menu_forward;
+ }
+ joywait = I_GetTime() + 5;
}
-
- // Simulate a 'Y' keypress when Doom show a Y/N dialog with Fire button.
- if (messageToPrint && messageNeedsInput && joybmenu >= 0 && ev->data1&1)
+ if (JOY_BUTTON_PRESSED(joybuse))
{
- key = key_menu_confirm;
+ // Simulate a 'N' keypress when Doom show a Y/N dialog with Use button.
+ if (messageToPrint && messageNeedsInput)
+ {
+ key = key_menu_abort;
+ }
+ else
+ {
+ key = key_menu_back;
+ }
joywait = I_GetTime() + 5;
}
-
- // Simulate a 'N' keypress when Doom show a Y/N dialog with Use button.
- if (messageToPrint && messageNeedsInput && joybmenu >= 0 && ev->data1&2)
+ if (JOY_BUTTON_PRESSED(joybmenu))
{
- key = key_menu_abort;
+ key = key_menu_activate;
joywait = I_GetTime() + 5;
}
}