mapcontroller.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. * mapcontroller.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "maphandler.h"
  12. #include "mapview.h"
  13. #include "lib/modding/ModVerificationInfo.h"
  14. #include "../lib/callback/EditorCallback.h"
  15. VCMI_LIB_NAMESPACE_BEGIN
  16. using ModCompatibilityInfo = std::map<std::string, ModVerificationInfo>;
  17. class EditorObstaclePlacer;
  18. VCMI_LIB_NAMESPACE_END
  19. class MainWindow;
  20. class MapController : public QObject
  21. {
  22. Q_OBJECT
  23. public:
  24. explicit MapController(QObject * parent = nullptr);
  25. MapController(MainWindow *);
  26. MapController(const MapController &) = delete;
  27. MapController(const MapController &&) = delete;
  28. ~MapController();
  29. void setCallback(std::unique_ptr<EditorCallback>);
  30. EditorCallback * getCallback();
  31. void setMap(std::unique_ptr<CMap>);
  32. void initObstaclePainters(CMap * map);
  33. static void repairMap(CMap * map);
  34. void repairMap();
  35. const std::unique_ptr<CMap> & getMapUniquePtr() const; //to be used for map saving
  36. CMap * map();
  37. MapHandler * mapHandler();
  38. MapScene * scene(int level);
  39. std::set<MapScene *> getScenes();
  40. MinimapScene * miniScene(int level);
  41. void resetMapHandler();
  42. void initializeMap();
  43. void sceneForceUpdate();
  44. void commitTerrainChange(int level, const TerrainId & terrain);
  45. void commitRoadOrRiverChange(int level, ui8 type, bool isRoad);
  46. void commitObjectErase(const CGObjectInstance* obj);
  47. void commitObjectErase(int level);
  48. void commitObstacleFill(int level);
  49. void commitChangeWithoutRedraw();
  50. void commitObjectShift(int level);
  51. void commitObjectCreate(int level);
  52. void commitObjectChange(int level);
  53. void copyToClipboard(int level);
  54. void pasteFromClipboard(int level);
  55. bool discardObject(int level) const;
  56. void createObject(int level, std::shared_ptr<CGObjectInstance> obj) const;
  57. bool canPlaceObject(const CGObjectInstance * obj, QString & error) const;
  58. bool canPlaceGrail(const CGObjectInstance * grailObj, QString & error) const;
  59. bool canPlaceHero(const CGObjectInstance * heroObj, QString & error) const;
  60. /// Ensures that the object's mod is listed in the map's required mods.
  61. /// If the mod is missing, prompts the user to add it. Returns false if the user declines,
  62. /// making the object invalid for placement.
  63. bool checkRequiredMods(const CGObjectInstance * obj, QString & error) const;
  64. /// These functions collect mod verification data for gameplay objects by scanning map objects
  65. /// and their nested elements (like spells and artifacts). The gathered information
  66. /// is used to assess compatibility and integrity of mods used in a given map or game state
  67. static void modAssessmentObject(const CGObjectInstance * obj, ModCompatibilityInfo & result);
  68. static ModCompatibilityInfo modAssessmentAll();
  69. static ModCompatibilityInfo modAssessmentMap(const CMap & map);
  70. /// Returns formatted message string describing a missing mod requirement for the map.
  71. /// Used in both warnings and confirmations related to required mod dependencies.
  72. static QString modMissingMessage(const ModVerificationInfo & info);
  73. void undo();
  74. void redo();
  75. PlayerColor defaultPlayer;
  76. QDialog * settingsDialog = nullptr;
  77. signals:
  78. void requestModsUpdate(const ModCompatibilityInfo & mods, bool leaveCheckedUnchanged) const;
  79. private:
  80. std::unique_ptr<EditorCallback> _cb;
  81. std::unique_ptr<CMap> _map;
  82. std::unique_ptr<MapHandler> _mapHandler;
  83. MainWindow * main;
  84. mutable std::map<int, std::unique_ptr<MapScene>> _scenes;
  85. mutable std::map<int, std::unique_ptr<MinimapScene>> _miniscenes;
  86. std::vector<std::unique_ptr<CGObjectInstance>> _clipboard;
  87. int _clipboardShiftIndex = 0;
  88. const int MAX_LEVELS = 10; // TODO: multilevel support: remove this constant
  89. std::map<TerrainId, std::unique_ptr<EditorObstaclePlacer>> _obstaclePainters;
  90. void connectScenes();
  91. };