diff --git a/CMakeLists.txt b/CMakeLists.txt index 3777294..adf9380 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ add_definitions( -DIZ_APP_NAME="Izanagi" -DIZ_APP_DESCRIPTION="Run and gun game" -DIZ_APP_SERVER_DESCRIPTION="Dedicated server" - -DIZ_PLAYERS=2 + -DIZ_PLAYERS=1 ) if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") diff --git a/src/packages/game/input/IZ_joystick.c b/src/packages/game/input/IZ_joystick.c index f3ffd76..bc5311c 100644 --- a/src/packages/game/input/IZ_joystick.c +++ b/src/packages/game/input/IZ_joystick.c @@ -26,6 +26,38 @@ void IZ_JoystickHandleDeviceEvents(IZ_JoystickState* state, SDL_Event e) { void IZ_JoystickHandleAxisEvents(IZ_JoystickState* state, IZ_Action* action, SDL_Event e) { if (e.type == SDL_JOYAXISMOTION) { + // XInput handling + u8 control_index; + for (control_index = 4; control_index < IZ_CONTROLS; control_index += 1) { + if (e.jaxis.axis == IZ_JOY_AXIS_DIRECTION_LEFT_SHOULDER && state->config.control_mapping[control_index] == 10) { + const u16 bitflag = (0x1 << control_index); + + if (e.jaxis.value > state->config.axis_threshold) { + *action |= bitflag; + return; + } + + if (e.jaxis.value <= state->config.axis_threshold) { + *action &= ~bitflag; + return; + } + } + + if (e.jaxis.axis == IZ_JOY_AXIS_DIRECTION_RIGHT_SHOULDER && state->config.control_mapping[control_index] == 11) { + const u16 bitflag = (0x1 << control_index); + + if (e.jaxis.value > state->config.axis_threshold) { + *action |= bitflag; + return; + } + + if (e.jaxis.value <= state->config.axis_threshold) { + *action &= ~bitflag; + return; + } + } + } + if ( e.jaxis.axis == IZ_JOY_AXIS_DIRECTION_HORIZONTAL1 || e.jaxis.axis == IZ_JOY_AXIS_DIRECTION_HORIZONTAL2 @@ -72,6 +104,7 @@ void IZ_JoystickHandleHatEvents(IZ_Action* action, SDL_Event e) { void IZ_JoystickHandleButtonEvents(IZ_JoystickState* state, IZ_Action* action, SDL_Event e) { u8 control_index; + for (control_index = 4; control_index < IZ_CONTROLS; control_index += 1) { if (e.jbutton.button == state->config.control_mapping[control_index]) { const u16 bitflag = (0x1 << control_index); diff --git a/src/packages/game/input/IZ_joystick.h b/src/packages/game/input/IZ_joystick.h index 6ec1ab7..fcd40b6 100644 --- a/src/packages/game/input/IZ_joystick.h +++ b/src/packages/game/input/IZ_joystick.h @@ -15,8 +15,10 @@ static const u16 IZ_DEFAULT_AXIS_THRESHOLD = 8000; typedef enum { IZ_JOY_AXIS_DIRECTION_HORIZONTAL1 = 0, IZ_JOY_AXIS_DIRECTION_VERTICAL1 = 1, - IZ_JOY_AXIS_DIRECTION_HORIZONTAL2 = 3, - IZ_JOY_AXIS_DIRECTION_VERTICAL2 = 4, + IZ_JOY_AXIS_DIRECTION_HORIZONTAL2 = 2, + IZ_JOY_AXIS_DIRECTION_VERTICAL2 = 3, + IZ_JOY_AXIS_DIRECTION_LEFT_SHOULDER = 4, + IZ_JOY_AXIS_DIRECTION_RIGHT_SHOULDER = 5, } IZ_JoyAxisDirection; typedef struct {