diff --git a/Core/GameEngine/Include/Common/OptionPreferences.h b/Core/GameEngine/Include/Common/OptionPreferences.h index e461392b60a..8448ccd1a14 100644 --- a/Core/GameEngine/Include/Common/OptionPreferences.h +++ b/Core/GameEngine/Include/Common/OptionPreferences.h @@ -69,6 +69,7 @@ class OptionPreferences : public UserPreferences void setOnlineIPAddress(UnsignedInt IP); Bool getArchiveReplaysEnabled() const; Bool getAlternateMouseModeEnabled(); + Bool getRightMouseScrollWithAlternateMouseEnabled() const; Bool getRetaliationModeEnabled(); Bool getDoubleClickAttackMoveEnabled(); Real getScrollFactor(); diff --git a/Core/GameEngine/Source/Common/OptionPreferences.cpp b/Core/GameEngine/Source/Common/OptionPreferences.cpp index 9f9f5a08861..bab11cb7c76 100644 --- a/Core/GameEngine/Source/Common/OptionPreferences.cpp +++ b/Core/GameEngine/Source/Common/OptionPreferences.cpp @@ -203,6 +203,18 @@ Bool OptionPreferences::getAlternateMouseModeEnabled() return FALSE; } +Bool OptionPreferences::getRightMouseScrollWithAlternateMouseEnabled() const +{ + OptionPreferences::const_iterator it = find("UseRightMouseScrollWithAlternateMouse"); + if (it == end()) + return TheGlobalData->m_useRightMouseScrollWithAlternateMouse; + + if (stricmp(it->second.str(), "yes") == 0) { + return TRUE; + } + return FALSE; +} + Bool OptionPreferences::getRetaliationModeEnabled() { OptionPreferences::const_iterator it = find("Retaliation"); diff --git a/Generals/Code/GameEngine/Include/Common/GlobalData.h b/Generals/Code/GameEngine/Include/Common/GlobalData.h index a50397c5716..67264cbea62 100644 --- a/Generals/Code/GameEngine/Include/Common/GlobalData.h +++ b/Generals/Code/GameEngine/Include/Common/GlobalData.h @@ -139,6 +139,7 @@ class GlobalData : public SubsystemInterface Bool m_enableStaticLOD; Int m_terrainLODTargetTimeMS; Bool m_useAlternateMouse; + Bool m_useRightMouseScrollWithAlternateMouse; // TheSuperHackers @feature User option for RMB scroll in Alternate Mouse mode. Bool m_clientRetaliationModeEnabled; Bool m_doubleClickAttackMove; Bool m_rightMouseAlwaysScrolls; diff --git a/Generals/Code/GameEngine/Source/Common/GlobalData.cpp b/Generals/Code/GameEngine/Source/Common/GlobalData.cpp index 10ad9d034fe..3aabf4ca449 100644 --- a/Generals/Code/GameEngine/Source/Common/GlobalData.cpp +++ b/Generals/Code/GameEngine/Source/Common/GlobalData.cpp @@ -1038,7 +1038,15 @@ GlobalData::GlobalData() m_keyboardCameraRotateSpeed = 0.1f; + m_useAlternateMouse = FALSE; +#if RTS_GENERALS + // disable mouse scrolling in alternate mouse mode, per Harvard 7/15/03 + m_useRightMouseScrollWithAlternateMouse = FALSE; +#else + m_useRightMouseScrollWithAlternateMouse = TRUE; +#endif m_clientRetaliationModeEnabled = TRUE; //On by default. + m_doubleClickAttackMove = FALSE; } @@ -1187,6 +1195,7 @@ void GlobalData::parseGameDataDefinition( INI* ini ) // override INI values with user preferences OptionPreferences optionPref; TheWritableGlobalData->m_useAlternateMouse = optionPref.getAlternateMouseModeEnabled(); + TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = optionPref.getRightMouseScrollWithAlternateMouseEnabled(); TheWritableGlobalData->m_clientRetaliationModeEnabled = optionPref.getRetaliationModeEnabled(); TheWritableGlobalData->m_doubleClickAttackMove = optionPref.getDoubleClickAttackMoveEnabled(); TheWritableGlobalData->m_keyboardScrollFactor = optionPref.getScrollFactor(); diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index fb570143bf7..65e93db521b 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -579,6 +579,13 @@ static void saveOptions() TheWritableGlobalData->m_useAlternateMouse = GadgetCheckBoxIsChecked(checkAlternateMouse); (*pref)["UseAlternateMouse"] = TheWritableGlobalData->m_useAlternateMouse ? "yes" : "no"; + // TheSuperHackers @todo Add check box ? + { + Bool useRightMouseScrollWithAlternateMouse = pref->getRightMouseScrollWithAlternateMouseEnabled(); + (*pref)["UseRightMouseScrollWithAlternateMouse"] = useRightMouseScrollWithAlternateMouse ? "yes" : "no"; + TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = useRightMouseScrollWithAlternateMouse; + } + // TheSuperHackers @todo Add combo box ? { CursorCaptureMode mode = pref->getCursorCaptureMode(); diff --git a/Generals/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp b/Generals/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp index 55fae085a7b..60ae04c5384 100644 --- a/Generals/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp @@ -261,7 +261,9 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage m_anchor = msg->getArgument( 0 )->pixel; m_currentPos = msg->getArgument( 0 )->pixel; - if (!TheInGameUI->isSelecting() && !m_isScrolling) + const Bool userWantsRMBScroll = !TheGlobalData->m_useAlternateMouse || TheGlobalData->m_useRightMouseScrollWithAlternateMouse; + + if (userWantsRMBScroll && !TheInGameUI->isSelecting() && !m_isScrolling) { setScrolling(SCROLL_RMB); } diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h b/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h index e5133a71386..4c5130e1c05 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h @@ -140,6 +140,7 @@ class GlobalData : public SubsystemInterface Bool m_enableStaticLOD; Int m_terrainLODTargetTimeMS; Bool m_useAlternateMouse; + Bool m_useRightMouseScrollWithAlternateMouse; // TheSuperHackers @feature User option for RMB scroll in Alternate Mouse mode. Bool m_clientRetaliationModeEnabled; Bool m_doubleClickAttackMove; Bool m_rightMouseAlwaysScrolls; diff --git a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp index 31d8be1105d..9900029d48d 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp @@ -1053,7 +1053,15 @@ GlobalData::GlobalData() //-allAdvice feature //m_allAdvice = FALSE; + m_useAlternateMouse = FALSE; +#if RTS_GENERALS + // disable mouse scrolling in alternate mouse mode, per Harvard 7/15/03 + m_useRightMouseScrollWithAlternateMouse = FALSE; +#else + m_useRightMouseScrollWithAlternateMouse = TRUE; +#endif m_clientRetaliationModeEnabled = TRUE; //On by default. + m_doubleClickAttackMove = FALSE; } @@ -1194,6 +1202,7 @@ void GlobalData::parseGameDataDefinition( INI* ini ) // override INI values with user preferences OptionPreferences optionPref; TheWritableGlobalData->m_useAlternateMouse = optionPref.getAlternateMouseModeEnabled(); + TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = optionPref.getRightMouseScrollWithAlternateMouseEnabled(); TheWritableGlobalData->m_clientRetaliationModeEnabled = optionPref.getRetaliationModeEnabled(); TheWritableGlobalData->m_doubleClickAttackMove = optionPref.getDoubleClickAttackMoveEnabled(); TheWritableGlobalData->m_keyboardScrollFactor = optionPref.getScrollFactor(); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index a6654bea139..da4e4b04582 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -598,6 +598,13 @@ static void saveOptions() TheWritableGlobalData->m_useAlternateMouse = GadgetCheckBoxIsChecked(checkAlternateMouse); (*pref)["UseAlternateMouse"] = TheWritableGlobalData->m_useAlternateMouse ? "yes" : "no"; + // TheSuperHackers @todo Add check box ? + { + Bool useRightMouseScrollWithAlternateMouse = pref->getRightMouseScrollWithAlternateMouseEnabled(); + (*pref)["UseRightMouseScrollWithAlternateMouse"] = useRightMouseScrollWithAlternateMouse ? "yes" : "no"; + TheWritableGlobalData->m_useRightMouseScrollWithAlternateMouse = useRightMouseScrollWithAlternateMouse; + } + TheWritableGlobalData->m_clientRetaliationModeEnabled = GadgetCheckBoxIsChecked(checkRetaliation); (*pref)["Retaliation"] = TheWritableGlobalData->m_clientRetaliationModeEnabled? "yes" : "no"; diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp index 77a8177e436..b4ef8bfdbbb 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/LookAtXlat.cpp @@ -261,7 +261,9 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage m_anchor = msg->getArgument( 0 )->pixel; m_currentPos = msg->getArgument( 0 )->pixel; - if (!TheInGameUI->isSelecting() && !m_isScrolling) + const Bool userWantsRMBScroll = !TheGlobalData->m_useAlternateMouse || TheGlobalData->m_useRightMouseScrollWithAlternateMouse; + + if (userWantsRMBScroll && !TheInGameUI->isSelecting() && !m_isScrolling) { setScrolling(SCROLL_RMB); }