mirror of
https://github.com/vcmi/vcmi.git
synced 2025-12-01 23:12:49 +02:00
First part of implementation of some type-specific handlers.
TODO: - merge dwellings.json into object configs - proper implementation of overrides for towns - fully connect new API to RMG/H3M
This commit is contained in:
104
lib/mapObjects/CommonConstructors.h
Normal file
104
lib/mapObjects/CommonConstructors.h
Normal file
@@ -0,0 +1,104 @@
|
||||
#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 handler
|
||||
template<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;
|
||||
};
|
||||
Reference in New Issue
Block a user