diff --git a/360/main.c b/360/main.c index 44ae4cbb70..acc10b5f82 100644 --- a/360/main.c +++ b/360/main.c @@ -22,6 +22,7 @@ #include #include #include "menu.h" +#include "xdk360_input.h" #include "xdk360_video.h" #include "../console/main_wrap.h" @@ -148,20 +149,16 @@ static void set_default_settings (void) g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_START].joykey = XINPUT_GAMEPAD_START; g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_UP].id = SNES_DEVICE_ID_JOYPAD_UP; - g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_UP].joykey = XINPUT_GAMEPAD_DPAD_UP; - //g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_UP].joyaxis = CTRL_LSTICK_UP_MASK; + g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_UP].joykey = XINPUT_GAMEPAD_DPAD_UP | XINPUT_GAMEPAD_LSTICK_UP_MASK; g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_DOWN].id = SNES_DEVICE_ID_JOYPAD_DOWN; - g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_DOWN].joykey = XINPUT_GAMEPAD_DPAD_DOWN; - //g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_DOWN].joyaxis = CTRL_LSTICK_DOWN_MASK; + g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_DOWN].joykey = XINPUT_GAMEPAD_DPAD_DOWN | XINPUT_GAMEPAD_LSTICK_DOWN_MASK; g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_LEFT].id = SNES_DEVICE_ID_JOYPAD_LEFT; - g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_LEFT].joykey = XINPUT_GAMEPAD_DPAD_LEFT; - //g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_LEFT].joyaxis = CTRL_LSTICK_LEFT_MASK; + g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_LEFT].joykey = XINPUT_GAMEPAD_DPAD_LEFT | XINPUT_GAMEPAD_LSTICK_LEFT_MASK; g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_RIGHT].id = SNES_DEVICE_ID_JOYPAD_RIGHT; - g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_RIGHT].joykey = XINPUT_GAMEPAD_DPAD_RIGHT; - //g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_RIGHT].joyaxis = CTRL_LSTICK_RIGHT_MASK; + g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_RIGHT].joykey = XINPUT_GAMEPAD_DPAD_RIGHT | XINPUT_GAMEPAD_LSTICK_RIGHT_MASK; g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_A].id = SNES_DEVICE_ID_JOYPAD_A; g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_A].joykey = XINPUT_GAMEPAD_B; diff --git a/360/xdk360_input.cpp b/360/xdk360_input.cpp index 814653d493..6ae2324b07 100644 --- a/360/xdk360_input.cpp +++ b/360/xdk360_input.cpp @@ -22,14 +22,13 @@ #include "../driver.h" #include "../general.h" #include "../libsnes.hpp" +#include "xdk360_input.h" #include "xdk360_video.h" #include "shared.h" -static XINPUT_STATE state[4]; +static uint64_t state[4]; static unsigned pads_connected; -#define DEADZONE (16000) - static void xdk360_input_poll(void *data) { (void)data; @@ -38,8 +37,20 @@ static void xdk360_input_poll(void *data) for (unsigned i = 0; i < 4; i++) { - unsigned long retval = XInputGetState(i, &state[i]); + XINPUT_STATE state_tmp; + unsigned long retval = XInputGetState(i, &state_tmp); pads_connected += (retval == ERROR_DEVICE_NOT_CONNECTED) ? 0 : 1; + state[i] = state_tmp.Gamepad.wButtons; + state[i] |= ((state_tmp.Gamepad.sThumbLX < -DEADZONE)) << 16; + state[i] |= ((state_tmp.Gamepad.sThumbLX > DEADZONE)) << 17; + state[i] |= ((state_tmp.Gamepad.sThumbLY > DEADZONE)) << 18; + state[i] |= ((state_tmp.Gamepad.sThumbLY < -DEADZONE)) << 19; + state[i] |= ((state_tmp.Gamepad.sThumbRX < -DEADZONE)) << 20; + state[i] |= ((state_tmp.Gamepad.sThumbRX > DEADZONE)) << 21; + state[i] |= ((state_tmp.Gamepad.sThumbRY > DEADZONE)) << 22; + state[i] |= ((state_tmp.Gamepad.sThumbRY < -DEADZONE)) << 23; + state[i] |= ((state_tmp.Gamepad.bLeftTrigger > 128 ? 1 : 0)) << 24; + state[i] |= ((state_tmp.Gamepad.bRightTrigger > 128 ? 1 : 0)) << 25; } } @@ -69,7 +80,7 @@ static int16_t xdk360_input_state(void *data, const struct snes_keybind **binds, button = binds[player][id].joykey; - return (state[player].Gamepad.wButtons & button) ? 1 : 0; + return (state[player] & button) ? 1 : 0; } static void xdk360_free_input(void *data) @@ -85,23 +96,24 @@ static void* xdk360_input_init(void) static bool xdk360_key_pressed(void *data, int key) { (void)data; - XInputGetState(0, &state[0]); + XINPUT_STATE state; bool retval; + XInputGetState(0, &state); retval = false; switch(key) { case SSNES_FAST_FORWARD_HOLD_KEY: - return ((state[0].Gamepad.sThumbRY < -DEADZONE) && !(state[0].Gamepad.bRightTrigger > 128)); + return ((state.Gamepad.sThumbRY < -DEADZONE) && !(state.Gamepad.bRightTrigger > 128)); case SSNES_LOAD_STATE_KEY: - return ((state[0].Gamepad.sThumbRY > DEADZONE) && (state[0].Gamepad.bRightTrigger > 128)); + return ((state.Gamepad.sThumbRY > DEADZONE) && (state.Gamepad.bRightTrigger > 128)); case SSNES_SAVE_STATE_KEY: - return ((state[0].Gamepad.sThumbRY < -DEADZONE) && (state[0].Gamepad.bRightTrigger > 128)); + return ((state.Gamepad.sThumbRY < -DEADZONE) && (state.Gamepad.bRightTrigger > 128)); case SSNES_STATE_SLOT_PLUS: - return ((state[0].Gamepad.sThumbRX > DEADZONE) && (state[0].Gamepad.bRightTrigger > 128)); + return ((state.Gamepad.sThumbRX > DEADZONE) && (state.Gamepad.bRightTrigger > 128)); case SSNES_STATE_SLOT_MINUS: - return ((state[0].Gamepad.sThumbRX < -DEADZONE) && (state[0].Gamepad.bRightTrigger > 128)); + return ((state.Gamepad.sThumbRX < -DEADZONE) && (state.Gamepad.bRightTrigger > 128)); case SSNES_FRAMEADVANCE: if(g_console.frame_advance_enable) { @@ -111,12 +123,12 @@ static bool xdk360_key_pressed(void *data, int key) } return false; case SSNES_REWIND: - return ((state[0].Gamepad.sThumbRY > DEADZONE) && !(state[0].Gamepad.bRightTrigger > 128)); + return ((state.Gamepad.sThumbRY > DEADZONE) && !(state.Gamepad.bRightTrigger > 128)); case SSNES_QUIT_KEY: if(IS_TIMER_EXPIRED()) { - uint32_t left_thumb_pressed = (state[0].Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB); - uint32_t right_thumb_pressed = (state[0].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB); + uint32_t left_thumb_pressed = (state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB); + uint32_t right_thumb_pressed = (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB); g_console.menu_enable = right_thumb_pressed && left_thumb_pressed && IS_TIMER_EXPIRED(); g_console.ingame_menu_enable = right_thumb_pressed && !left_thumb_pressed;