Skip to content
40 changes: 22 additions & 18 deletions UnleashedRecomp/ui/options_menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -1049,31 +1050,33 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* conf
}
else if constexpr (std::is_same_v<T, float> || std::is_same_v<T, int32_t>)
{
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
Expand All @@ -1093,9 +1096,10 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* 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;

Expand Down