(360) Dehardcode control binds

This commit is contained in:
TwinAphex51224 2012-02-13 15:53:50 +01:00
parent 1307648d08
commit 9969474326
2 changed files with 65 additions and 49 deletions

View File

@ -132,6 +132,50 @@ static void set_default_settings (void)
g_settings.video.vsync = true;
g_settings.video.smooth = true;
for(uint32_t x = 0; x < MAX_PLAYERS; x++)
{
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_B].id = SNES_DEVICE_ID_JOYPAD_B;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_B].joykey = XINPUT_GAMEPAD_A;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_Y].id = SNES_DEVICE_ID_JOYPAD_Y;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_Y].joykey = XINPUT_GAMEPAD_X;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_SELECT].id = SNES_DEVICE_ID_JOYPAD_SELECT;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_SELECT].joykey = XINPUT_GAMEPAD_BACK;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_START].id = SNES_DEVICE_ID_JOYPAD_START;
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_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_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_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_A].id = SNES_DEVICE_ID_JOYPAD_A;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_A].joykey = XINPUT_GAMEPAD_B;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_X].id = SNES_DEVICE_ID_JOYPAD_X;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_X].joykey = XINPUT_GAMEPAD_Y;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_L].id = SNES_DEVICE_ID_JOYPAD_L;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_L].joykey = XINPUT_GAMEPAD_LEFT_SHOULDER;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_R].id = SNES_DEVICE_ID_JOYPAD_R;
g_settings.input.binds[x][SNES_DEVICE_ID_JOYPAD_R].joykey = XINPUT_GAMEPAD_RIGHT_SHOULDER;
}
//g_console
g_console.block_config_read = true;
g_console.throttle_enable = true;

View File

@ -26,6 +26,7 @@
#include "shared.h"
static XINPUT_STATE state[4];
static unsigned pads_connected;
#define DEADZONE (16000)
@ -33,8 +34,13 @@ static void xdk360_input_poll(void *data)
{
(void)data;
pads_connected = 0;
for (unsigned i = 0; i < 4; i++)
XInputGetState(i, &state[i]);
{
unsigned long retval = XInputGetState(i, &state[i]);
pads_connected += (retval == ERROR_DEVICE_NOT_CONNECTED) ? 0 : 1;
}
}
static int16_t xdk360_input_state(void *data, const struct snes_keybind **binds,
@ -42,61 +48,27 @@ static int16_t xdk360_input_state(void *data, const struct snes_keybind **binds,
unsigned index, unsigned id)
{
(void)data;
(void)binds;
unsigned player;
uint64_t button;
player = 0;
if (device != SNES_DEVICE_JOYPAD)
return 0;
unsigned player = 0;
if (port == SNES_PORT_2 && device == SNES_DEVICE_MULTITAP)
player = index + 1;
else if (port == SNES_PORT_2)
player = 1;
// Hardcoded binds.
uint64_t button;
switch (id)
if (port == SNES_PORT_2)
{
case SNES_DEVICE_ID_JOYPAD_A:
button = XINPUT_GAMEPAD_B;
break;
case SNES_DEVICE_ID_JOYPAD_B:
button = XINPUT_GAMEPAD_A;
break;
case SNES_DEVICE_ID_JOYPAD_X:
button = XINPUT_GAMEPAD_Y;
break;
case SNES_DEVICE_ID_JOYPAD_Y:
button = XINPUT_GAMEPAD_X;
break;
case SNES_DEVICE_ID_JOYPAD_LEFT:
button = XINPUT_GAMEPAD_DPAD_LEFT;
break;
case SNES_DEVICE_ID_JOYPAD_RIGHT:
button = XINPUT_GAMEPAD_DPAD_RIGHT;
break;
case SNES_DEVICE_ID_JOYPAD_UP:
button = XINPUT_GAMEPAD_DPAD_UP;
break;
case SNES_DEVICE_ID_JOYPAD_DOWN:
button = XINPUT_GAMEPAD_DPAD_DOWN;
break;
case SNES_DEVICE_ID_JOYPAD_START:
button = XINPUT_GAMEPAD_START;
break;
case SNES_DEVICE_ID_JOYPAD_SELECT:
button = XINPUT_GAMEPAD_BACK;
break;
case SNES_DEVICE_ID_JOYPAD_L:
button = XINPUT_GAMEPAD_LEFT_SHOULDER;
break;
case SNES_DEVICE_ID_JOYPAD_R:
button = XINPUT_GAMEPAD_RIGHT_SHOULDER;
break;
default:
button = 0;
if(pads_connected < 2)
return 0;
player = 1;
if (device == SNES_DEVICE_MULTITAP)
player += index;
}
button = binds[player][id].joykey;
return (state[player].Gamepad.wButtons & button) ? 1 : 0;
}