1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-26 14:34:22 +02:00

fixed #282 Switch fix input for new firmware version

This commit is contained in:
Timur Gagiev
2020-12-30 03:53:43 +03:00
parent d07808e93c
commit 608f75e71d

View File

@@ -96,7 +96,7 @@ EGLContext context;
NWindow *window; NWindow *window;
void configureResolution() { void configureResolution() {
if (appletGetOperationMode() == AppletOperationMode_Docked) { if (appletGetOperationMode() == AppletOperationMode_Console) {
Core::width = 1920; Core::width = 1920;
Core::height = 1080; Core::height = 1080;
} }
@@ -184,19 +184,19 @@ void osJoyVibrate(int index, float L, float R) {
bool joyIsSplit; bool joyIsSplit;
int joySplitTime; int joySplitTime;
PadState pads[2];
void joySplit(bool split) { void joySplit(bool split) {
joyIsSplit = split; joyIsSplit = split;
joySplitTime = Core::getTime(); joySplitTime = Core::getTime();
if (split) { if (split) {
hidSetNpadJoyHoldType(HidJoyHoldType_Horizontal); hidSetNpadJoyAssignmentModeSingle(HidNpadIdType_No1, HidNpadJoyDeviceType_Left);
hidSetNpadJoyAssignmentModeSingleByDefault(CONTROLLER_PLAYER_1); hidSetNpadJoyAssignmentModeSingle(HidNpadIdType_No2, HidNpadJoyDeviceType_Right);
hidSetNpadJoyAssignmentModeSingleByDefault(CONTROLLER_PLAYER_2);
} else { } else {
hidSetNpadJoyHoldType(HidJoyHoldType_Default); hidSetNpadJoyAssignmentModeDual(HidNpadIdType_No1);
hidSetNpadJoyAssignmentModeDual(CONTROLLER_PLAYER_1); hidSetNpadJoyAssignmentModeDual(HidNpadIdType_No2);
hidSetNpadJoyAssignmentModeDual(CONTROLLER_PLAYER_2); hidMergeSingleJoyAsDualJoy(HidNpadIdType_No1, HidNpadIdType_No2);
hidMergeSingleJoyAsDualJoy(CONTROLLER_PLAYER_1, CONTROLLER_PLAYER_2);
if (Game::level && Game::level->players[1]) { if (Game::level && Game::level->players[1]) {
Game::level->addPlayer(1); // add existing player == remove player Game::level->addPlayer(1); // add existing player == remove player
@@ -205,6 +205,12 @@ void joySplit(bool split) {
} }
void joyInit() { void joyInit() {
hidSetNpadJoyHoldType(HidNpadJoyHoldType_Horizontal);
padConfigureInput(2, HidNpadStyleSet_NpadStandard);
padInitialize(&pads[0], HidNpadIdType_No1, HidNpadIdType_Handheld);
padInitialize(&pads[1], HidNpadIdType_No2, HidNpadIdType_Handheld);
joySplit(false); joySplit(false);
} }
@@ -215,18 +221,12 @@ void joyUpdate() {
KEY_DLEFT, KEY_DRIGHT, KEY_DUP, KEY_DDOWN, KEY_DLEFT, KEY_DRIGHT, KEY_DUP, KEY_DDOWN,
}; };
if (hidGetHandheldMode() && joyIsSplit) {
joySplit(false);
}
hidScanInput();
bool waitForSplit = false; bool waitForSplit = false;
for (int i = 0; i < (joyIsSplit ? 2 : 1); i++) { for (int i = 0; i < (joyIsSplit ? 2 : 1); i++) {
HidControllerID ctrl = (i == 0 ? CONTROLLER_P1_AUTO : CONTROLLER_PLAYER_2); padUpdate(&pads[i]);
u64 mask = hidKeysDown(ctrl) | hidKeysHeld(ctrl); u64 mask = padGetButtonsDown(&pads[i]) | padGetButtons(&pads[i]);
for (int j = 1; j < jkMAX; j++) { for (int j = 1; j < jkMAX; j++) {
if (j != jkSelect && j != jkStart) { if (j != jkSelect && j != jkStart) {
@@ -237,15 +237,14 @@ void joyUpdate() {
Input::setJoyDown(i, jkSelect, (mask & (KEY_MINUS | KEY_PLUS)) != 0); Input::setJoyDown(i, jkSelect, (mask & (KEY_MINUS | KEY_PLUS)) != 0);
Input::setJoyDown(i, jkStart, (mask & (KEY_LSTICK | KEY_RSTICK)) != 0); Input::setJoyDown(i, jkStart, (mask & (KEY_LSTICK | KEY_RSTICK)) != 0);
JoystickPosition sL, sR; HidAnalogStickState sL = padGetStickPos(&pads[i], 0);
HidAnalogStickState sR = padGetStickPos(&pads[i], 1);
hidJoystickRead(&sL, ctrl, JOYSTICK_LEFT); Input::setJoyPos(i, jkL, vec2(float(sL.x), float(-sL.y)) / 32767.0f);
hidJoystickRead(&sR, ctrl, JOYSTICK_RIGHT); Input::setJoyPos(i, jkR, vec2(float(sR.x), float(-sR.y)) / 32767.0f);
Input::setJoyPos(i, jkL, vec2(float(sL.dx), float(-sL.dy)) / 32767.0f);
Input::setJoyPos(i, jkR, vec2(float(sR.dx), float(-sR.dy)) / 32767.0f);
if ((mask & (KEY_L | KEY_R)) == (KEY_L | KEY_R)) { // hold L and R to split/merge joy-con's if ((mask & (KEY_L | KEY_R)) == (KEY_L | KEY_R)) { // hold L and R to split/merge joy-con's
if (joySplitTime + 1000 < Core::getTime()) { // 1 sec timer if (Core::getTime() - joySplitTime > 1000) { // 1 sec timer
joySplit(!joyIsSplit); joySplit(!joyIsSplit);
} }
waitForSplit = true; waitForSplit = true;
@@ -258,7 +257,8 @@ void joyUpdate() {
} }
void touchUpdate() { void touchUpdate() {
int touchesCount = hidTouchCount(); HidTouchScreenState state;
hidGetTouchScreenStates(&state, 1);
bool touchState[COUNT(Input::touch)]; bool touchState[COUNT(Input::touch)];
@@ -266,14 +266,11 @@ void touchUpdate() {
touchState[i] = Input::down[ikTouchA + i]; touchState[i] = Input::down[ikTouchA + i];
} }
for (int i = 0; i < touchesCount; i++) { for (int i = 0; i < state.count; i++) {
touchPosition touch; InputKey key = Input::getTouch(state.touches[i].finger_id);
hidTouchRead(&touch, i);
InputKey key = Input::getTouch(touch.id);
if (key == ikNone) continue; if (key == ikNone) continue;
Input::setPos(key, vec2(float(touch.px), float(touch.py))); Input::setPos(key, vec2(float(state.touches[i].x), float(state.touches[i].y)));
Input::setDown(key, true); Input::setDown(key, true);
touchState[key - ikTouchA] = false; touchState[key - ikTouchA] = false;