1 /* 2 * This file is part of Dune Legacy. 3 * 4 * Dune Legacy 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 * Dune Legacy 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 Dune Legacy. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #ifndef MAPEDITOROPERATION_H 19 #define MAPEDITOROPERATION_H 20 21 #include <data.h> 22 23 #include <DataTypes.h> 24 25 #include <MapEditor/ReinforcementInfo.h> 26 #include <MapEditor/TeamInfo.h> 27 #include <MapEditor/MapInfo.h> 28 29 #include <vector> 30 #include <memory> 31 32 class MapEditor; 33 34 class MapEditorOperation { 35 public: 36 MapEditorOperation()37 MapEditorOperation() { 38 } 39 ~MapEditorOperation()40 virtual ~MapEditorOperation() { 41 } 42 43 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor) = 0; 44 }; 45 46 class MapEditorNoOperation : public MapEditorOperation { 47 public: 48 MapEditorNoOperation()49 MapEditorNoOperation() { 50 } 51 ~MapEditorNoOperation()52 virtual ~MapEditorNoOperation() { 53 } 54 perform(MapEditor * pMapEditor)55 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor) { 56 return std::shared_ptr<MapEditorOperation>(new MapEditorNoOperation()); 57 }; 58 }; 59 60 class MapEditorStartOperation : public MapEditorOperation { 61 public: 62 MapEditorStartOperation()63 MapEditorStartOperation() : MapEditorOperation() { 64 } 65 ~MapEditorStartOperation()66 virtual ~MapEditorStartOperation() { 67 } 68 69 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 70 }; 71 72 class MapEditorTerrainEditOperation : public MapEditorOperation { 73 public: 74 MapEditorTerrainEditOperation(int x,int y,TERRAINTYPE terrainType)75 MapEditorTerrainEditOperation(int x, int y, TERRAINTYPE terrainType) 76 : MapEditorOperation(), x(x), y(y), terrainType(terrainType) { 77 } 78 ~MapEditorTerrainEditOperation()79 virtual ~MapEditorTerrainEditOperation() { 80 } 81 82 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 83 84 int x; 85 int y; 86 TERRAINTYPE terrainType; 87 }; 88 89 class MapEditorTerrainAddSpiceBloomOperation : public MapEditorOperation { 90 public: 91 MapEditorTerrainAddSpiceBloomOperation(int x,int y)92 MapEditorTerrainAddSpiceBloomOperation(int x, int y) 93 : MapEditorOperation(), x(x), y(y) { 94 } 95 ~MapEditorTerrainAddSpiceBloomOperation()96 virtual ~MapEditorTerrainAddSpiceBloomOperation() { 97 } 98 99 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 100 101 int x; 102 int y; 103 }; 104 105 class MapEditorTerrainRemoveSpiceBloomOperation : public MapEditorOperation { 106 public: 107 MapEditorTerrainRemoveSpiceBloomOperation(int x,int y)108 MapEditorTerrainRemoveSpiceBloomOperation(int x, int y) 109 : MapEditorOperation(), x(x), y(y) { 110 } 111 ~MapEditorTerrainRemoveSpiceBloomOperation()112 virtual ~MapEditorTerrainRemoveSpiceBloomOperation() { 113 } 114 115 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 116 117 int x; 118 int y; 119 }; 120 121 class MapEditorTerrainAddSpecialBloomOperation : public MapEditorOperation { 122 public: 123 MapEditorTerrainAddSpecialBloomOperation(int x,int y)124 MapEditorTerrainAddSpecialBloomOperation(int x, int y) 125 : MapEditorOperation(), x(x), y(y) { 126 } 127 ~MapEditorTerrainAddSpecialBloomOperation()128 virtual ~MapEditorTerrainAddSpecialBloomOperation() { 129 } 130 131 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 132 133 int x; 134 int y; 135 }; 136 137 class MapEditorTerrainRemoveSpecialBloomOperation : public MapEditorOperation { 138 public: 139 MapEditorTerrainRemoveSpecialBloomOperation(int x,int y)140 MapEditorTerrainRemoveSpecialBloomOperation(int x, int y) 141 : MapEditorOperation(), x(x), y(y) { 142 } 143 ~MapEditorTerrainRemoveSpecialBloomOperation()144 virtual ~MapEditorTerrainRemoveSpecialBloomOperation() { 145 } 146 147 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 148 149 int x; 150 int y; 151 }; 152 153 class MapEditorTerrainAddSpiceFieldOperation : public MapEditorOperation { 154 public: 155 MapEditorTerrainAddSpiceFieldOperation(int x,int y)156 MapEditorTerrainAddSpiceFieldOperation(int x, int y) 157 : MapEditorOperation(), x(x), y(y) { 158 } 159 ~MapEditorTerrainAddSpiceFieldOperation()160 virtual ~MapEditorTerrainAddSpiceFieldOperation() { 161 } 162 163 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 164 165 int x; 166 int y; 167 }; 168 169 class MapEditorTerrainRemoveSpiceFieldOperation : public MapEditorOperation { 170 public: 171 MapEditorTerrainRemoveSpiceFieldOperation(int x,int y)172 MapEditorTerrainRemoveSpiceFieldOperation(int x, int y) 173 : MapEditorOperation(), x(x), y(y) { 174 } 175 ~MapEditorTerrainRemoveSpiceFieldOperation()176 virtual ~MapEditorTerrainRemoveSpiceFieldOperation() { 177 } 178 179 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 180 181 int x; 182 int y; 183 }; 184 185 186 187 class MapEditorSetTacticalPositionOperation : public MapEditorOperation { 188 public: 189 MapEditorSetTacticalPositionOperation(int x,int y)190 MapEditorSetTacticalPositionOperation(int x, int y) 191 : MapEditorOperation(), x(x), y(y) { 192 } 193 ~MapEditorSetTacticalPositionOperation()194 virtual ~MapEditorSetTacticalPositionOperation() { 195 } 196 197 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 198 199 int x; 200 int y; 201 }; 202 203 204 205 class MapEditorStructurePlaceOperation : public MapEditorOperation { 206 public: 207 MapEditorStructurePlaceOperation(int preferredID,Coord position,HOUSETYPE house,int itemID,int health)208 MapEditorStructurePlaceOperation(int preferredID, Coord position, HOUSETYPE house, int itemID, int health) 209 : MapEditorOperation(), preferredID(preferredID), position(position), house(house), itemID(itemID), health(health) { 210 } 211 MapEditorStructurePlaceOperation(Coord position,HOUSETYPE house,int itemID,int health)212 MapEditorStructurePlaceOperation(Coord position, HOUSETYPE house, int itemID, int health) 213 : MapEditorOperation(), preferredID(INVALID), position(position), house(house), itemID(itemID), health(health) { 214 } 215 ~MapEditorStructurePlaceOperation()216 virtual ~MapEditorStructurePlaceOperation() { 217 } 218 219 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 220 221 int preferredID; 222 Coord position; 223 HOUSETYPE house; 224 int itemID; 225 int health; 226 }; 227 228 class MapEditorRemoveStructureOperation : public MapEditorOperation { 229 public: 230 MapEditorRemoveStructureOperation(int id)231 explicit MapEditorRemoveStructureOperation(int id) 232 : MapEditorOperation(), id(id) { 233 } 234 ~MapEditorRemoveStructureOperation()235 virtual ~MapEditorRemoveStructureOperation() { 236 } 237 238 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 239 240 int id; 241 }; 242 243 class MapEditorUnitPlaceOperation : public MapEditorOperation { 244 public: 245 MapEditorUnitPlaceOperation(int preferredID,Coord position,HOUSETYPE house,int itemID,int health,unsigned char angle,ATTACKMODE attackmode)246 MapEditorUnitPlaceOperation(int preferredID, Coord position, HOUSETYPE house, int itemID, int health, unsigned char angle, ATTACKMODE attackmode) 247 : MapEditorOperation(), preferredID(preferredID), position(position), house(house), itemID(itemID), health(health), angle(angle), attackmode(attackmode) { 248 } 249 MapEditorUnitPlaceOperation(Coord position,HOUSETYPE house,int itemID,int health,unsigned char angle,ATTACKMODE attackmode)250 MapEditorUnitPlaceOperation(Coord position, HOUSETYPE house, int itemID, int health, unsigned char angle, ATTACKMODE attackmode) 251 : MapEditorOperation(), preferredID(INVALID), position(position), house(house), itemID(itemID), health(health), angle(angle), attackmode(attackmode) { 252 } 253 ~MapEditorUnitPlaceOperation()254 virtual ~MapEditorUnitPlaceOperation() { 255 } 256 257 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 258 259 int preferredID; 260 Coord position; 261 HOUSETYPE house; 262 int itemID; 263 int health; 264 unsigned char angle; 265 ATTACKMODE attackmode; 266 }; 267 268 class MapEditorRemoveUnitOperation : public MapEditorOperation { 269 public: 270 MapEditorRemoveUnitOperation(int id)271 explicit MapEditorRemoveUnitOperation(int id) 272 : MapEditorOperation(), id(id) { 273 } 274 ~MapEditorRemoveUnitOperation()275 virtual ~MapEditorRemoveUnitOperation() { 276 } 277 278 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 279 280 int id; 281 }; 282 283 284 class MapEditorEditStructureOperation : public MapEditorOperation { 285 public: 286 MapEditorEditStructureOperation(int id,int health)287 MapEditorEditStructureOperation(int id, int health) 288 : MapEditorOperation(), id(id), health(health) { 289 } 290 ~MapEditorEditStructureOperation()291 virtual ~MapEditorEditStructureOperation() { 292 } 293 294 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 295 296 int id; 297 int health; 298 }; 299 300 301 class MapEditorEditUnitOperation : public MapEditorOperation { 302 public: 303 MapEditorEditUnitOperation(int id,int health,unsigned char angle,ATTACKMODE attackmode)304 MapEditorEditUnitOperation(int id, int health, unsigned char angle, ATTACKMODE attackmode) 305 : MapEditorOperation(), id(id), health(health), angle(angle), attackmode(attackmode) { 306 } 307 ~MapEditorEditUnitOperation()308 virtual ~MapEditorEditUnitOperation() { 309 } 310 311 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 312 313 int id; 314 int health; 315 unsigned char angle; 316 ATTACKMODE attackmode; 317 }; 318 319 class MapEditorChangePlayer : public MapEditorOperation { 320 public: 321 322 MapEditorChangePlayer(int playerNum, bool bActive, bool bAnyHouse, int credits, const std::string& brain, int quota = 0, int maxunit = 0) playerNum(playerNum)323 : playerNum(playerNum), bActive(bActive), bAnyHouse(bAnyHouse), credits(credits), brain(brain), quota(quota), maxunit(maxunit) { 324 } 325 ~MapEditorChangePlayer()326 virtual ~MapEditorChangePlayer() { 327 } 328 329 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 330 331 int playerNum; 332 bool bActive; 333 bool bAnyHouse; 334 int credits; 335 std::string brain; 336 int quota; 337 int maxunit; 338 }; 339 340 341 class MapEditorChangeChoam : public MapEditorOperation { 342 public: 343 MapEditorChangeChoam(int itemID,int amount)344 MapEditorChangeChoam(int itemID, int amount) 345 : itemID(itemID), amount(amount) { 346 } 347 ~MapEditorChangeChoam()348 virtual ~MapEditorChangeChoam() { 349 } 350 351 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 352 353 int itemID; 354 int amount; 355 }; 356 357 358 class MapEditorChangeReinforcements : public MapEditorOperation { 359 public: 360 MapEditorChangeReinforcements(std::vector<ReinforcementInfo> & reinforcements)361 explicit MapEditorChangeReinforcements(std::vector<ReinforcementInfo>& reinforcements) 362 : reinforcements(reinforcements) { 363 } 364 ~MapEditorChangeReinforcements()365 virtual ~MapEditorChangeReinforcements() { 366 } 367 368 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 369 370 std::vector<ReinforcementInfo> reinforcements; 371 }; 372 373 class MapEditorChangeTeams : public MapEditorOperation { 374 public: 375 MapEditorChangeTeams(std::vector<TeamInfo> & teams)376 explicit MapEditorChangeTeams(std::vector<TeamInfo>& teams) 377 : teams(teams) { 378 } 379 ~MapEditorChangeTeams()380 virtual ~MapEditorChangeTeams() { 381 } 382 383 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 384 385 std::vector<TeamInfo> teams; 386 }; 387 388 class MapEditorChangeMapInfo : public MapEditorOperation { 389 public: 390 MapEditorChangeMapInfo(MapInfo & mapInfo)391 explicit MapEditorChangeMapInfo(MapInfo& mapInfo) 392 : mapInfo(mapInfo) { 393 } 394 ~MapEditorChangeMapInfo()395 virtual ~MapEditorChangeMapInfo() { 396 } 397 398 virtual std::shared_ptr<MapEditorOperation> perform(MapEditor *pMapEditor); 399 400 MapInfo mapInfo; 401 }; 402 403 404 405 #endif // MAPEDITOROPERATION_H 406