BuildingManager.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * BuildingManager.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 "AIUtility.h"
  12. #include "../../lib/GameConstants.h"
  13. #include "../../lib/GameLibrary.h"
  14. #include "VCAI.h"
  15. struct DLL_EXPORT PotentialBuilding
  16. {
  17. BuildingID bid;
  18. TResources price;
  19. //days to build?
  20. };
  21. class DLL_EXPORT IBuildingManager //: public: IAbstractManager
  22. { //info about town development
  23. public:
  24. virtual ~IBuildingManager() = default;
  25. virtual void init(CPlayerSpecificInfoCallback * CB) = 0;
  26. virtual void setAI(VCAI * AI) = 0;
  27. virtual bool getBuildingOptions(const CGTownInstance * t) = 0;
  28. virtual std::optional<PotentialBuilding> immediateBuilding() const = 0;
  29. virtual std::optional<PotentialBuilding> expensiveBuilding() const = 0;
  30. virtual std::optional<BuildingID> canBuildAnyStructure(const CGTownInstance * t, const std::vector<BuildingID> & buildList, unsigned int maxDays) const = 0;
  31. };
  32. class DLL_EXPORT BuildingManager : public IBuildingManager
  33. {
  34. friend class VCAI;
  35. friend class AIhelper;
  36. friend struct SetGlobalState;
  37. CPlayerSpecificInfoCallback * cb; //this is enough, but we downcast from CCallback
  38. VCAI * ai;
  39. public:
  40. //try build anything in given town, and execute resulting Goal if any
  41. bool getBuildingOptions(const CGTownInstance * t) override;
  42. BuildingID getMaxPossibleGoldBuilding(const CGTownInstance * t);
  43. std::optional<PotentialBuilding> immediateBuilding() const override;
  44. std::optional<PotentialBuilding> expensiveBuilding() const override;
  45. std::optional<BuildingID> canBuildAnyStructure(const CGTownInstance * t, const std::vector<BuildingID> & buildList, unsigned int maxDays = 7) const override;
  46. protected:
  47. bool tryBuildAnyStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays = 7);
  48. //try build first unbuilt structure
  49. bool tryBuildThisStructure(const CGTownInstance * t, BuildingID building, unsigned int maxDays = 7);
  50. //try build ANY unbuilt structure
  51. bool tryBuildNextStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays = 7);
  52. private:
  53. //TODO: remember current town?
  54. std::vector<PotentialBuilding> immediateBuildings; //what we can build right now in current town
  55. std::vector<PotentialBuilding> expensiveBuildings; //what we coudl build but can't afford
  56. void init(CPlayerSpecificInfoCallback * CB) override;
  57. void setAI(VCAI * AI) override;
  58. };