/* * CommonConstructors.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 "CDefaultObjectTypeHandler.h" #include "../LogicalExpression.h" #include "../mapObjects/MiscObjects.h" #include "../mapObjects/CGCreature.h" #include "../mapObjects/ObstacleSetHandler.h" VCMI_LIB_NAMESPACE_BEGIN class CGArtifact; class CGObjectInstance; class CGTownInstance; class CGHeroInstance; class CGMarket; class CHeroClass; class CGCreature; class CBank; class CGBoat; class CFaction; class CStackBasicDescriptor; class CObstacleConstructor : public CDefaultObjectTypeHandler { public: bool isStaticObject() override; }; class CreatureInstanceConstructor : public CDefaultObjectTypeHandler { public: bool hasNameTextID() const override; std::string getNameTextID() const override; }; class ResourceInstanceConstructor : public CDefaultObjectTypeHandler { public: bool hasNameTextID() const override; std::string getNameTextID() const override; }; class CTownInstanceConstructor : public CDefaultObjectTypeHandler { JsonNode filtersJson; protected: bool objectFilter(const CGObjectInstance * obj, std::shared_ptr tmpl) const override; void initTypeData(const JsonNode & input) override; public: const CFaction * faction = nullptr; std::map> filters; void initializeObject(CGTownInstance * object) const override; void randomizeObject(CGTownInstance * object, CRandomGenerator & rng) const override; void afterLoadFinalization() override; bool hasNameTextID() const override; std::string getNameTextID() const override; }; class CHeroInstanceConstructor : public CDefaultObjectTypeHandler { JsonNode filtersJson; protected: bool objectFilter(const CGObjectInstance * obj, std::shared_ptr tmpl) const override; void initTypeData(const JsonNode & input) override; public: const CHeroClass * heroClass = nullptr; std::map> filters; void initializeObject(CGHeroInstance * object) const override; void randomizeObject(CGHeroInstance * object, CRandomGenerator & rng) const override; void afterLoadFinalization() override; bool hasNameTextID() const override; std::string getNameTextID() const override; }; class DLL_LINKAGE BoatInstanceConstructor : public CDefaultObjectTypeHandler { protected: void initTypeData(const JsonNode & config) override; std::vector bonuses; EPathfindingLayer layer; bool onboardAssaultAllowed; //if true, hero can attack units from transport bool onboardVisitAllowed; //if true, hero can visit objects from transport AnimationPath actualAnimation; //for OH3 boats those have actual animations AnimationPath overlayAnimation; //waves animations std::array flagAnimations; public: void initializeObject(CGBoat * object) const override; /// Returns boat preview animation, for use in Shipyards AnimationPath getBoatAnimationName() const; }; class MarketInstanceConstructor : public CDefaultObjectTypeHandler { protected: void initTypeData(const JsonNode & config) override; std::set marketModes; JsonNode predefinedOffer; int marketEfficiency; std::string title; std::string speech; public: CGMarket * createObject(IGameCallback * cb) const override; void initializeObject(CGMarket * object) const override; void randomizeObject(CGMarket * object, CRandomGenerator & rng) const override; }; VCMI_LIB_NAMESPACE_END