Skip to content

Commit 3ed92d4

Browse files
committed
feat: Observers can now select the next idle worker of the currently viewed player
1 parent 06c6b3b commit 3ed92d4

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarObserver.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ static NameKeyType buttonCancelID = NAMEKEY_INVALID;
8989

9090
static GameWindow *winFlag = NULL;
9191
static GameWindow *winGeneralPortrait = NULL;
92+
static GameWindow *buttonIdleWorker = NULL;
9293
static GameWindow *staticTextNumberOfUnits = NULL;
9394
static GameWindow *staticTextNumberOfBuildings = NULL;
9495
static GameWindow *staticTextNumberOfUnitsKilled = NULL;
@@ -123,6 +124,7 @@ void ControlBar::initObserverControls( void )
123124
staticTextPlayerName = TheWindowManager->winGetWindowFromId(NULL, TheNameKeyGenerator->nameToKey("ControlBar.wnd:StaticTextPlayerName"));
124125
winFlag = TheWindowManager->winGetWindowFromId(NULL, TheNameKeyGenerator->nameToKey("ControlBar.wnd:WinFlag"));
125126
winGeneralPortrait = TheWindowManager->winGetWindowFromId(NULL, TheNameKeyGenerator->nameToKey("ControlBar.wnd:WinGeneralPortrait"));
127+
buttonIdleWorker = TheWindowManager->winGetWindowFromId(NULL, NAMEKEY("ControlBar.wnd:ButtonIdleWorker"));
126128

127129
buttonCancelID = TheNameKeyGenerator->nameToKey("ControlBar.wnd:ButtonCancel");
128130
}
@@ -163,6 +165,7 @@ WindowMsgHandledType ControlBarObserverSystem( GameWindow *window, UnsignedInt m
163165
TheControlBar->setObserverLookAtPlayer(NULL);
164166
ObserverPlayerInfoWindow->winHide(TRUE);
165167
ObserverPlayerListWindow->winHide(FALSE);
168+
buttonIdleWorker->winHide(TRUE);
166169
TheControlBar->populateObserverList();
167170

168171
}
@@ -301,6 +304,7 @@ void ControlBar::populateObserverInfoWindow ( void )
301304
{
302305
ObserverPlayerInfoWindow->winHide(TRUE);
303306
ObserverPlayerListWindow->winHide(FALSE);
307+
buttonIdleWorker->winHide(TRUE);
304308
populateObserverList();
305309
return;
306310
}
@@ -338,4 +342,5 @@ void ControlBar::populateObserverInfoWindow ( void )
338342
staticTextPlayerName->winSetEnabledTextColors(color, GameMakeColor(0,0,0,255));
339343
winFlag->winSetEnabledImage(0, m_observerLookAtPlayer->getPlayerTemplate()->getFlagWaterMarkImage());
340344
winGeneralPortrait->winHide(FALSE);
345+
buttonIdleWorker->winHide(FALSE);
341346
}

Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5428,7 +5428,7 @@ void InGameUI::removeIdleWorker( Object *obj, Int playerNumber )
54285428

54295429
void InGameUI::selectNextIdleWorker( void )
54305430
{
5431-
Int index = ThePlayerList->getLocalPlayer()->getPlayerIndex();
5431+
Int index = TheControlBar->getCurrentlyViewedPlayer()->getPlayerIndex();
54325432
if(m_idleWorkers[index].empty())
54335433
{
54345434
DEBUG_ASSERTCRASH(FALSE, ("InGameUI::selectNextIdleWorker We're trying to select a worker when our list is empty for player %ls", ThePlayerList->getLocalPlayer()->getPlayerDisplayName().str()));
@@ -5518,8 +5518,13 @@ ObjectPtrVector InGameUI::getUniqueIdleWorkers(const ObjectList& idleWorkers)
55185518

55195519
Int InGameUI::getIdleWorkerCount( void )
55205520
{
5521-
Int index = ThePlayerList->getLocalPlayer()->getPlayerIndex();
5522-
return m_idleWorkers[index].size();
5521+
if (Player* player = TheControlBar->getCurrentlyViewedPlayer())
5522+
{
5523+
Int index = player->getPlayerIndex();
5524+
return m_idleWorkers[index].size();
5525+
}
5526+
5527+
return 0;
55235528
}
55245529

55255530
void InGameUI::showIdleWorkerLayout( void )

GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarObserver.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ static NameKeyType buttonCancelID = NAMEKEY_INVALID;
8989

9090
static GameWindow *winFlag = NULL;
9191
static GameWindow *winGeneralPortrait = NULL;
92+
static GameWindow *buttonIdleWorker = NULL;
9293
static GameWindow *staticTextNumberOfUnits = NULL;
9394
static GameWindow *staticTextNumberOfBuildings = NULL;
9495
static GameWindow *staticTextNumberOfUnitsKilled = NULL;
@@ -123,6 +124,7 @@ void ControlBar::initObserverControls( void )
123124
staticTextPlayerName = TheWindowManager->winGetWindowFromId(NULL, TheNameKeyGenerator->nameToKey("ControlBar.wnd:StaticTextPlayerName"));
124125
winFlag = TheWindowManager->winGetWindowFromId(NULL, TheNameKeyGenerator->nameToKey("ControlBar.wnd:WinFlag"));
125126
winGeneralPortrait = TheWindowManager->winGetWindowFromId(NULL, TheNameKeyGenerator->nameToKey("ControlBar.wnd:WinGeneralPortrait"));
127+
buttonIdleWorker = TheWindowManager->winGetWindowFromId(NULL, NAMEKEY("ControlBar.wnd:ButtonIdleWorker"));
126128

127129
buttonCancelID = TheNameKeyGenerator->nameToKey("ControlBar.wnd:ButtonCancel");
128130
}
@@ -163,6 +165,7 @@ WindowMsgHandledType ControlBarObserverSystem( GameWindow *window, UnsignedInt m
163165
TheControlBar->setObserverLookAtPlayer(NULL);
164166
ObserverPlayerInfoWindow->winHide(TRUE);
165167
ObserverPlayerListWindow->winHide(FALSE);
168+
buttonIdleWorker->winHide(TRUE);
166169
TheControlBar->populateObserverList();
167170

168171
}
@@ -301,6 +304,7 @@ void ControlBar::populateObserverInfoWindow ( void )
301304
{
302305
ObserverPlayerInfoWindow->winHide(TRUE);
303306
ObserverPlayerListWindow->winHide(FALSE);
307+
buttonIdleWorker->winHide(TRUE);
304308
populateObserverList();
305309
return;
306310
}
@@ -338,4 +342,5 @@ void ControlBar::populateObserverInfoWindow ( void )
338342
staticTextPlayerName->winSetEnabledTextColors(color, GameMakeColor(0,0,0,255));
339343
winFlag->winSetEnabledImage(0, m_observerLookAtPlayer->getPlayerTemplate()->getFlagWaterMarkImage());
340344
winGeneralPortrait->winHide(FALSE);
345+
buttonIdleWorker->winHide(FALSE);
341346
}

GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5600,7 +5600,7 @@ void InGameUI::removeIdleWorker( Object *obj, Int playerNumber )
56005600

56015601
void InGameUI::selectNextIdleWorker( void )
56025602
{
5603-
Int index = ThePlayerList->getLocalPlayer()->getPlayerIndex();
5603+
Int index = TheControlBar->getCurrentlyViewedPlayer()->getPlayerIndex();
56045604
if(m_idleWorkers[index].empty())
56055605
{
56065606
DEBUG_ASSERTCRASH(FALSE, ("InGameUI::selectNextIdleWorker We're trying to select a worker when our list is empty for player %ls", ThePlayerList->getLocalPlayer()->getPlayerDisplayName().str()));
@@ -5690,8 +5690,13 @@ ObjectPtrVector InGameUI::getUniqueIdleWorkers(const ObjectList& idleWorkers)
56905690

56915691
Int InGameUI::getIdleWorkerCount( void )
56925692
{
5693-
Int index = ThePlayerList->getLocalPlayer()->getPlayerIndex();
5694-
return m_idleWorkers[index].size();
5693+
if (Player* player = TheControlBar->getCurrentlyViewedPlayer())
5694+
{
5695+
Int index = player->getPlayerIndex();
5696+
return m_idleWorkers[index].size();
5697+
}
5698+
5699+
return 0;
56955700
}
56965701

56975702
void InGameUI::showIdleWorkerLayout( void )

0 commit comments

Comments
 (0)