From ccfef821b01b9e43a661b3880ab0c065097a03b3 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sun, 24 Dec 2023 02:58:11 +0100 Subject: [PATCH] InputSystem: fixup enumerants and controller structs Enumerants: * ButtonCode_t::JOYSTICK_MAX_BUTTON_COUNT = 32 (previously 26, incorrect...). * AnalogCode_t::JOYSTICK_FIRST_AXIS = 2 (previously 4, incorrect...). * Added: ButtonCode_t::KEY_CREDITSIGN (k104, last key). * Fixed up Xbox controller enums. Structs xdevice_t: * Added partially reversed unkownhiddevice_t structure (used for non-xbox hardware). General: * Added static assertions for structure sizes. --- src/common/xbox/xboxstubs.h | 3 ++ src/inputsystem/inputsystem.h | 37 ++++++++++++++---- src/public/inputsystem/AnalogCode.h | 4 +- src/public/inputsystem/ButtonCode.h | 59 +++++++++++++++++------------ 4 files changed, 67 insertions(+), 36 deletions(-) diff --git a/src/common/xbox/xboxstubs.h b/src/common/xbox/xboxstubs.h index cfef77cf..c86f5ab6 100644 --- a/src/common/xbox/xboxstubs.h +++ b/src/common/xbox/xboxstubs.h @@ -43,6 +43,9 @@ typedef enum XK_STICK2_LEFT, XK_STICK2_RIGHT, + XK_UP_DOWN, + XK_LEFT_RIGHT, + XK_MAX_KEYS, } xKey_t; diff --git a/src/inputsystem/inputsystem.h b/src/inputsystem/inputsystem.h index a24a4c70..dd266b07 100644 --- a/src/inputsystem/inputsystem.h +++ b/src/inputsystem/inputsystem.h @@ -19,6 +19,8 @@ private: INPUT_STATE_CURRENT, INPUT_STATE_COUNT, + + BUTTON_EVENT_COUNT = 128 }; struct xdevice_t @@ -31,20 +33,38 @@ private: float rightTriggerMotor; }; + struct unkownhiddevice_t + { + struct state_t + { + SRWLOCK lock; + char unk0[56]; + xvibration_t vibration; + char unk1[48]; + }; + + // Name might be incorrect! + state_t states[INPUT_STATE_COUNT]; + HANDLE hThread0; + HANDLE hthread1; + }; + int userId; char active; XINPUT_STATE states[INPUT_STATE_COUNT]; int newState; - _BYTE gap6[20]; + xKey_t lastStickKeys[MAX_JOYSTICK_AXES-2]; // -2 as U and V aren't polled. + int unk0; bool pendingRumbleUpdate; _BYTE gap41[3]; xvibration_t vibration; - bool bUnk0; - char field_55; + bool isXbox360Gamepad; + bool nonXboxDevice; // uses unknownHidDevice when set _BYTE gap56[42]; - int field_80; - _BYTE gap84[316]; + unkownhiddevice_t unknownHidDevice; + _BYTE gap190[42]; }; + static_assert(sizeof(xdevice_t) == 0x1C0); struct appKey_t { @@ -56,7 +76,7 @@ private: { // Analog states CBitVec m_ButtonState; - int m_pAnalogValue[JOYSTICK_MAX_BUTTON_COUNT]; + int m_pAnalogValue[ANALOG_CODE_LAST]; }; @@ -90,7 +110,7 @@ private: int m_AnalogEventTypes[JOYSTICK_AXIS_BUTTON_COUNT]; // Button events - InputEvent_t m_Events[128]; + InputEvent_t m_Events[BUTTON_EVENT_COUNT]; InputEvent_t m_CurrentEvent; DWORD m_StartupTimeTick; @@ -104,7 +124,7 @@ private: // Xbox controller info int m_nJoystickCount; - appKey_t m_appXKeys[XUSER_MAX_COUNT][XK_MAX_KEYS+2]; + appKey_t m_appXKeys[XUSER_MAX_COUNT][XK_MAX_KEYS]; char pad_unk[16]; xdevice_t m_XDevices[XUSER_MAX_COUNT]; @@ -137,6 +157,7 @@ private: bool m_bIgnoreLocalJoystick; InputCursorHandle_t m_hCursor; }; +static_assert(sizeof(CInputSystem) == 0x18E8); /////////////////////////////////////////////////////////////////////////////// extern CInputSystem* g_pInputSystem; diff --git a/src/public/inputsystem/AnalogCode.h b/src/public/inputsystem/AnalogCode.h index cb439583..ce59433e 100644 --- a/src/public/inputsystem/AnalogCode.h +++ b/src/public/inputsystem/AnalogCode.h @@ -23,9 +23,7 @@ enum AnalogCode_t { ANALOG_CODE_INVALID = -1, - MOUSE_X = 0, - MOUSE_Y, - MOUSE_XY, // Invoked when either x or y changes + MOUSE_XY = 0, // Invoked when either x or y changes MOUSE_WHEEL, JOYSTICK_FIRST_AXIS, diff --git a/src/public/inputsystem/ButtonCode.h b/src/public/inputsystem/ButtonCode.h index 0f9c2df1..87f3618b 100644 --- a/src/public/inputsystem/ButtonCode.h +++ b/src/public/inputsystem/ButtonCode.h @@ -12,7 +12,7 @@ enum { - JOYSTICK_MAX_BUTTON_COUNT = XK_MAX_KEYS, + JOYSTICK_MAX_BUTTON_COUNT = 32, JOYSTICK_POV_BUTTON_COUNT = 4, JOYSTICK_AXIS_BUTTON_COUNT = MAX_JOYSTICK_AXES * 2, }; @@ -134,8 +134,9 @@ enum ButtonCode_t KEY_CAPSLOCKTOGGLE, KEY_NUMLOCKTOGGLE, KEY_SCROLLLOCKTOGGLE, + KEY_CREDITSIGN, - KEY_LAST = KEY_SCROLLLOCKTOGGLE, + KEY_LAST = KEY_CREDITSIGN, KEY_COUNT = KEY_LAST - KEY_FIRST + 1, // Mouse @@ -162,40 +163,48 @@ enum ButtonCode_t JOYSTICK_FIRST_AXIS_BUTTON, JOYSTICK_LAST_AXIS_BUTTON = JOYSTICK_AXIS_BUTTON_INTERNAL(MAX_JOYSTICKS - 1, JOYSTICK_AXIS_BUTTON_COUNT - 1), - JOYSTICK_LAST = JOYSTICK_LAST_AXIS_BUTTON, + // New in R5 + JOYSTICK_UP_DOWN, + JOYSTICK_LEFT_RIGHT, + + JOYSTICK_LAST = JOYSTICK_LEFT_RIGHT, BUTTON_CODE_LAST, BUTTON_CODE_COUNT = BUTTON_CODE_LAST - KEY_FIRST + 1, - // Helpers for XBox - KEY_XBUTTON_UP = JOYSTICK_FIRST_POV_BUTTON, // POV buttons - KEY_XBUTTON_DOWN, - KEY_XBUTTON_LEFT, - KEY_XBUTTON_RIGHT, - KEY_XBUTTON_START, - KEY_XBUTTON_BACK, - KEY_XBUTTON_STICK1, - KEY_XBUTTON_STICK2, - - KEY_XBUTTON_A = JOYSTICK_FIRST_BUTTON, // Buttons + // Helpers for XBox 360 + KEY_XBUTTON_A = JOYSTICK_FIRST_BUTTON, // Buttons KEY_XBUTTON_B, KEY_XBUTTON_X, KEY_XBUTTON_Y, KEY_XBUTTON_LEFT_SHOULDER, KEY_XBUTTON_RIGHT_SHOULDER, - - KEY_XBUTTON_LTRIGGER_PARTIAL, + KEY_XBUTTON_BACK, + KEY_XBUTTON_START, + KEY_XBUTTON_STICK1, + KEY_XBUTTON_STICK2, + KEY_XBUTTON_INACTIVE_START, KEY_XBUTTON_LTRIGGER_FULL, - KEY_XBUTTON_RTRIGGER_PARTIAL, KEY_XBUTTON_RTRIGGER_FULL, + KEY_XBUTTON_RELOAD, + KEY_XBUTTON_TRIGGER, + KEY_XBUTTON_PUMP_ACTION, + KEY_XBUTTON_ROLL_RIGHT, + KEY_XBUTTON_ROLL_LEFT, - KEY_XSTICK1_UP = JOYSTICK_FIRST_AXIS_BUTTON, // YAXIS NEGATIVE - KEY_XSTICK1_DOWN, // YAXIS POSITIVE - KEY_XSTICK1_LEFT, // XAXIS NEGATIVE - KEY_XSTICK1_RIGHT, // XAXIS POSITIVE + KEY_XBUTTON_UP = JOYSTICK_FIRST_POV_BUTTON, // POV buttons + KEY_XBUTTON_RIGHT, + KEY_XBUTTON_DOWN, + KEY_XBUTTON_LEFT, - KEY_XSTICK2_UP, // VAXIS NEGATIVE - KEY_XSTICK2_DOWN, // VAXIS POSITIVE - KEY_XSTICK2_LEFT, // UAXIS NEGATIVE - KEY_XSTICK2_RIGHT, // UAXIS POSITIVE + KEY_XSTICK1_RIGHT = JOYSTICK_FIRST_AXIS_BUTTON, // XAXIS POSITIVE + KEY_XSTICK1_LEFT, // XAXIS NEGATIVE + KEY_XSTICK1_DOWN, // YAXIS POSITIVE + KEY_XSTICK1_UP, // YAXIS NEGATIVE + KEY_XBUTTON_LTRIGGER, // ZAXIS POSITIVE + KEY_XBUTTON_RTRIGGER, // ZAXIS NEGATIVE + KEY_XSTICK2_RIGHT, // UAXIS POSITIVE + KEY_XSTICK2_LEFT, // UAXIS NEGATIVE + KEY_XSTICK2_DOWN, // VAXIS POSITIVE + KEY_XSTICK2_UP, // VAXIS NEGATIVE };