[LIBNX] Fix Split Joycon

This commit is contained in:
M4xw 2021-09-23 13:38:52 +02:00 committed by m4xw
parent 1ff024be26
commit 931eb3221b

View File

@ -306,6 +306,7 @@ static void switch_joypad_poll(void)
for (i = 0; i < MAX_USERS; i += 2)
previous_split_joycon_setting[i] = settings->uints.input_split_joycon[i];
previous_handheld = handheld;
for (i = 0; i < DEFAULT_MAX_PADS; i++)
@ -315,61 +316,59 @@ static void switch_joypad_poll(void)
unsigned input_split_joycon = settings->uints.input_split_joycon[i];
int pad_button = padGetButtons(&pad_states[i]);
if (input_split_joycon && !handheld) {
button_state[i] = 0;
if (hidGetNpadDeviceType((HidNpadIdType)i) & HidDeviceTypeBits_JoyLeft) {
if (pad_button & HidNpadButton_Left)
button_state[i] = (uint16_t)HidNpadButton_B;
else if (pad_button & HidNpadButton_Up)
button_state[i] = (uint16_t)HidNpadButton_Y;
else if (pad_button & HidNpadButton_Right)
button_state[i] = (uint16_t)HidNpadButton_X;
else if (pad_button & HidNpadButton_Down)
button_state[i] = (uint16_t)HidNpadButton_A;
else if (pad_button & HidNpadButton_LeftSL)
button_state[i] = (uint16_t)HidNpadButton_L;
else if (pad_button & HidNpadButton_LeftSR)
button_state[i] = (uint16_t)HidNpadButton_R;
else
button_state[i] = pad_button;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT]
[RETRO_DEVICE_ID_ANALOG_X] = -stick_left_state.y;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT]
[RETRO_DEVICE_ID_ANALOG_Y] = -stick_left_state.x;
}
else if (hidGetNpadDeviceType((HidNpadIdType)i) & HidDeviceTypeBits_JoyRight) {
button_state[i] |= (uint16_t)HidNpadButton_B;
if (pad_button & HidNpadButton_Up)
button_state[i] |= (uint16_t)HidNpadButton_Y;
if (pad_button & HidNpadButton_Right)
button_state[i] |= (uint16_t)HidNpadButton_X;
if (pad_button & HidNpadButton_Down)
button_state[i] |= (uint16_t)HidNpadButton_A;
if (pad_button & HidNpadButton_LeftSL)
button_state[i] |= (uint16_t)HidNpadButton_L;
if (pad_button & HidNpadButton_LeftSR)
button_state[i] |= (uint16_t)HidNpadButton_R;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT][RETRO_DEVICE_ID_ANALOG_X] = -stick_left_state.y;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT][RETRO_DEVICE_ID_ANALOG_Y] = -stick_left_state.x;
} else if (hidGetNpadDeviceType((HidNpadIdType)i) & HidDeviceTypeBits_JoyRight) {
if (pad_button & HidNpadButton_A)
button_state[i] = (uint16_t)HidNpadButton_B;
else if (pad_button & HidNpadButton_B)
button_state[i] = (uint16_t)HidNpadButton_Y;
else if (pad_button & HidNpadButton_X)
button_state[i] = (uint16_t)HidNpadButton_A;
else if (pad_button & HidNpadButton_Y)
button_state[i] = (uint16_t)HidNpadButton_X;
else if (pad_button & HidNpadButton_RightSL)
button_state[i] = (uint16_t)HidNpadButton_L;
else if (pad_button & HidNpadButton_RightSR)
button_state[i] = (uint16_t)HidNpadButton_R;
else if (pad_button & HidNpadButton_StickR)
button_state[i] = (uint16_t)HidNpadButton_StickL;
else
button_state[i] = pad_button;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT]
[RETRO_DEVICE_ID_ANALOG_X] = stick_right_state.y;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT]
[RETRO_DEVICE_ID_ANALOG_Y] = stick_right_state.x;
button_state[i] |= (uint16_t)HidNpadButton_B;
if (pad_button & HidNpadButton_B)
button_state[i] |= (uint16_t)HidNpadButton_Y;
if (pad_button & HidNpadButton_X)
button_state[i] |= (uint16_t)HidNpadButton_A;
if (pad_button & HidNpadButton_Y)
button_state[i] |= (uint16_t)HidNpadButton_X;
if (pad_button & HidNpadButton_RightSL)
button_state[i] |= (uint16_t)HidNpadButton_L;
if (pad_button & HidNpadButton_RightSR)
button_state[i] |= (uint16_t)HidNpadButton_R;
if (pad_button & HidNpadButton_StickR)
button_state[i] |= (uint16_t)HidNpadButton_StickL;
/* Throw JoyRight state into retro left analog */
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT][RETRO_DEVICE_ID_ANALOG_X] = stick_right_state.y;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT][RETRO_DEVICE_ID_ANALOG_Y] = stick_right_state.x;
} else {
/* Handle other types via Default Input Handling */
goto lblDefaultInputHandling;
}
}
else
{
/* Default Input Handling */
lblDefaultInputHandling:
button_state[i] = pad_button;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT]
[RETRO_DEVICE_ID_ANALOG_X] = stick_left_state.x;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT]
[RETRO_DEVICE_ID_ANALOG_Y] = -stick_left_state.y;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT][RETRO_DEVICE_ID_ANALOG_X] = stick_left_state.x;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_LEFT][RETRO_DEVICE_ID_ANALOG_Y] = -stick_left_state.y;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_RIGHT][RETRO_DEVICE_ID_ANALOG_X] = stick_right_state.x;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_RIGHT][RETRO_DEVICE_ID_ANALOG_Y] = -stick_right_state.y;
}
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_RIGHT]
[RETRO_DEVICE_ID_ANALOG_X] = stick_right_state.x;
analog_state[i][RETRO_DEVICE_INDEX_ANALOG_RIGHT]
[RETRO_DEVICE_ID_ANALOG_Y] = -stick_right_state.y;
}
}
#else