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.
This commit is contained in:
Kawe Mazidjatari 2023-12-24 02:58:11 +01:00
parent 94d01c39b3
commit b72f02d123
4 changed files with 67 additions and 36 deletions

View File

@ -43,6 +43,9 @@ typedef enum
XK_STICK2_LEFT,
XK_STICK2_RIGHT,
XK_UP_DOWN,
XK_LEFT_RIGHT,
XK_MAX_KEYS,
} xKey_t;

View File

@ -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<BUTTON_CODE_LAST> 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;

View File

@ -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,

View File

@ -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
};