From bac96bd47c12414ead56bb52544f409ea421eff5 Mon Sep 17 00:00:00 2001 From: iota97 Date: Sat, 7 Aug 2021 12:47:50 +0200 Subject: [PATCH] Allow to disable right analog diagonal --- Core/Config.cpp | 1 + Core/Config.h | 1 + UI/GamepadEmu.cpp | 8 ++++---- UI/TouchControlVisibilityScreen.cpp | 4 ++++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index 21208ea10f..42bed7e5aa 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -548,6 +548,7 @@ static ConfigSetting generalSettings[] = { ConfigSetting("RightAnalogRight", &g_Config.iRightAnalogRight, 0, true, true), ConfigSetting("RightAnalogPress", &g_Config.iRightAnalogPress, 0, true, true), ConfigSetting("RightAnalogCustom", &g_Config.bRightAnalogCustom, false, true, true), + ConfigSetting("RightAnalogDisableDiagonal", &g_Config.bRightAnalogDisableDiagonal, false, true, true), // "default" means let emulator decide, "" means disable. ConfigSetting("ReportingHost", &g_Config.sReportHost, "default"), diff --git a/Core/Config.h b/Core/Config.h index 6971630841..a19d3541cb 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -315,6 +315,7 @@ public: int iRightAnalogRight; int iRightAnalogPress; bool bRightAnalogCustom; + bool bRightAnalogDisableDiagonal; // Disable diagonals bool bDisableDpadDiagonals; diff --git a/UI/GamepadEmu.cpp b/UI/GamepadEmu.cpp index f0adecd093..5d18052ed2 100644 --- a/UI/GamepadEmu.cpp +++ b/UI/GamepadEmu.cpp @@ -529,25 +529,25 @@ void PSPCustomStick::ProcessTouch(float x, float y, bool down) { dy = std::min(1.0f, std::max(-1.0f, dy)); if (g_Config.iRightAnalogRight != 0) { - if (dx > 0.5f) + if (dx > 0.5f && (!g_Config.bRightAnalogDisableDiagonal || fabs(dx) > fabs(dy))) __CtrlButtonDown(button[g_Config.iRightAnalogRight-1]); else __CtrlButtonUp(button[g_Config.iRightAnalogRight-1]); } if (g_Config.iRightAnalogLeft != 0) { - if (dx < -0.5f) + if (dx < -0.5f && (!g_Config.bRightAnalogDisableDiagonal || fabs(dx) > fabs(dy))) __CtrlButtonDown(button[g_Config.iRightAnalogLeft-1]); else __CtrlButtonUp(button[g_Config.iRightAnalogLeft-1]); } if (g_Config.iRightAnalogUp != 0) { - if (dy < -0.5f) + if (dy < -0.5f && (!g_Config.bRightAnalogDisableDiagonal || fabs(dx) <= fabs(dy))) __CtrlButtonDown(button[g_Config.iRightAnalogUp-1]); else __CtrlButtonUp(button[g_Config.iRightAnalogUp-1]); } if (g_Config.iRightAnalogDown != 0) { - if (dy > 0.5f) + if (dy > 0.5f && (!g_Config.bRightAnalogDisableDiagonal || fabs(dx) <= fabs(dy))) __CtrlButtonDown(button[g_Config.iRightAnalogDown-1]); else __CtrlButtonUp(button[g_Config.iRightAnalogDown-1]); diff --git a/UI/TouchControlVisibilityScreen.cpp b/UI/TouchControlVisibilityScreen.cpp index 4876306b89..25c0cc60c3 100644 --- a/UI/TouchControlVisibilityScreen.cpp +++ b/UI/TouchControlVisibilityScreen.cpp @@ -174,8 +174,12 @@ void RightAnalogMappingScreen::CreateViews() { static const char *rightAnalogButton[] = {"None", "L", "R", "Square", "Triangle", "Circle", "Cross", "D-pad up", "D-pad down", "D-pad left", "D-pad right", "Start", "Select"}; + vert->Add(new ItemHeader(co->T("Analog Style"))); vert->Add(new CheckBox(&g_Config.touchRightAnalogStick.show, co->T("Visible"))); vert->Add(new CheckBox(&g_Config.bRightAnalogCustom, co->T("Use custom right analog"))); + vert->Add(new CheckBox(&g_Config.bRightAnalogDisableDiagonal, co->T("Disable diagonal input")))->SetEnabledPtr(&g_Config.bRightAnalogCustom); + + vert->Add(new ItemHeader(co->T("Analog Binding"))); PopupMultiChoice *rightAnalogUp = vert->Add(new PopupMultiChoice(&g_Config.iRightAnalogUp, mc->T("RightAn.Up"), rightAnalogButton, 0, ARRAY_SIZE(rightAnalogButton), mc->GetName(), screenManager())); PopupMultiChoice *rightAnalogDown = vert->Add(new PopupMultiChoice(&g_Config.iRightAnalogDown, mc->T("RightAn.Down"), rightAnalogButton, 0, ARRAY_SIZE(rightAnalogButton), mc->GetName(), screenManager())); PopupMultiChoice *rightAnalogLeft = vert->Add(new PopupMultiChoice(&g_Config.iRightAnalogLeft, mc->T("RightAn.Left"), rightAnalogButton, 0, ARRAY_SIZE(rightAnalogButton), mc->GetName(), screenManager()));