1 /*************************************************************************** 2 * Mechanized Assault and Exploration Reloaded Projectfile * 3 * * 4 * This program is free software; you can redistribute it and/or modify * 5 * it under the terms of the GNU General Public License as published by * 6 * the Free Software Foundation; either version 2 of the License, or * 7 * (at your option) any later version. * 8 * * 9 * This program is distributed in the hope that it will be useful, * 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 12 * GNU General Public License for more details. * 13 * * 14 * You should have received a copy of the GNU General Public License * 15 * along with this program; if not, write to the * 16 * Free Software Foundation, Inc., * 17 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 18 ***************************************************************************/ 19 20 #ifndef ui_graphical_game_control_gameguicontrollerH 21 #define ui_graphical_game_control_gameguicontrollerH 22 23 #include <memory> 24 #include <string> 25 #include <vector> 26 #include <array> 27 28 #include "utility/signal/signal.h" 29 #include "utility/signal/signalconnectionmanager.h" 30 #include "utility/position.h" 31 32 #include "ui/graphical/game/gameguistate.h" 33 34 #include "game/logic/upgradecalculator.h" 35 36 class cGameGui; 37 class cClient; 38 class cApplication; 39 class cSoundManager; 40 class cAnimationTimer; 41 42 class cPlayer; 43 class cUnit; 44 class cVehicle; 45 class cBuilding; 46 class cStaticMap; 47 class cMap; 48 class cGameSettings; 49 class cUnitUpgrade; 50 class cCasualtiesTracker; 51 class cTurnTimeClock; 52 class cTurnClock; 53 class cSavedReport; 54 class cBuildListItem; 55 class cWindowUpgradesFilterState; 56 57 class cPosition; 58 59 struct sID; 60 61 class cGameGuiController 62 { 63 public: 64 cGameGuiController (cApplication& application, std::shared_ptr<const cStaticMap> staticMap); 65 ~cGameGuiController(); 66 67 void start(); 68 69 void addPlayerGameGuiState (const cPlayer& player, cGameGuiState playerGameGuiState); 70 71 void setSingleClient (std::shared_ptr<cClient> clients); 72 void setClients (std::vector<std::shared_ptr<cClient>> clients, int activePlayerNumber); 73 74 mutable cSignal<void (int saveNumber, const std::string& name)> triggeredSave; 75 mutable cSignal<void ()> terminated; 76 private: 77 cSignalConnectionManager signalConnectionManager; 78 cSignalConnectionManager guiSignalConnectionManager; 79 cSignalConnectionManager clientSignalConnectionManager; 80 cSignalConnectionManager allClientsSignalConnectionManager; 81 cSignalConnectionManager buildPositionSelectionConnectionManager; 82 83 cApplication& application; 84 85 std::shared_ptr<cSoundManager> soundManager; 86 std::shared_ptr<cAnimationTimer> animationTimer; 87 88 std::shared_ptr<cGameGui> gameGui; 89 std::shared_ptr<cClient> activeClient; 90 std::vector<std::shared_ptr<cClient>> clients; 91 92 std::map<int, cGameGuiState> playerGameGuiStates; 93 94 std::pair<bool, cPosition> savedReportPosition; 95 std::shared_ptr<cWindowUpgradesFilterState> upgradesFilterState; 96 std::array<std::pair<bool, cPosition>, 4> savedPositions; 97 98 void initShortcuts(); 99 100 void connectGuiStaticCommands(); 101 102 void setActiveClient (std::shared_ptr<cClient> client); 103 104 void connectClient (cClient& client); 105 106 void showNextPlayerDialog(); 107 108 void showFilesWindow(); 109 void showPreferencesDialog(); 110 void showReportsWindow(); 111 112 void showUnitHelpWindow (const cUnit& unit); 113 void showUnitTransferDialog (const cUnit& sourceUnit, const cUnit& destinationUnit); 114 void showBuildBuildingsWindow (const cVehicle& vehicle); 115 void showBuildVehiclesWindow (const cBuilding& building); 116 void showResourceDistributionDialog (const cUnit& unit); 117 void showResearchDialog (const cUnit& unit); 118 void showUpgradesWindow (const cUnit& unit); 119 void showStorageWindow (const cUnit& unit); 120 void showSelfDestroyDialog (const cUnit& unit); 121 122 void handleChatCommand (const std::string& command); 123 124 void handleReport (const cSavedReport& report); 125 126 void selectNextUnit(); 127 void selectPreviousUnit(); 128 void markSelectedUnitAsDone(); 129 130 void centerSelectedUnit(); 131 132 void savePosition (size_t index); 133 void jumpToSavedPosition (size_t index); 134 135 std::vector<std::shared_ptr<const cPlayer>> getPlayers() const; 136 std::shared_ptr<const cPlayer> getActivePlayer() const; 137 std::shared_ptr<const cTurnClock> getTurnClock() const; 138 std::shared_ptr<const cTurnTimeClock> getTurnTimeClock() const; 139 std::shared_ptr<const cGameSettings> getGameSettings() const; 140 std::shared_ptr<const cCasualtiesTracker> getCasualtiesTracker() const; 141 std::shared_ptr<const cMap> getDynamicMap() const; 142 143 mutable cSignal<void (const cUnit&, const cUnit&, int, int)> transferTriggered; 144 mutable cSignal<void (const cVehicle&, const cPosition&, const sID&, int)> buildBuildingTriggered; 145 mutable cSignal<void (const cVehicle&, const cPosition&, const sID&, int)> buildBuildingPathTriggered; 146 mutable cSignal<void (const cBuilding&, const std::vector<cBuildListItem>&, int, bool)> buildVehiclesTriggered; 147 mutable cSignal<void (const cUnit& unit, size_t index, const cPosition& position)> activateAtTriggered; 148 mutable cSignal<void (const cUnit&, const cUnit&)> reloadTriggered; 149 mutable cSignal<void (const cUnit&, const cUnit&)> repairTriggered; 150 mutable cSignal<void (const cUnit&, size_t index)> upgradeTriggered; 151 mutable cSignal<void (const cUnit&)> upgradeAllTriggered; 152 mutable cSignal<void (const cBuilding&, int, int, int)> changeResourceDistributionTriggered; 153 mutable cSignal<void (const std::array<int, cResearch::kNrResearchAreas>&)> changeResearchSettingsTriggered; 154 mutable cSignal<void (const std::vector<std::pair<sID, cUnitUpgrade>>&)> takeUnitUpgradesTriggered; 155 mutable cSignal<void (const cUnit&)> selfDestructionTriggered; 156 mutable cSignal<void (const cUnit&)> resumeMoveJobTriggered; 157 mutable cSignal<void ()> resumeAllMoveJobsTriggered; 158 }; 159 160 #endif // ui_graphical_game_control_gameguicontrollerH 161