| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | #pragma once#include "CObjectClassesHandler.h"#include "../CTownHandler.h" // for building ID-based filters/* * 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 * */class CGTownInstance;class CGHeroInstance;class CGDwelling;//class CGArtifact;//class CGCreature;class CHeroClass;/// Class that is used for objects that do not have dedicated handlertemplate<class ObjectType>class CDefaultObjectTypeHandler : public AObjectTypeHandler{protected:	ObjectType * createTyped(ObjectTemplate tmpl) const	{		auto obj = new ObjectType();		obj->ID = tmpl.id;		obj->subID = tmpl.subid;		obj->appearance = tmpl;		return obj;	}public:	CDefaultObjectTypeHandler(){}	CGObjectInstance * create(ObjectTemplate tmpl) const	{		return createTyped(tmpl);	}	virtual void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const	{	}	virtual const IObjectInfo * getObjectInfo(ObjectTemplate tmpl) const	{		return nullptr;	}};class CObstacleConstructor : public CDefaultObjectTypeHandler<CGObjectInstance>{public:	CObstacleConstructor();	bool isStaticObject();};class CTownInstanceConstructor : public CDefaultObjectTypeHandler<CGTownInstance>{	JsonNode filtersJson;protected:	bool objectFilter(const CGObjectInstance *, const ObjectTemplate &) const;public:	CFaction * faction;	std::map<std::string, LogicalExpression<BuildingID>> filters;	CTownInstanceConstructor();	CGObjectInstance * create(ObjectTemplate tmpl) const;	void initTypeData(const JsonNode & input);	void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const;	void afterLoadFinalization();};class CHeroInstanceConstructor : public CDefaultObjectTypeHandler<CGHeroInstance>{protected:	bool objectFilter(const CGObjectInstance *, const ObjectTemplate &) const;public:	CHeroClass * heroClass;	CHeroInstanceConstructor();	CGObjectInstance * create(ObjectTemplate tmpl) const;	void initTypeData(const JsonNode & input);	void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const;};class CDwellingInstanceConstructor : public CDefaultObjectTypeHandler<CGDwelling>{protected:	bool objectFilter(const CGObjectInstance *, const ObjectTemplate &) const;public:	std::vector<std::vector<CCreature *>> availableCreatures;	CDwellingInstanceConstructor();	CGObjectInstance * create(ObjectTemplate tmpl) const;	void initTypeData(const JsonNode & input);	void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const;};
 |