diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 6f9a24937..a4010b48b 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -68,8 +68,8 @@ set(lib_SRCS CHeroHandler.cpp CModHandler.cpp CObstacleInstance.cpp - CObjectWithReward.cpp CObjectConstructor.cpp + CObjectWithReward.cpp CSpellHandler.cpp CThreadHelper.cpp CTownHandler.cpp diff --git a/lib/CObjectConstructor.cpp b/lib/CObjectConstructor.cpp new file mode 100644 index 000000000..8b5edc482 --- /dev/null +++ b/lib/CObjectConstructor.cpp @@ -0,0 +1,12 @@ +#include "StdInc.h" +#include "CObjectConstructor.h" + +/* + * CObjectConstructor.cpp, 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 + * + */ diff --git a/lib/CObjectConstructor.h b/lib/CObjectConstructor.h new file mode 100644 index 000000000..86ed80cb7 --- /dev/null +++ b/lib/CObjectConstructor.h @@ -0,0 +1,57 @@ +#pragma once + +#include "CObjectWithReward.h" +#include "CDefObjInfoHandler.h" +#include "JsonNode.h" + +/* + * CObjectConstructor.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 CRandomRewardObjectInfo : public IObjectInfo +{ + JsonNode objectConfig; + +public: + bool givesResources() const override; + + bool givesExperience() const override; + bool givesMana() const override; + bool givesMovement() const override; + + bool givesPrimarySkills() const override; + bool givesSecondarySkills() const override; + + bool givesArtifacts() const override; + bool givesCreatures() const override; + bool givesSpells() const override; + + bool givesBonuses() const override; + + void configureObject(CObjectWithReward * object) const; + + CRandomRewardObjectInfo() + {} + + void init(JsonNode objectConfig); +}; + +class CObjectWithRewardConstructor : public IObjectTypeHandler +{ + std::map > objectConfigs; + +public: + CGObjectInstance * create(ui32 id, ui32 subID) const override; + + bool handlesID(ui32 id) const override; + + void configureObject(CGObjectInstance * object) const override; + + IObjectInfo * getObjectInfo(ui32 id, ui32 subID) const override; +};