Skip to content

Commit 59d4c29

Browse files
authored
feat(options): Implement user option to toggle Right Mouse Scroll with Alternate Mouse (TheSuperHackers#2798)
Toggle with UseRightMouseScrollWithAlternateMouse=yes/no in Options.ini
1 parent 2339194 commit 59d4c29

10 files changed

Lines changed: 53 additions & 2 deletions

File tree

Core/GameEngine/Include/Common/OptionPreferences.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class OptionPreferences : public UserPreferences
6969
void setOnlineIPAddress(UnsignedInt IP);
7070
Bool getArchiveReplaysEnabled() const;
7171
Bool getAlternateMouseModeEnabled();
72+
Bool getRightMouseScrollWithAlternateMouseEnabled() const;
7273
Bool getRetaliationModeEnabled();
7374
Bool getDoubleClickAttackMoveEnabled();
7475
Real getScrollFactor();

Core/GameEngine/Source/Common/OptionPreferences.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,18 @@ Bool OptionPreferences::getAlternateMouseModeEnabled()
203203
return FALSE;
204204
}
205205

206+
Bool OptionPreferences::getRightMouseScrollWithAlternateMouseEnabled() const
207+
{
208+
OptionPreferences::const_iterator it = find("UseRightMouseScrollWithAlternateMouse");
209+
if (it == end())
210+
return TheGlobalData->m_useRightMouseScrollWithAlternateMouse;
211+
212+
if (stricmp(it->second.str(), "yes") == 0) {
213+
return TRUE;
214+
}
215+
return FALSE;
216+
}
217+
206218
Bool OptionPreferences::getRetaliationModeEnabled()
207219
{
208220
OptionPreferences::const_iterator it = find("Retaliation");

Generals/Code/GameEngine/Include/Common/GlobalData.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class GlobalData : public SubsystemInterface
139139
Bool m_enableStaticLOD;
140140
Int m_terrainLODTargetTimeMS;
141141
Bool m_useAlternateMouse;
142+
Bool m_useRightMouseScrollWithAlternateMouse; // TheSuperHackers @feature User option for RMB scroll in Alternate Mouse mode.
142143
Bool m_clientRetaliationModeEnabled;
143144
Bool m_doubleClickAttackMove;
144145
Bool m_rightMouseAlwaysScrolls;

Generals/Code/GameEngine/Source/Common/GlobalData.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,15 @@ GlobalData::GlobalData()
10381038

10391039
m_keyboardCameraRotateSpeed = 0.1f;
10401040

1041+
m_useAlternateMouse = FALSE;
1042+
#if RTS_GENERALS
1043+
// disable mouse scrolling in alternate mouse mode, per Harvard 7/15/03
1044+
m_useRightMouseScrollWithAlternateMouse = FALSE;
1045+
#else
1046+
m_useRightMouseScrollWithAlternateMouse = TRUE;
1047+
#endif
10411048
m_clientRetaliationModeEnabled = TRUE; //On by default.
1049+
m_doubleClickAttackMove = FALSE;
10421050

10431051
}
10441052

@@ -1187,6 +1195,7 @@ void GlobalData::parseGameDataDefinition( INI* ini )
11871195
// override INI values with user preferences
11881196
OptionPreferences optionPref;
11891197
TheWritableGlobalData->m_useAlternateMouse = optionPref.getAlternateMouseModeEnabled();
1198+
TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = optionPref.getRightMouseScrollWithAlternateMouseEnabled();
11901199
TheWritableGlobalData->m_clientRetaliationModeEnabled = optionPref.getRetaliationModeEnabled();
11911200
TheWritableGlobalData->m_doubleClickAttackMove = optionPref.getDoubleClickAttackMoveEnabled();
11921201
TheWritableGlobalData->m_keyboardScrollFactor = optionPref.getScrollFactor();

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,13 @@ static void saveOptions()
579579
TheWritableGlobalData->m_useAlternateMouse = GadgetCheckBoxIsChecked(checkAlternateMouse);
580580
(*pref)["UseAlternateMouse"] = TheWritableGlobalData->m_useAlternateMouse ? "yes" : "no";
581581

582+
// TheSuperHackers @todo Add check box ?
583+
{
584+
Bool useRightMouseScrollWithAlternateMouse = pref->getRightMouseScrollWithAlternateMouseEnabled();
585+
(*pref)["UseRightMouseScrollWithAlternateMouse"] = useRightMouseScrollWithAlternateMouse ? "yes" : "no";
586+
TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = useRightMouseScrollWithAlternateMouse;
587+
}
588+
582589
// TheSuperHackers @todo Add combo box ?
583590
{
584591
CursorCaptureMode mode = pref->getCursorCaptureMode();

Generals/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,9 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
261261
m_anchor = msg->getArgument( 0 )->pixel;
262262
m_currentPos = msg->getArgument( 0 )->pixel;
263263

264-
if (!TheInGameUI->isSelecting() && !m_isScrolling)
264+
const Bool userWantsRMBScroll = !TheGlobalData->m_useAlternateMouse || TheGlobalData->m_useRightMouseScrollWithAlternateMouse;
265+
266+
if (userWantsRMBScroll && !TheInGameUI->isSelecting() && !m_isScrolling)
265267
{
266268
setScrolling(SCROLL_RMB);
267269
}

GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ class GlobalData : public SubsystemInterface
140140
Bool m_enableStaticLOD;
141141
Int m_terrainLODTargetTimeMS;
142142
Bool m_useAlternateMouse;
143+
Bool m_useRightMouseScrollWithAlternateMouse; // TheSuperHackers @feature User option for RMB scroll in Alternate Mouse mode.
143144
Bool m_clientRetaliationModeEnabled;
144145
Bool m_doubleClickAttackMove;
145146
Bool m_rightMouseAlwaysScrolls;

GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,15 @@ GlobalData::GlobalData()
10531053
//-allAdvice feature
10541054
//m_allAdvice = FALSE;
10551055

1056+
m_useAlternateMouse = FALSE;
1057+
#if RTS_GENERALS
1058+
// disable mouse scrolling in alternate mouse mode, per Harvard 7/15/03
1059+
m_useRightMouseScrollWithAlternateMouse = FALSE;
1060+
#else
1061+
m_useRightMouseScrollWithAlternateMouse = TRUE;
1062+
#endif
10561063
m_clientRetaliationModeEnabled = TRUE; //On by default.
1064+
m_doubleClickAttackMove = FALSE;
10571065

10581066
}
10591067

@@ -1194,6 +1202,7 @@ void GlobalData::parseGameDataDefinition( INI* ini )
11941202
// override INI values with user preferences
11951203
OptionPreferences optionPref;
11961204
TheWritableGlobalData->m_useAlternateMouse = optionPref.getAlternateMouseModeEnabled();
1205+
TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = optionPref.getRightMouseScrollWithAlternateMouseEnabled();
11971206
TheWritableGlobalData->m_clientRetaliationModeEnabled = optionPref.getRetaliationModeEnabled();
11981207
TheWritableGlobalData->m_doubleClickAttackMove = optionPref.getDoubleClickAttackMoveEnabled();
11991208
TheWritableGlobalData->m_keyboardScrollFactor = optionPref.getScrollFactor();

GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,13 @@ static void saveOptions()
598598
TheWritableGlobalData->m_useAlternateMouse = GadgetCheckBoxIsChecked(checkAlternateMouse);
599599
(*pref)["UseAlternateMouse"] = TheWritableGlobalData->m_useAlternateMouse ? "yes" : "no";
600600

601+
// TheSuperHackers @todo Add check box ?
602+
{
603+
Bool useRightMouseScrollWithAlternateMouse = pref->getRightMouseScrollWithAlternateMouseEnabled();
604+
(*pref)["UseRightMouseScrollWithAlternateMouse"] = useRightMouseScrollWithAlternateMouse ? "yes" : "no";
605+
TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = useRightMouseScrollWithAlternateMouse;
606+
}
607+
601608
TheWritableGlobalData->m_clientRetaliationModeEnabled = GadgetCheckBoxIsChecked(checkRetaliation);
602609
(*pref)["Retaliation"] = TheWritableGlobalData->m_clientRetaliationModeEnabled? "yes" : "no";
603610

GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,9 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
261261
m_anchor = msg->getArgument( 0 )->pixel;
262262
m_currentPos = msg->getArgument( 0 )->pixel;
263263

264-
if (!TheInGameUI->isSelecting() && !m_isScrolling)
264+
const Bool userWantsRMBScroll = !TheGlobalData->m_useAlternateMouse || TheGlobalData->m_useRightMouseScrollWithAlternateMouse;
265+
266+
if (userWantsRMBScroll && !TheInGameUI->isSelecting() && !m_isScrolling)
265267
{
266268
setScrolling(SCROLL_RMB);
267269
}

0 commit comments

Comments
 (0)