/* * CGDwelling.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 "CArmedInstance.h" #include "IOwnableObject.h" VCMI_LIB_NAMESPACE_BEGIN class CGDwelling; class DLL_LINKAGE CGDwellingRandomizationInfo { public: std::set allowedFactions; std::string instanceId;//vcmi map instance identifier int32_t identifier = 0;//h3m internal identifier uint8_t minLevel = 1; uint8_t maxLevel = 7; //minimal and maximal level of creature in dwelling: <1, 7> void serializeJson(JsonSerializeFormat & handler); }; class DLL_LINKAGE CGDwelling : public CArmedInstance, public IOwnableObject { public: using TCreaturesSet = std::vector > >; std::optional randomizationInfo; //random dwelling options; not serialized TCreaturesSet creatures; //creatures[level] -> CGDwelling(IGameCallback *cb); ~CGDwelling() override; const IOwnableObject * asOwnable() const final; ResourceSet dailyIncome() const override; std::vector providedCreatures() const override; protected: void serializeJsonOptions(JsonSerializeFormat & handler) override; private: FactionID randomizeFaction(vstd::RNG & rand); int randomizeLevel(vstd::RNG & rand); void pickRandomObject(vstd::RNG & rand) override; void initObj(vstd::RNG & rand) override; void onHeroVisit(const CGHeroInstance * h) const override; void newTurn(vstd::RNG & rand) const override; void setPropertyDer(ObjProperty what, ObjPropertyID identifier) override; void battleFinished(const CGHeroInstance *hero, const BattleResult &result) const override; void blockingDialogAnswered(const CGHeroInstance *hero, int32_t answer) const override; std::vector getPopupComponents(PlayerColor player) const override; void updateGuards() const; void heroAcceptsCreatures(const CGHeroInstance *h) const; public: template void serialize(Handler &h) { h & static_cast(*this); h & creatures; } }; VCMI_LIB_NAMESPACE_END