remap-redux part2: analog to analog input rules are working for left stick to left stick and left stick to right, for some reason not for right stick to right

stick
(inverting axes) or right stick to left...
This commit is contained in:
radius 2018-04-08 02:49:46 -05:00
parent c608951ff8
commit 72065aee0b
2 changed files with 75 additions and 9 deletions

View File

@ -677,13 +677,13 @@ int16_t input_state(unsigned port, unsigned device,
}
if (idx == 1)
{
if (id == 0 && settings->uints.input_remap_ids[port][16] != 20)
if (id == 0 && settings->uints.input_remap_ids[port][20] != 20)
reset_state = true;
if (id == 0 && settings->uints.input_remap_ids[port][17] != 21)
if (id == 0 && settings->uints.input_remap_ids[port][21] != 21)
reset_state = true;
if (id == 1 && settings->uints.input_remap_ids[port][18] != 22)
if (id == 1 && settings->uints.input_remap_ids[port][22] != 22)
reset_state = true;
if (id == 1 && settings->uints.input_remap_ids[port][19] != 23)
if (id == 1 && settings->uints.input_remap_ids[port][23] != 23)
reset_state = true;
}
}

View File

@ -52,7 +52,6 @@ struct input_mapper
{
/* Left X, Left Y, Right X, Right Y */
int16_t analog_value[MAX_USERS][8];
int new_axis[MAX_USERS][8];
/* the whole keyboard state */
uint32_t keys[RETROK_LAST / 32 + 1];
/* This is a bitmask of (1 << key_bind_id). */
@ -149,6 +148,8 @@ void input_mapper_poll(input_mapper_t *handle)
is assigned to any other button than the default one, then it sets the bit on the
mapper input bitmap, later on the original input is cleared in input_state */
BIT256_CLEAR_ALL(handle->buttons[i]);
for (j = 0; j < 8; j++)
handle->analog_value[i][j] = 0;
input_get_state_for_port(settings, i, &current_input);
@ -170,6 +171,7 @@ void input_mapper_poll(input_mapper_t *handle)
for (j = 0; j < 8; j++)
{
k = j + RARCH_FIRST_CUSTOM_BIND;
current_axis_value = current_input.analogs[j];
remap_axis = settings->uints.input_remap_ids[i][k];
@ -178,13 +180,20 @@ void input_mapper_poll(input_mapper_t *handle)
if (remap_axis < RARCH_FIRST_CUSTOM_BIND)
{
BIT256_SET(handle->buttons[i], remap_axis);
//RARCH_LOG("axis %d remapped to button %d val %d\n", j, remap_axis, current_axis_value);
/* RARCH_LOG("axis %d remapped to button %d val %d\n", j, remap_axis, current_axis_value); */
}
else
{
handle->analog_value[i][remap_axis - RARCH_FIRST_CUSTOM_BIND] = current_axis_value;
handle->new_axis[i][remap_axis - RARCH_FIRST_CUSTOM_BIND] = remap_axis;
RARCH_LOG("axis %d(%d) remapped to axis %d val %d\n", j, k, remap_axis - RARCH_FIRST_CUSTOM_BIND, current_axis_value);
int invert = 1;
/*if ((k == 16 && remap_axis == 17) || (k == 17 && remap_axis == 16) ||
(k == 18 && remap_axis == 19) || (k == 19 && remap_axis == 18) ||
(k == 20 && remap_axis == 21) || (k == 21 && remap_axis == 20) ||
(k == 22 && remap_axis == 23) || (k == 23 && remap_axis == 22))*/
if ((k % 2 == 0 && remap_axis % 2 != 0) || (k % 2 != 0 && remap_axis % 2 == 0))
invert = -1;
handle->analog_value[i][remap_axis - RARCH_FIRST_CUSTOM_BIND] = current_axis_value * invert;
/* RARCH_LOG("axis %d(%d) remapped to axis %d val %d\n", j, k, remap_axis - RARCH_FIRST_CUSTOM_BIND, current_axis_value); */
}
}
@ -212,6 +221,63 @@ void input_mapper_state(
*ret = 1;
break;
case RETRO_DEVICE_ANALOG:
{
int val = 0;
if (idx == 0)
{
if (id == 0)
{
if (handle->analog_value[port][0])
val = handle->analog_value[port][0];
else if (handle->analog_value[port][1])
val = handle->analog_value[port][1];
if(handle->analog_value[port][0] || handle->analog_value[port][1])
{
*ret = val;
}
}
if (id == 1)
{
if (handle->analog_value[port][2])
val = handle->analog_value[port][2];
else if (handle->analog_value[port][3])
val = handle->analog_value[port][3];
if(handle->analog_value[port][2] || handle->analog_value[port][3])
{
*ret = val;
}
}
if (idx == 1)
{
if (id == 0)
{
if (handle->analog_value[port][4])
val = handle->analog_value[port][4];
else if (handle->analog_value[port][5])
val = handle->analog_value[port][5];
if(handle->analog_value[port][4] || handle->analog_value[port][5])
{
*ret = val;
}
}
if (id == 1)
{
if (handle->analog_value[port][6])
val = handle->analog_value[port][6];
else if (handle->analog_value[port][7])
val = handle->analog_value[port][7];
if(handle->analog_value[port][6] || handle->analog_value[port][7])
{
*ret = val;
}
}
}
}
}
break;
case RETRO_DEVICE_KEYBOARD:
if (id < RETROK_LAST)