12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*
- * BuildingManager.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 "AIUtility.h"
- #include "../../lib/GameConstants.h"
- #include "../../lib/GameLibrary.h"
- #include "VCAI.h"
- struct DLL_EXPORT PotentialBuilding
- {
- BuildingID bid;
- TResources price;
- //days to build?
- };
- class DLL_EXPORT IBuildingManager //: public: IAbstractManager
- { //info about town development
- public:
- virtual ~IBuildingManager() = default;
- virtual void init(CPlayerSpecificInfoCallback * CB) = 0;
- virtual void setAI(VCAI * AI) = 0;
- virtual bool getBuildingOptions(const CGTownInstance * t) = 0;
- virtual std::optional<PotentialBuilding> immediateBuilding() const = 0;
- virtual std::optional<PotentialBuilding> expensiveBuilding() const = 0;
- virtual std::optional<BuildingID> canBuildAnyStructure(const CGTownInstance * t, const std::vector<BuildingID> & buildList, unsigned int maxDays) const = 0;
- };
- class DLL_EXPORT BuildingManager : public IBuildingManager
- {
- friend class VCAI;
- friend class AIhelper;
- friend struct SetGlobalState;
- CPlayerSpecificInfoCallback * cb; //this is enough, but we downcast from CCallback
- VCAI * ai;
- public:
- //try build anything in given town, and execute resulting Goal if any
- bool getBuildingOptions(const CGTownInstance * t) override;
- BuildingID getMaxPossibleGoldBuilding(const CGTownInstance * t);
- std::optional<PotentialBuilding> immediateBuilding() const override;
- std::optional<PotentialBuilding> expensiveBuilding() const override;
- std::optional<BuildingID> canBuildAnyStructure(const CGTownInstance * t, const std::vector<BuildingID> & buildList, unsigned int maxDays = 7) const override;
- protected:
- bool tryBuildAnyStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays = 7);
- //try build first unbuilt structure
- bool tryBuildThisStructure(const CGTownInstance * t, BuildingID building, unsigned int maxDays = 7);
- //try build ANY unbuilt structure
-
- bool tryBuildNextStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays = 7);
- private:
- //TODO: remember current town?
- std::vector<PotentialBuilding> immediateBuildings; //what we can build right now in current town
- std::vector<PotentialBuilding> expensiveBuildings; //what we coudl build but can't afford
- void init(CPlayerSpecificInfoCallback * CB) override;
- void setAI(VCAI * AI) override;
- };
|