Skip to content

Commit a07df96

Browse files
committed
Replicate in Generals
1 parent f024519 commit a07df96

File tree

5 files changed

+40
-5
lines changed

5 files changed

+40
-5
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ class GameMessage : public MemoryPoolObject
247247
MSG_META_DECREASE_LOGIC_TIME_SCALE, ///< TheSuperHackers @feature Decrease the logic time scale
248248
MSG_META_TOGGLE_LOWER_DETAILS, ///< toggles graphics options to crappy mode instantly
249249
MSG_META_TOGGLE_CONTROL_BAR, ///< show/hide controlbar
250+
MSG_META_TOGGLE_PLAYER_OBSERVER, ///< TheSuperHackers @feature Toggle the player observer view in game
250251

251252
MSG_META_BEGIN_PATH_BUILD, ///< enter path-building mode
252253
MSG_META_END_PATH_BUILD, ///< exit path-building mode

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ const char *GameMessage::getCommandTypeAsString(GameMessage::Type t)
352352
CASE_LABEL(MSG_META_DECREASE_LOGIC_TIME_SCALE)
353353
CASE_LABEL(MSG_META_TOGGLE_LOWER_DETAILS)
354354
CASE_LABEL(MSG_META_TOGGLE_CONTROL_BAR)
355+
CASE_LABEL(MSG_META_TOGGLE_PLAYER_OBSERVER)
355356
CASE_LABEL(MSG_META_BEGIN_PATH_BUILD)
356357
CASE_LABEL(MSG_META_END_PATH_BUILD)
357358
CASE_LABEL(MSG_META_BEGIN_FORCEATTACK)

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void ControlBar::initObserverControls( void )
138138
//-------------------------------------------------------------------------------------------------
139139
void ControlBar::setObserverLookAtPlayer(Player *player)
140140
{
141-
if (player == ThePlayerList->findPlayerWithNameKey(s_replayObserverNameKey))
141+
if (player != NULL && player == ThePlayerList->findPlayerWithNameKey(s_replayObserverNameKey))
142142
{
143143
// Looking at the observer. Treat as not looking at player.
144144
m_observerLookAtPlayer = NULL;
@@ -152,7 +152,7 @@ void ControlBar::setObserverLookAtPlayer(Player *player)
152152
//-------------------------------------------------------------------------------------------------
153153
void ControlBar::setObservedPlayer(Player *player)
154154
{
155-
if (player == ThePlayerList->findPlayerWithNameKey(s_replayObserverNameKey))
155+
if (player != NULL && player == ThePlayerList->findPlayerWithNameKey(s_replayObserverNameKey))
156156
{
157157
// Looking at the observer. Treat as not observing player.
158158
m_observedPlayer = NULL;
@@ -196,8 +196,7 @@ WindowMsgHandledType ControlBarObserverSystem( GameWindow *window, UnsignedInt m
196196
Int controlID = control->winGetWindowId();
197197
if( controlID == buttonCancelID)
198198
{
199-
Player* observerPlayer = ThePlayerList->findPlayerWithNameKey(s_replayObserverNameKey);
200-
rts::changeObservedPlayer(observerPlayer);
199+
rts::changeObservedPlayer(NULL);
201200

202201
ObserverPlayerInfoWindow->winHide(TRUE);
203202
ObserverPlayerListWindow->winHide(FALSE);
@@ -209,7 +208,7 @@ WindowMsgHandledType ControlBarObserverSystem( GameWindow *window, UnsignedInt m
209208
{
210209
if( controlID == buttonPlayerID[i])
211210
{
212-
Player* player = reinterpret_cast<Player*>(GadgetButtonGetData(buttonPlayer[i]));
211+
Player* player = static_cast<Player*>(GadgetButtonGetData(buttonPlayer[i]));
213212
rts::changeObservedPlayer(player);
214213

215214
ObserverPlayerInfoWindow->winHide(FALSE);

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3243,6 +3243,28 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
32433243
break;
32443244
}
32453245

3246+
//-----------------------------------------------------------------------------------------
3247+
case GameMessage::MSG_META_TOGGLE_PLAYER_OBSERVER:
3248+
{
3249+
if (Player *lookAtPlayer = TheControlBar->getObserverLookAtPlayer())
3250+
{
3251+
if (Player *observedPlayer = TheControlBar->getObservedPlayer())
3252+
{
3253+
// Set no observed player.
3254+
rts::changeObservedPlayer(NULL);
3255+
// But keep the look-at player.
3256+
TheControlBar->setObserverLookAtPlayer(lookAtPlayer);
3257+
}
3258+
else
3259+
{
3260+
// Set observed player to look-at player.
3261+
rts::changeObservedPlayer(lookAtPlayer);
3262+
}
3263+
disp = DESTROY_MESSAGE;
3264+
}
3265+
break;
3266+
}
3267+
32463268
//-----------------------------------------------------------------------------------------
32473269
case GameMessage::MSG_META_TOGGLE_ATTACKMOVE:
32483270
TheInGameUI->toggleAttackMoveToMode( );

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ static const LookupListRec GameMessageMetaTypeNames[] =
150150
{ "DECREASE_LOGIC_TIME_SCALE", GameMessage::MSG_META_DECREASE_LOGIC_TIME_SCALE },
151151
{ "TOGGLE_LOWER_DETAILS", GameMessage::MSG_META_TOGGLE_LOWER_DETAILS },
152152
{ "TOGGLE_CONTROL_BAR", GameMessage::MSG_META_TOGGLE_CONTROL_BAR },
153+
{ "TOGGLE_PLAYER_OBSERVER", GameMessage::MSG_META_TOGGLE_PLAYER_OBSERVER },
153154
{ "BEGIN_PATH_BUILD", GameMessage::MSG_META_BEGIN_PATH_BUILD },
154155
{ "END_PATH_BUILD", GameMessage::MSG_META_END_PATH_BUILD },
155156
{ "BEGIN_FORCEATTACK", GameMessage::MSG_META_BEGIN_FORCEATTACK },
@@ -713,6 +714,17 @@ MetaMapRec *MetaMap::getMetaMapRec(GameMessage::Type t)
713714
map->m_usableIn = COMMANDUSABLE_EVERYWHERE;
714715
}
715716
}
717+
{
718+
// Is useful for Generals and Zero Hour.
719+
MetaMapRec *map = TheMetaMap->getMetaMapRec(GameMessage::MSG_META_TOGGLE_PLAYER_OBSERVER);
720+
if (map->m_key == MK_NONE)
721+
{
722+
map->m_key = MK_M;
723+
map->m_transition = DOWN;
724+
map->m_modState = NONE;
725+
map->m_usableIn = COMMANDUSABLE_OBSERVER;
726+
}
727+
}
716728
{
717729
// Is mostly useful for Generals.
718730
MetaMapRec *map = TheMetaMap->getMetaMapRec(GameMessage::MSG_META_TOGGLE_FAST_FORWARD_REPLAY);

0 commit comments

Comments
 (0)