/* * CMapGenerator.h, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #pragma once #include "CMapGenOptions.h" #include "../LoadProgress.h" VCMI_LIB_NAMESPACE_BEGIN class MetaString; class CRmgTemplate; class CMapGenOptions; class JsonNode; class RmgMap; class CMap; class Zone; class CZonePlacer; class IGameCallback; using JsonVector = std::vector; /// The map generator creates a map randomly. class DLL_LINKAGE CMapGenerator: public Load::Progress { public: struct Config { std::vector waterTreasure; int shipyardGuard; int mineExtraResources; int minGuardStrength; std::string defaultRoadType; std::string secondaryRoadType; int treasureValueLimit; std::vector prisonExperience; std::vector prisonValues; std::vector scrollValues; int pandoraMultiplierGold; int pandoraMultiplierExperience; int pandoraMultiplierSpells; int pandoraSpellSchool; int pandoraSpell60; std::vector pandoraCreatureValues; std::vector questValues; std::vector questRewardValues; bool singleThread; }; explicit CMapGenerator(CMapGenOptions& mapGenOptions, IGameCallback * cb, int RandomSeed); ~CMapGenerator(); // required due to std::unique_ptr const Config & getConfig() const; const CMapGenOptions& getMapGenOptions() const; std::unique_ptr generate(); int getNextMonlithIndex(); int getPrisonsRemaining() const; std::shared_ptr getZonePlacer() const; const std::vector & getAllPossibleQuestArtifacts() const; const std::vector getAllPossibleHeroes() const; void banQuestArt(const ArtifactID & id); void unbanQuestArt(const ArtifactID & id); Zone * getZoneWater() const; void addWaterTreasuresInfo(); int getRandomSeed() const; private: std::unique_ptr rand; int randomSeed; CMapGenOptions& mapGenOptions; Config config; std::unique_ptr map; std::shared_ptr placer; std::vector connectionsLeft; int monolithIndex; std::vector questArtifacts; /// Generation methods void loadConfig(); MetaString getMapDescription() const; void initPrisonsRemaining(); void initQuestArtsRemaining(); void addPlayerInfo(); void addHeaderInfo(); void genZones(); void fillZones(); }; VCMI_LIB_NAMESPACE_END