diff --git a/Generals/Code/GameEngine/Include/GameClient/ControlBar.h b/Generals/Code/GameEngine/Include/GameClient/ControlBar.h index c8b686550b..2a0cf0823d 100644 --- a/Generals/Code/GameEngine/Include/GameClient/ControlBar.h +++ b/Generals/Code/GameEngine/Include/GameClient/ControlBar.h @@ -734,8 +734,6 @@ class ControlBar : public SubsystemInterface Player* getCurrentlyViewedPlayer(); /// Returns the relationship with the currently viewed player. May return NEUTRAL if no player is selected while observing. Relationship getCurrentlyViewedPlayerRelationship(const Team* team); - /// Returns the currently viewed player. Returns "Observer" if no player is selected while observing. - AsciiString getCurrentlyViewedPlayerSide(); // ControlBarResizer *getControlBarResizer( void ) {return m_controlBarResizer;} diff --git a/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp b/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp index eb1aadc85d..cba6fb5adb 100644 --- a/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -2273,7 +2273,7 @@ Bool Drawable::drawsAnyUIText( void ) return FALSE; const Object *obj = getObject(); - if ( !obj || obj->getControllingPlayer() != TheControlBar->getCurrentlyViewedPlayer()) + if ( !obj || obj->getControllingPlayer() != rts::getObservedOrLocalPlayer()) return FALSE; Player *owner = obj->getControllingPlayer(); @@ -2422,7 +2422,7 @@ void Drawable::drawAmmo( const IRegion2D *healthBarRegion ) if (!( TheGlobalData->m_showObjectHealth && (isSelected() || (TheInGameUI && (TheInGameUI->getMousedOverDrawableID() == getID()))) && - obj->getControllingPlayer() == TheControlBar->getCurrentlyViewedPlayer() + obj->getControllingPlayer() == rts::getObservedOrLocalPlayer() )) return; @@ -2480,7 +2480,7 @@ void Drawable::drawContained( const IRegion2D *healthBarRegion ) if (!( TheGlobalData->m_showObjectHealth && (isSelected() || (TheInGameUI && (TheInGameUI->getMousedOverDrawableID() == getID()))) && - obj->getControllingPlayer() == TheControlBar->getCurrentlyViewedPlayer() + obj->getControllingPlayer() == rts::getObservedOrLocalPlayer() )) return; @@ -2953,7 +2953,7 @@ void Drawable::drawBombed(const IRegion2D* healthBarRegion) UnsignedInt now = TheGameLogic->getFrame(); if( obj->testWeaponSetFlag( WEAPONSET_CARBOMB ) && - obj->getControllingPlayer() == TheControlBar->getCurrentlyViewedPlayer()) + obj->getControllingPlayer() == rts::getObservedOrLocalPlayer()) { if( !getIconInfo()->m_icon[ ICON_CARBOMB ] ) getIconInfo()->m_icon[ ICON_CARBOMB ] = newInstance(Anim2D)( s_animationTemplates[ ICON_CARBOMB ], TheAnim2DCollection ); diff --git a/Generals/Code/GameEngine/Source/GameClient/Eva.cpp b/Generals/Code/GameEngine/Source/GameClient/Eva.cpp index caa2a74013..da880e3c54 100644 --- a/Generals/Code/GameEngine/Source/GameClient/Eva.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/Eva.cpp @@ -28,6 +28,7 @@ #include "GameClient/ControlBar.h" #include "GameClient/Eva.h" +#include "Common/GameUtility.h" #include "Common/Player.h" #include "Common/PlayerList.h" #include "GameLogic/GameLogic.h" @@ -212,7 +213,7 @@ void Eva::update() return; } - m_localPlayer = TheControlBar->getCurrentlyViewedPlayer(); + m_localPlayer = rts::getObservedOrLocalPlayer(); UnsignedInt frame = TheGameLogic->getFrame(); // Don't update for the first few frames. This way, we don't have to deal with our initial power @@ -429,7 +430,7 @@ void Eva::processPlayingMessages(UnsignedInt currentFrame) } // We've got a winner! - AsciiString side = TheControlBar->getCurrentlyViewedPlayerSide(); + AsciiString side = rts::getObservedOrLocalPlayer()->getSide(); Int numSides = storedIt->m_evaInfo->m_evaSideSounds.size(); for (Int i = 0; i < numSides; ++i) { diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp index b85f42dc61..2b79ac726b 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp @@ -173,14 +173,6 @@ Relationship ControlBar::getCurrentlyViewedPlayerRelationship(const Team* team) return NEUTRAL; } -AsciiString ControlBar::getCurrentlyViewedPlayerSide() -{ - if (Player* player = getCurrentlyViewedPlayer()) - player->getSide(); - - return ThePlayerList->getLocalPlayer()->getSide(); -} - void ControlBar::populatePurchaseScience( Player* player ) { // TheInGameUI->deselectAllDrawables(); diff --git a/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp b/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp index bd9b5c51aa..4d0866732f 100644 --- a/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp @@ -5563,10 +5563,12 @@ void InGameUI::removeIdleWorker( Object *obj, Int playerNumber ) void InGameUI::selectNextIdleWorker( void ) { - Int index = TheControlBar->getCurrentlyViewedPlayer()->getPlayerIndex(); + Player* player = rts::getObservedOrLocalPlayer(); + Int index = player->getPlayerIndex(); + if(m_idleWorkers[index].empty()) { - DEBUG_ASSERTCRASH(FALSE, ("InGameUI::selectNextIdleWorker We're trying to select a worker when our list is empty for player %ls", ThePlayerList->getLocalPlayer()->getPlayerDisplayName().str())); + DEBUG_ASSERTCRASH(FALSE, ("InGameUI::selectNextIdleWorker We're trying to select a worker when our list is empty for player %ls", player->getPlayerDisplayName().str())); return; } Object *selectThisObject = NULL; @@ -5653,13 +5655,9 @@ ObjectPtrVector InGameUI::getUniqueIdleWorkers(const ObjectList& idleWorkers) Int InGameUI::getIdleWorkerCount( void ) { - if (Player* player = TheControlBar->getCurrentlyViewedPlayer()) - { - Int index = player->getPlayerIndex(); - return m_idleWorkers[index].size(); - } - - return 0; + Player* player = rts::getObservedOrLocalPlayer(); + Int index = player->getPlayerIndex(); + return m_idleWorkers[index].size(); } void InGameUI::showIdleWorkerLayout( void ) diff --git a/Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp b/Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp index f71498c242..f6130c6e9d 100644 --- a/Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp @@ -886,8 +886,8 @@ void findCommandCenterOrMostExpensiveBuilding(Object* obj, void* vccl) static void viewCommandCenter( void ) { - Player* localPlayer = TheControlBar->getCurrentlyViewedPlayer(); - if (!localPlayer) + Player* localPlayer = rts::getObservedOrLocalPlayer(); + if (!localPlayer->isPlayerActive()) return; CommandCenterLocator ccl; @@ -928,8 +928,8 @@ void amIAHero(Object* obj, void* heroHolder) static Object *iNeedAHero( void ) { - Player* localPlayer = TheControlBar->getCurrentlyViewedPlayer(); - if (!localPlayer) + Player* localPlayer = rts::getObservedOrLocalPlayer(); + if (!localPlayer->isPlayerActive()) return NULL; HeroHolder heroHolder; diff --git a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp index e6cfb5bf72..01e42c7e6e 100644 --- a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp +++ b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp @@ -56,6 +56,7 @@ #include #include +#include "Common/GameUtility.h" #include "Common/GlobalData.h" #include "Common/RandomValue.h" #include "Common/ThingFactory.h" @@ -223,7 +224,7 @@ void W3DWaypointBuffer::drawWaypoints(RenderInfoClass &rinfo) Int numPoints = 0; if( obj ) { - if ( obj->getControllingPlayer() != TheControlBar->getCurrentlyViewedPlayer()) + if ( obj->getControllingPlayer() != rts::getObservedOrLocalPlayer()) continue; ExitInterface *exitInterface = obj->getObjectExitInterface(); diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h b/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h index e15b68975c..3c4b388500 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h @@ -748,8 +748,6 @@ class ControlBar : public SubsystemInterface Player* getCurrentlyViewedPlayer(); /// Returns the relationship with the currently viewed player. May return NEUTRAL if no player is selected while observing. Relationship getCurrentlyViewedPlayerRelationship(const Team* team); - /// Returns the currently viewed player. Returns "Observer" if no player is selected while observing. - AsciiString getCurrentlyViewedPlayerSide(); // ControlBarResizer *getControlBarResizer( void ) {return m_controlBarResizer;} diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp index be5d3cb1fc..e96a787c51 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -2718,7 +2718,7 @@ Bool Drawable::drawsAnyUIText( void ) return FALSE; const Object *obj = getObject(); - if ( !obj || obj->getControllingPlayer() != TheControlBar->getCurrentlyViewedPlayer()) + if ( !obj || obj->getControllingPlayer() != rts::getObservedOrLocalPlayer()) return FALSE; Player *owner = obj->getControllingPlayer(); @@ -2871,7 +2871,7 @@ void Drawable::drawAmmo( const IRegion2D *healthBarRegion ) if (!( TheGlobalData->m_showObjectHealth && (isSelected() || (TheInGameUI && (TheInGameUI->getMousedOverDrawableID() == getID()))) && - obj->getControllingPlayer() == TheControlBar->getCurrentlyViewedPlayer() + obj->getControllingPlayer() == rts::getObservedOrLocalPlayer() )) return; @@ -2929,7 +2929,7 @@ void Drawable::drawContained( const IRegion2D *healthBarRegion ) if (!( TheGlobalData->m_showObjectHealth && (isSelected() || (TheInGameUI && (TheInGameUI->getMousedOverDrawableID() == getID()))) && - obj->getControllingPlayer() == TheControlBar->getCurrentlyViewedPlayer() + obj->getControllingPlayer() == rts::getObservedOrLocalPlayer() )) return; @@ -3447,7 +3447,7 @@ void Drawable::drawBombed(const IRegion2D* healthBarRegion) UnsignedInt now = TheGameLogic->getFrame(); if( obj->testWeaponSetFlag( WEAPONSET_CARBOMB ) && - obj->getControllingPlayer() == TheControlBar->getCurrentlyViewedPlayer()) + obj->getControllingPlayer() == rts::getObservedOrLocalPlayer()) { if( !getIconInfo()->m_icon[ ICON_CARBOMB ] ) getIconInfo()->m_icon[ ICON_CARBOMB ] = newInstance(Anim2D)( s_animationTemplates[ ICON_CARBOMB ], TheAnim2DCollection ); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp index 7e6391fef7..bb5d863ed5 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp @@ -28,6 +28,7 @@ #include "GameClient/ControlBar.h" #include "GameClient/Eva.h" +#include "Common/GameUtility.h" #include "Common/Player.h" #include "Common/PlayerList.h" #include "GameLogic/GameLogic.h" @@ -284,7 +285,7 @@ void Eva::update() return; } - m_localPlayer = TheControlBar->getCurrentlyViewedPlayer(); + m_localPlayer = rts::getObservedOrLocalPlayer(); UnsignedInt frame = TheGameLogic->getFrame(); // Don't update for the first few frames. This way, we don't have to deal with our initial power @@ -503,7 +504,7 @@ void Eva::processPlayingMessages(UnsignedInt currentFrame) } // We've got a winner! - AsciiString side = TheControlBar->getCurrentlyViewedPlayerSide(); + AsciiString side = rts::getObservedOrLocalPlayer()->getSide(); Int numSides = storedIt->m_evaInfo->m_evaSideSounds.size(); // clear it. If we can't find the side we want, don't play anything diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp index c357ad30c3..9f7d0e1053 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp @@ -174,14 +174,6 @@ Relationship ControlBar::getCurrentlyViewedPlayerRelationship(const Team* team) return NEUTRAL; } -AsciiString ControlBar::getCurrentlyViewedPlayerSide() -{ - if (Player* player = getCurrentlyViewedPlayer()) - return player->getSide(); - - return ThePlayerList->getLocalPlayer()->getSide(); -} - void ControlBar::populatePurchaseScience( Player* player ) { // TheInGameUI->deselectAllDrawables(); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp index ed8d6e0cc2..0e6e39eea4 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp @@ -5736,10 +5736,12 @@ void InGameUI::removeIdleWorker( Object *obj, Int playerNumber ) void InGameUI::selectNextIdleWorker( void ) { - Int index = TheControlBar->getCurrentlyViewedPlayer()->getPlayerIndex(); + Player* player = rts::getObservedOrLocalPlayer(); + Int index = player->getPlayerIndex(); + if(m_idleWorkers[index].empty()) { - DEBUG_ASSERTCRASH(FALSE, ("InGameUI::selectNextIdleWorker We're trying to select a worker when our list is empty for player %ls", ThePlayerList->getLocalPlayer()->getPlayerDisplayName().str())); + DEBUG_ASSERTCRASH(FALSE, ("InGameUI::selectNextIdleWorker We're trying to select a worker when our list is empty for player %ls", player->getPlayerDisplayName().str())); return; } Object *selectThisObject = NULL; @@ -5826,13 +5828,9 @@ ObjectPtrVector InGameUI::getUniqueIdleWorkers(const ObjectList& idleWorkers) Int InGameUI::getIdleWorkerCount( void ) { - if (Player* player = TheControlBar->getCurrentlyViewedPlayer()) - { - Int index = player->getPlayerIndex(); - return m_idleWorkers[index].size(); - } - - return 0; + Player* player = rts::getObservedOrLocalPlayer(); + Int index = player->getPlayerIndex(); + return m_idleWorkers[index].size(); } void InGameUI::showIdleWorkerLayout( void ) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp index 633474ef7f..15df18fc36 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp @@ -944,8 +944,8 @@ void findCommandCenterOrMostExpensiveBuilding(Object* obj, void* vccl) static void viewCommandCenter( void ) { - Player* localPlayer = TheControlBar->getCurrentlyViewedPlayer(); - if (!localPlayer) + Player* localPlayer = rts::getObservedOrLocalPlayer(); + if (!localPlayer->isPlayerActive()) return; CommandCenterLocator ccl; @@ -986,8 +986,8 @@ void amIAHero(Object* obj, void* heroHolder) static Object *iNeedAHero( void ) { - Player* localPlayer = TheControlBar->getCurrentlyViewedPlayer(); - if (!localPlayer) + Player* localPlayer = rts::getObservedOrLocalPlayer(); + if (!localPlayer->isPlayerActive()) return NULL; HeroHolder heroHolder; diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp index 3c531c5fc6..6c073b501d 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp @@ -56,6 +56,7 @@ #include #include +#include "Common/GameUtility.h" #include "Common/GlobalData.h" #include "Common/RandomValue.h" #include "Common/ThingFactory.h" @@ -230,7 +231,7 @@ void W3DWaypointBuffer::drawWaypoints(RenderInfoClass &rinfo) Int numPoints = 0; if( obj ) { - if ( obj->getControllingPlayer() != TheControlBar->getCurrentlyViewedPlayer()) + if ( obj->getControllingPlayer() != rts::getObservedOrLocalPlayer()) continue;