fix: Prevent gamemode slider movement when hardcore mode is enabled

Add virtual `canMoveSlider` method to UIScene base class and override it
in both LoadMenu and CreateWorldMenu scenes. The method returns false
when attempting to move the gamemode slider while hardcore mode is active,
effectively locking the slider in that state.

The UIController now checks `canMoveSlider` before initiating a slider
drag and during ongoing drag updates.
This commit is contained in:
George V. 2026-04-13 17:16:22 +03:00
parent 4b147be21d
commit 6d98c4ebf6
No known key found for this signature in database
GPG key ID: 1DB61094F2DD4982
6 changed files with 28 additions and 3 deletions

View file

@ -1104,8 +1104,11 @@ void UIController::tickInput()
if (sceneMouseX >= cx && sceneMouseX <= cx + cw && sceneMouseY >= cy && sceneMouseY <= cy + ch)
{
m_mouseDraggingSliderScene = pScene->getSceneType();
m_mouseDraggingSliderId = pSlider->getId();
if (pScene->canMoveSlider(pSlider->getId()))
{
m_mouseDraggingSliderScene = pScene->getSceneType();
m_mouseDraggingSliderId = pSlider->getId();
}
break;
}
}
@ -1115,7 +1118,7 @@ void UIController::tickInput()
if (leftDown && m_mouseDraggingSliderScene == pScene->getSceneType() && m_mouseDraggingSliderId >= 0)
{
UIControl_Slider *pSlider = FindSliderById(pScene, m_mouseDraggingSliderId);
if (pSlider && pSlider->getVisible())
if (pSlider && pSlider->getVisible() && pScene->canMoveSlider(m_mouseDraggingSliderId))
{
pSlider->UpdateControl();
S32 sliderX = pSlider->getXPos() + panelOffsetX;

View file

@ -253,6 +253,8 @@ protected:
virtual void handleCheckboxToggled(F64 controlId, bool selected) {}
virtual void handleSliderMove(F64 sliderId, F64 currentValue) {}
virtual void handleAnimationEnd() {}
public:
virtual bool canMoveSlider(F64 sliderId) { return true; }
virtual void handleSelectionChanged(F64 selectedId) {}
virtual void handleRequestMoreData(F64 startIndex, bool up) {}
virtual void handleTouchBoxRebuild() {}

View file

@ -722,6 +722,16 @@ void UIScene_CreateWorldMenu::handleSliderMove(F64 sliderId, F64 currentValue)
}
}
bool UIScene_CreateWorldMenu::canMoveSlider(F64 sliderId)
{
// Prevent gamemode slider movement when hardcore is enabled
if (sliderId == eControl_GameModeToggle && s_bHardcore)
return false;
return true;
}
void UIScene_CreateWorldMenu::handleTimerComplete(int id)
{
#ifdef __PSVITA__

View file

@ -74,6 +74,7 @@ protected:
virtual void handleTimerComplete(int id);
virtual void handleGainFocus(bool navBack);
virtual bool canMoveSlider(F64 sliderId);
public:
// INPUT

View file

@ -1040,6 +1040,14 @@ void UIScene_LoadMenu::handleSliderMove(F64 sliderId, F64 currentValue)
}
}
bool UIScene_LoadMenu::canMoveSlider(F64 sliderId)
{
if (sliderId == eControl_GameMode && m_bHardcore)
return false;
return true;
}
void UIScene_LoadMenu::handleTouchBoxRebuild()
{
m_bRebuildTouchBoxes = true;

View file

@ -100,6 +100,7 @@ protected:
void handlePress(F64 controlId, F64 childId);
void handleSliderMove(F64 sliderId, F64 currentValue);
virtual void handleGainFocus(bool navBack);
virtual bool canMoveSlider(F64 sliderId);
private:
void StartSharedLaunchFlow();