Skip to content

Commit c08e01d

Browse files
authored
feat(input): Implement new key mapping for selecting the next idle worker (#1413)
Adds a new CommandMap option with SELECT_NEXT_IDLE_WORKER and a default key binding with CTRL + I
1 parent c86d699 commit c08e01d

File tree

6 files changed

+48
-0
lines changed

6 files changed

+48
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ class GameMessage : public MemoryPoolObject
221221
MSG_META_SELECT_PREV_UNIT, ///< select 'prev' unit
222222
MSG_META_SELECT_NEXT_WORKER, ///< select 'next' worker
223223
MSG_META_SELECT_PREV_WORKER, ///< select 'prev' worker
224+
MSG_META_SELECT_NEXT_IDLE_WORKER, ///< TheSuperHackers @feature L3-M 03/08/2025 select next idle worker
224225
MSG_META_VIEW_COMMAND_CENTER, ///< center view on command center
225226
MSG_META_VIEW_LAST_RADAR_EVENT, ///< center view on last radar event
226227
MSG_META_SELECT_HERO, ///< selects player's hero character, if exists...

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2734,6 +2734,15 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
27342734

27352735
} // end select previous worker
27362736

2737+
//-----------------------------------------------------------------------------------------
2738+
case GameMessage::MSG_META_SELECT_NEXT_IDLE_WORKER:
2739+
{
2740+
TheInGameUI->selectNextIdleWorker();
2741+
2742+
disp = DESTROY_MESSAGE;
2743+
break;
2744+
}
2745+
27372746
//-----------------------------------------------------------------------------------------
27382747
case GameMessage::MSG_META_SELECT_HERO:
27392748
{

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ static const LookupListRec GameMessageMetaTypeNames[] =
125125
{ "SELECT_PREV_UNIT", GameMessage::MSG_META_SELECT_PREV_UNIT },
126126
{ "SELECT_NEXT_WORKER", GameMessage::MSG_META_SELECT_NEXT_WORKER },
127127
{ "SELECT_PREV_WORKER", GameMessage::MSG_META_SELECT_PREV_WORKER },
128+
{ "SELECT_NEXT_IDLE_WORKER", GameMessage::MSG_META_SELECT_NEXT_IDLE_WORKER },
128129
{ "SELECT_HERO", GameMessage::MSG_META_SELECT_HERO },
129130
{ "SELECT_ALL", GameMessage::MSG_META_SELECT_ALL },
130131
{ "SELECT_ALL_AIRCRAFT", GameMessage::MSG_META_SELECT_ALL_AIRCRAFT },
@@ -692,6 +693,19 @@ MetaMapRec *MetaMap::getMetaMapRec(GameMessage::Type t)
692693
map->m_usableIn = COMMANDUSABLE_GAME;
693694
}
694695
}
696+
{
697+
// Is useful for Generals and Zero Hour.
698+
MetaMapRec* map = TheMetaMap->getMetaMapRec(GameMessage::MSG_META_SELECT_NEXT_IDLE_WORKER);
699+
if (map->m_key == MK_NONE) {
700+
map->m_key = MK_I;
701+
map->m_transition = DOWN;
702+
map->m_modState = CTRL;
703+
map->m_usableIn = COMMANDUSABLE_GAME;
704+
map->m_category = CATEGORY_SELECTION;
705+
map->m_description = TheGameText->FETCH_OR_SUBSTITUTE("GUI:SelectNextIdleWorkerDescription", L"Select the next idle worker");
706+
map->m_displayName = TheGameText->FETCH_OR_SUBSTITUTE("GUI:SelectNextIdleWorker", L"Next Idle Worker");
707+
}
708+
}
695709

696710
#if defined(RTS_DEBUG)
697711
{

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ class GameMessage : public MemoryPoolObject
221221
MSG_META_SELECT_PREV_UNIT, ///< select 'prev' unit
222222
MSG_META_SELECT_NEXT_WORKER, ///< select 'next' worker
223223
MSG_META_SELECT_PREV_WORKER, ///< select 'prev' worker
224+
MSG_META_SELECT_NEXT_IDLE_WORKER, ///< TheSuperHackers @feature L3-M 03/08/2025 select next idle worker
224225
MSG_META_VIEW_COMMAND_CENTER, ///< center view on command center
225226
MSG_META_VIEW_LAST_RADAR_EVENT, ///< center view on last radar event
226227
MSG_META_SELECT_HERO, ///< selects player's hero character, if exists...

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2881,6 +2881,15 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
28812881

28822882
} // end select previous worker
28832883

2884+
//-----------------------------------------------------------------------------------------
2885+
case GameMessage::MSG_META_SELECT_NEXT_IDLE_WORKER:
2886+
{
2887+
TheInGameUI->selectNextIdleWorker();
2888+
2889+
disp = DESTROY_MESSAGE;
2890+
break;
2891+
}
2892+
28842893
//-----------------------------------------------------------------------------------------
28852894
case GameMessage::MSG_META_SELECT_HERO:
28862895
{

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ static const LookupListRec GameMessageMetaTypeNames[] =
133133
{ "SELECT_PREV_UNIT", GameMessage::MSG_META_SELECT_PREV_UNIT },
134134
{ "SELECT_NEXT_WORKER", GameMessage::MSG_META_SELECT_NEXT_WORKER },
135135
{ "SELECT_PREV_WORKER", GameMessage::MSG_META_SELECT_PREV_WORKER },
136+
{ "SELECT_NEXT_IDLE_WORKER", GameMessage::MSG_META_SELECT_NEXT_IDLE_WORKER },
136137
{ "SELECT_HERO", GameMessage::MSG_META_SELECT_HERO },
137138
{ "SELECT_ALL", GameMessage::MSG_META_SELECT_ALL },
138139
{ "SELECT_ALL_AIRCRAFT", GameMessage::MSG_META_SELECT_ALL_AIRCRAFT },
@@ -754,6 +755,19 @@ MetaMapRec *MetaMap::getMetaMapRec(GameMessage::Type t)
754755
map->m_usableIn = COMMANDUSABLE_GAME;
755756
}
756757
}
758+
{
759+
// Is useful for Generals and Zero Hour.
760+
MetaMapRec* map = TheMetaMap->getMetaMapRec(GameMessage::MSG_META_SELECT_NEXT_IDLE_WORKER);
761+
if (map->m_key == MK_NONE) {
762+
map->m_key = MK_I;
763+
map->m_transition = DOWN;
764+
map->m_modState = CTRL;
765+
map->m_usableIn = COMMANDUSABLE_GAME;
766+
map->m_category = CATEGORY_SELECTION;
767+
map->m_description = TheGameText->FETCH_OR_SUBSTITUTE("GUI:SelectNextIdleWorkerDescription", L"Select the next idle worker");
768+
map->m_displayName = TheGameText->FETCH_OR_SUBSTITUTE("GUI:SelectNextIdleWorker", L"Next Idle Worker");
769+
}
770+
}
757771

758772
#if defined(RTS_DEBUG)
759773
{

0 commit comments

Comments
 (0)