diff --git a/UnleashedRecomp/ui/options_menu.cpp b/UnleashedRecomp/ui/options_menu.cpp index 451c4f4..5236ff5 100644 --- a/UnleashedRecomp/ui/options_menu.cpp +++ b/UnleashedRecomp/ui/options_menu.cpp @@ -80,6 +80,7 @@ static double g_lockedOnTime; static double g_lastTappedTime; static double g_lastIncrementTime; static double g_lastIncrementSoundTime; +static double g_fastIncrementHoldTime; static constexpr size_t GRID_SIZE = 9; @@ -1050,31 +1051,33 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef* conf } else if constexpr (std::is_same_v || std::is_same_v) { - float deltaTime = ImGui::GetIO().DeltaTime; + float deltaTime = std::fmin(ImGui::GetIO().DeltaTime, 1.0f / 15.0f); - bool fastIncrement = (time - g_lastTappedTime) > 0.5; + bool fastIncrement = isSlider && (leftIsHeld || rightIsHeld) && (time - g_lastTappedTime) > 0.5; bool isPlayIncrementSound = true; constexpr double INCREMENT_TIME = 1.0 / 120.0; constexpr double INCREMENT_SOUND_TIME = 1.0 / 7.5; - if (isSlider) + if (fastIncrement) + g_fastIncrementHoldTime += deltaTime; + else + g_fastIncrementHoldTime = 0; + + if (fastIncrement) { - if (fastIncrement) - { - isPlayIncrementSound = (time - g_lastIncrementSoundTime) > INCREMENT_SOUND_TIME; + isPlayIncrementSound = (time - g_lastIncrementSoundTime) > INCREMENT_SOUND_TIME; - if ((time - g_lastIncrementTime) < INCREMENT_TIME) - fastIncrement = false; - else - g_lastIncrementTime = time; - } + if (g_fastIncrementHoldTime < INCREMENT_TIME) + fastIncrement = false; + else + g_lastIncrementTime = time; + } - if (fastIncrement) - { - decrement = leftIsHeld; - increment = rightIsHeld; - } + if (fastIncrement) + { + decrement = leftIsHeld; + increment = rightIsHeld; } do @@ -1094,9 +1097,10 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef* conf config->Value += 0.01f; } - deltaTime -= INCREMENT_TIME; + if (fastIncrement) + g_fastIncrementHoldTime -= INCREMENT_TIME; } - while (fastIncrement && deltaTime > 0.0f); + while (fastIncrement && g_fastIncrementHoldTime >= INCREMENT_TIME); bool isConfigValueInBounds = config->Value >= valueMin && config->Value <= valueMax;