mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-22 22:13:35 +02:00
2399a5a765
Detection of potential conflicts between mods
81 lines
2.0 KiB
C++
81 lines
2.0 KiB
C++
/*
|
|
* ContentTypeHandler.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 "../json/JsonNode.h"
|
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
|
|
|
class IHandlerBase;
|
|
class CModInfo;
|
|
|
|
/// internal type to handle loading of one data type (e.g. artifacts, creatures)
|
|
class DLL_LINKAGE ContentTypeHandler
|
|
{
|
|
JsonNode conflictList;
|
|
|
|
public:
|
|
struct ModInfo
|
|
{
|
|
/// mod data from this mod and for this mod
|
|
JsonNode modData;
|
|
/// mod data for this mod from other mods (patches)
|
|
JsonNode patches;
|
|
};
|
|
/// handler to which all data will be loaded
|
|
IHandlerBase * handler;
|
|
std::string entityName;
|
|
|
|
/// contains all loaded H3 data
|
|
std::vector<JsonNode> originalData;
|
|
std::map<std::string, ModInfo> modData;
|
|
|
|
ContentTypeHandler(IHandlerBase * handler, const std::string & objectName);
|
|
|
|
/// local version of methods in ContentHandler
|
|
/// returns true if loading was successful
|
|
bool preloadModData(const std::string & modName, const JsonNode & fileList, bool validate);
|
|
bool loadMod(const std::string & modName, bool validate);
|
|
void loadCustom();
|
|
void afterLoadFinalization();
|
|
};
|
|
|
|
/// class used to load all game data into handlers. Used only during loading
|
|
class DLL_LINKAGE CContentHandler
|
|
{
|
|
/// preloads all data from fileList as data from modName.
|
|
bool preloadModData(const std::string & modName, JsonNode modConfig, bool validate);
|
|
|
|
/// actually loads data in mod
|
|
bool loadMod(const std::string & modName, bool validate);
|
|
|
|
std::map<std::string, ContentTypeHandler> handlers;
|
|
|
|
bool validateMod(const CModInfo & mod) const;
|
|
public:
|
|
void init();
|
|
|
|
/// preloads all data from fileList as data from modName.
|
|
void preloadData(CModInfo & mod);
|
|
|
|
/// actually loads data in mod
|
|
void load(CModInfo & mod);
|
|
|
|
void loadCustom();
|
|
|
|
/// all data was loaded, time for final validation / integration
|
|
void afterLoadFinalization();
|
|
|
|
const ContentTypeHandler & operator[] (const std::string & name) const;
|
|
};
|
|
|
|
|
|
VCMI_LIB_NAMESPACE_END
|