mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
IdentifierStorage is now separate handler in VLC
This commit is contained in:
parent
c8a6cd74cc
commit
7e27ac7073
@ -23,7 +23,7 @@ std::string IHandlerBase::getScopeBuiltin()
|
||||
|
||||
void IHandlerBase::registerObject(const std::string & scope, const std::string & type_name, const std::string & name, si32 index)
|
||||
{
|
||||
return VLC->modh->getIdentifiers().registerObject(scope, type_name, name, index);
|
||||
return VLC->identifiersHandler->registerObject(scope, type_name, name, index);
|
||||
}
|
||||
|
||||
VCMI_LIB_NAMESPACE_END
|
||||
|
@ -111,7 +111,7 @@ const IBonusTypeHandler * LibClasses::getBth() const
|
||||
|
||||
const CIdentifierStorage * LibClasses::identifiers() const
|
||||
{
|
||||
return &modh->getIdentifiers();
|
||||
return identifiersHandler;
|
||||
}
|
||||
|
||||
const spells::effects::Registry * LibClasses::spellEffects() const
|
||||
@ -185,6 +185,7 @@ void LibClasses::loadModFilesystem(bool onlyEssential)
|
||||
{
|
||||
CStopWatch loadTime;
|
||||
modh = new CModHandler();
|
||||
identifiersHandler = new CIdentifierStorage();
|
||||
modh->loadMods(onlyEssential);
|
||||
logGlobal->info("\tMod handler: %d ms", loadTime.getDiff());
|
||||
|
||||
@ -212,49 +213,29 @@ void LibClasses::init(bool onlyEssential)
|
||||
modh->initializeConfig();
|
||||
|
||||
createHandler(generaltexth, "General text", pomtime);
|
||||
|
||||
createHandler(bth, "Bonus type", pomtime);
|
||||
|
||||
createHandler(roadTypeHandler, "Road", pomtime);
|
||||
createHandler(riverTypeHandler, "River", pomtime);
|
||||
createHandler(terrainTypeHandler, "Terrain", pomtime);
|
||||
|
||||
createHandler(heroh, "Hero", pomtime);
|
||||
|
||||
createHandler(arth, "Artifact", pomtime);
|
||||
|
||||
createHandler(creh, "Creature", pomtime);
|
||||
|
||||
createHandler(townh, "Town", pomtime);
|
||||
|
||||
createHandler(objh, "Object", pomtime);
|
||||
|
||||
createHandler(objtypeh, "Object types information", pomtime);
|
||||
|
||||
createHandler(spellh, "Spell", pomtime);
|
||||
|
||||
createHandler(skillh, "Skill", pomtime);
|
||||
|
||||
createHandler(terviewh, "Terrain view pattern", pomtime);
|
||||
|
||||
createHandler(tplh, "Template", pomtime); //templates need already resolved identifiers (refactor?)
|
||||
|
||||
#if SCRIPTING_ENABLED
|
||||
createHandler(scriptHandler, "Script", pomtime);
|
||||
#endif
|
||||
|
||||
createHandler(battlefieldsHandler, "Battlefields", pomtime);
|
||||
|
||||
createHandler(obstacleHandler, "Obstacles", pomtime);
|
||||
|
||||
logGlobal->info("\tInitializing handlers: %d ms", totalTime.getDiff());
|
||||
|
||||
modh->load();
|
||||
|
||||
modh->afterLoad(onlyEssential);
|
||||
|
||||
//FIXME: make sure that everything is ok after game restart
|
||||
//TODO: This should be done every time mod config changes
|
||||
}
|
||||
|
||||
void LibClasses::clear()
|
||||
@ -276,6 +257,7 @@ void LibClasses::clear()
|
||||
#endif
|
||||
delete battlefieldsHandler;
|
||||
delete generaltexth;
|
||||
delete identifiersHandler;
|
||||
makeNull();
|
||||
}
|
||||
|
||||
@ -298,6 +280,7 @@ void LibClasses::makeNull()
|
||||
scriptHandler = nullptr;
|
||||
#endif
|
||||
battlefieldsHandler = nullptr;
|
||||
identifiersHandler = nullptr;
|
||||
}
|
||||
|
||||
LibClasses::LibClasses()
|
||||
|
@ -97,6 +97,7 @@ public:
|
||||
TerrainTypeHandler * terrainTypeHandler;
|
||||
RoadTypeHandler * roadTypeHandler;
|
||||
RiverTypeHandler * riverTypeHandler;
|
||||
CIdentifierStorage * identifiersHandler;
|
||||
|
||||
CTerrainViewPatternConfig * terviewh;
|
||||
CRmgTemplateStorage * tplh;
|
||||
@ -122,8 +123,9 @@ public:
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
h & identifiersHandler; // must be first - identifiers registry is used for handlers loading
|
||||
#if SCRIPTING_ENABLED
|
||||
h & scriptHandler;//must be first (or second after modh), it can modify factories other handlers depends on
|
||||
h & scriptHandler;//must be first (or second after identifiers), it can modify factories other handlers depends on
|
||||
if(!h.saving)
|
||||
{
|
||||
scriptsLoaded();
|
||||
|
@ -277,7 +277,7 @@ void CObjectClassesHandler::loadObject(std::string scope, std::string name, cons
|
||||
{
|
||||
auto * object = loadFromJson(scope, data, name, objects.size());
|
||||
objects.push_back(object);
|
||||
VLC->modh->getIdentifiers().registerObject(scope, "object", name, object->id);
|
||||
VLC->identifiersHandler->registerObject(scope, "object", name, object->id);
|
||||
}
|
||||
|
||||
void CObjectClassesHandler::loadObject(std::string scope, std::string name, const JsonNode & data, size_t index)
|
||||
@ -285,7 +285,7 @@ void CObjectClassesHandler::loadObject(std::string scope, std::string name, cons
|
||||
auto * object = loadFromJson(scope, data, name, index);
|
||||
assert(objects[(si32)index] == nullptr); // ensure that this id was not loaded before
|
||||
objects[static_cast<si32>(index)] = object;
|
||||
VLC->modh->getIdentifiers().registerObject(scope, "object", name, object->id);
|
||||
VLC->identifiersHandler->registerObject(scope, "object", name, object->id);
|
||||
}
|
||||
|
||||
void CObjectClassesHandler::loadSubObject(const std::string & identifier, JsonNode config, si32 ID, si32 subID)
|
||||
|
@ -41,25 +41,8 @@ static JsonNode loadModSettings(const std::string & path)
|
||||
|
||||
CModHandler::CModHandler()
|
||||
: content(std::make_shared<CContentHandler>())
|
||||
, identifiers(std::make_unique<CIdentifierStorage>())
|
||||
, coreMod(std::make_unique<CModInfo>())
|
||||
{
|
||||
//TODO: moddable spell schools
|
||||
for (auto i = 0; i < GameConstants::DEFAULT_SCHOOLS; ++i)
|
||||
identifiers->registerObject(ModScope::scopeBuiltin(), "spellSchool", SpellConfig::SCHOOL[i].jsonName, SpellConfig::SCHOOL[i].id);
|
||||
|
||||
identifiers->registerObject(ModScope::scopeBuiltin(), "spellSchool", "any", SpellSchool(ESpellSchool::ANY));
|
||||
|
||||
for (int i = 0; i < GameConstants::RESOURCE_QUANTITY; ++i)
|
||||
{
|
||||
identifiers->registerObject(ModScope::scopeBuiltin(), "resource", GameConstants::RESOURCE_NAMES[i], i);
|
||||
}
|
||||
|
||||
for(int i=0; i<GameConstants::PRIMARY_SKILLS; ++i)
|
||||
{
|
||||
identifiers->registerObject(ModScope::scopeBuiltin(), "primSkill", NPrimarySkill::names[i], i);
|
||||
identifiers->registerObject(ModScope::scopeBuiltin(), "primarySkill", NPrimarySkill::names[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
CModHandler::~CModHandler() = default;
|
||||
@ -462,7 +445,7 @@ void CModHandler::load()
|
||||
|
||||
logMod->info("\tLoading mod data: %d ms", timer.getDiff());
|
||||
VLC->creh->loadCrExpMod();
|
||||
identifiers->finalize();
|
||||
VLC->identifiersHandler->finalize();
|
||||
logMod->info("\tResolving identifiers: %d ms", timer.getDiff());
|
||||
|
||||
content->afterLoadFinalization();
|
||||
@ -534,9 +517,4 @@ void CModHandler::trySetActiveMods(std::vector<TModID> saveActiveMods, const std
|
||||
std::swap(activeMods, newActiveMods);
|
||||
}
|
||||
|
||||
CIdentifierStorage & CModHandler::getIdentifiers()
|
||||
{
|
||||
return *identifiers;
|
||||
}
|
||||
|
||||
VCMI_LIB_NAMESPACE_END
|
||||
|
@ -54,13 +54,9 @@ class DLL_LINKAGE CModHandler : boost::noncopyable
|
||||
/// Attempt to set active mods according to provided list of mods from save, throws on failure
|
||||
void trySetActiveMods(std::vector<TModID> saveActiveMods, const std::map<TModID, CModVersion> & modList);
|
||||
|
||||
std::unique_ptr<CIdentifierStorage> identifiers;
|
||||
|
||||
public:
|
||||
std::shared_ptr<CContentHandler> content; //(!)Do not serialize FIXME: make private
|
||||
|
||||
CIdentifierStorage & getIdentifiers();
|
||||
|
||||
/// receives list of available mods and trying to load mod.json from all of them
|
||||
void initializeConfig();
|
||||
void loadMods(bool onlyEssential = false);
|
||||
@ -109,8 +105,6 @@ public:
|
||||
|
||||
trySetActiveMods(saveActiveMods, modVersions);
|
||||
}
|
||||
|
||||
h & identifiers;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -15,11 +15,33 @@
|
||||
|
||||
#include "../JsonNode.h"
|
||||
#include "../VCMI_Lib.h"
|
||||
#include "../constants/StringConstants.h"
|
||||
#include "../spells/CSpellHandler.h"
|
||||
|
||||
#include <vstd/StringUtils.h>
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
CIdentifierStorage::CIdentifierStorage()
|
||||
{
|
||||
//TODO: moddable spell schools
|
||||
for (auto i = 0; i < GameConstants::DEFAULT_SCHOOLS; ++i)
|
||||
registerObject(ModScope::scopeBuiltin(), "spellSchool", SpellConfig::SCHOOL[i].jsonName, SpellConfig::SCHOOL[i].id);
|
||||
|
||||
registerObject(ModScope::scopeBuiltin(), "spellSchool", "any", SpellSchool(ESpellSchool::ANY));
|
||||
|
||||
for (int i = 0; i < GameConstants::RESOURCE_QUANTITY; ++i)
|
||||
{
|
||||
registerObject(ModScope::scopeBuiltin(), "resource", GameConstants::RESOURCE_NAMES[i], i);
|
||||
}
|
||||
|
||||
for(int i=0; i<GameConstants::PRIMARY_SKILLS; ++i)
|
||||
{
|
||||
registerObject(ModScope::scopeBuiltin(), "primSkill", NPrimarySkill::names[i], i);
|
||||
registerObject(ModScope::scopeBuiltin(), "primarySkill", NPrimarySkill::names[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
void CIdentifierStorage::checkIdentifier(std::string & ID)
|
||||
{
|
||||
if (boost::algorithm::ends_with(ID, "."))
|
||||
|
@ -73,7 +73,7 @@ class DLL_LINKAGE CIdentifierStorage
|
||||
std::vector<ObjectData> getPossibleIdentifiers(const ObjectCallback & callback) const;
|
||||
|
||||
public:
|
||||
CIdentifierStorage() = default;
|
||||
CIdentifierStorage();
|
||||
virtual ~CIdentifierStorage() = default;
|
||||
|
||||
/// request identifier for specific object name.
|
||||
|
Loading…
Reference in New Issue
Block a user