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