From 0c5e7c1a92ebc5a9ee94980b9e7b4e6ab759e079 Mon Sep 17 00:00:00 2001 From: Xphalnos <164882787+Xphalnos@users.noreply.github.com> Date: Fri, 3 Jan 2025 13:02:20 +0100 Subject: [PATCH] pad: Configurable DeadZone --- src/common/config.cpp | 14 ++++++++++++++ src/common/config.h | 2 ++ src/core/libraries/pad/pad.cpp | 8 ++++---- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/common/config.cpp b/src/common/config.cpp index 246644e2d..6597b1f01 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -44,6 +44,8 @@ static std::string logFilter; static std::string logType = "async"; static std::string userName = "shadPS4"; static std::string updateChannel; +static u16 deadZoneLeft = 2.0; +static u16 deadZoneRight = 2.0; static std::string backButtonBehavior = "left"; static bool useSpecialPad = false; static int specialPadClass = 1; @@ -124,6 +126,14 @@ bool getEnableDiscordRPC() { return enableDiscordRPC; } +u16 leftDeadZone() { + return deadZoneLeft; +} + +u16 rightDeadZone() { + return deadZoneRight; +} + s16 getCursorState() { return cursorState; } @@ -589,6 +599,8 @@ void load(const std::filesystem::path& path) { if (data.contains("Input")) { const toml::value& input = data.at("Input"); + deadZoneLeft = toml::find_or(input, "deadZoneLeft", 2.0); + deadZoneRight = toml::find_or(input, "deadZoneRight", 2.0); cursorState = toml::find_or(input, "cursorState", HideCursorState::Idle); cursorHideTimeout = toml::find_or(input, "cursorHideTimeout", 5); backButtonBehavior = toml::find_or(input, "backButtonBehavior", "left"); @@ -704,6 +716,8 @@ void save(const std::filesystem::path& path) { data["General"]["separateUpdateEnabled"] = separateupdatefolder; data["General"]["compatibilityEnabled"] = compatibilityData; data["General"]["checkCompatibilityOnStartup"] = checkCompatibilityOnStartup; + data["Input"]["deadZoneLeft"] = deadZoneLeft; + data["Input"]["deadZoneRight"] = deadZoneRight; data["Input"]["cursorState"] = cursorState; data["Input"]["cursorHideTimeout"] = cursorHideTimeout; data["Input"]["backButtonBehavior"] = backButtonBehavior; diff --git a/src/common/config.h b/src/common/config.h index 9d943008b..bd8928a13 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -33,6 +33,8 @@ std::string getLogType(); std::string getUserName(); std::string getUpdateChannel(); +u16 leftDeadZone(); +u16 rightDeadZone(); s16 getCursorState(); int getCursorHideTimeout(); std::string getBackButtonBehavior(); diff --git a/src/core/libraries/pad/pad.cpp b/src/core/libraries/pad/pad.cpp index 7eb628a90..6837267e5 100644 --- a/src/core/libraries/pad/pad.cpp +++ b/src/core/libraries/pad/pad.cpp @@ -93,8 +93,8 @@ int PS4_SYSV_ABI scePadGetControllerInformation(s32 handle, OrbisPadControllerIn pInfo->touchPadInfo.pixelDensity = 1; pInfo->touchPadInfo.resolution.x = 1920; pInfo->touchPadInfo.resolution.y = 950; - pInfo->stickInfo.deadZoneLeft = 2; - pInfo->stickInfo.deadZoneRight = 2; + pInfo->stickInfo.deadZoneLeft = Config::leftDeadZone(); + pInfo->stickInfo.deadZoneRight = Config::rightDeadZone(); pInfo->connectionType = ORBIS_PAD_PORT_TYPE_STANDARD; pInfo->connectedCount = 1; pInfo->connected = false; @@ -104,8 +104,8 @@ int PS4_SYSV_ABI scePadGetControllerInformation(s32 handle, OrbisPadControllerIn pInfo->touchPadInfo.pixelDensity = 1; pInfo->touchPadInfo.resolution.x = 1920; pInfo->touchPadInfo.resolution.y = 950; - pInfo->stickInfo.deadZoneLeft = 2; - pInfo->stickInfo.deadZoneRight = 2; + pInfo->stickInfo.deadZoneLeft = Config::leftDeadZone(); + pInfo->stickInfo.deadZoneRight = Config::rightDeadZone(); pInfo->connectionType = ORBIS_PAD_PORT_TYPE_STANDARD; pInfo->connectedCount = 1; pInfo->connected = true;