mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
This commit is contained in:
parent
1e11904d8a
commit
0eb496fb57
@ -261,8 +261,7 @@ CArtifact * CArtHandler::loadFromJson(const JsonNode & node)
|
||||
for (auto b : node["bonuses"].Vector())
|
||||
{
|
||||
auto bonus = JsonUtils::parseBonus (b);
|
||||
bonus->sid = art->id;
|
||||
art->addNewBonus (bonus);
|
||||
art->addNewBonus(bonus);
|
||||
}
|
||||
return art;
|
||||
}
|
||||
@ -637,6 +636,20 @@ void CArtHandler::fillList( std::vector<CArtifact*> &listToBeFilled, CArtifact::
|
||||
}
|
||||
}
|
||||
|
||||
void CArtHandler::afterLoadFinalization()
|
||||
{
|
||||
//All artifacts have their id, so we can properly update their bonuses' source ids.
|
||||
for(auto &art : artifacts)
|
||||
{
|
||||
for(auto &bonus : art->getExportedBonusList())
|
||||
{
|
||||
assert(art == artifacts[art->id]);
|
||||
assert(bonus->source == Bonus::ARTIFACT);
|
||||
bonus->sid = art->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CArtifactInstance::CArtifactInstance()
|
||||
{
|
||||
init();
|
||||
|
@ -235,6 +235,7 @@ public:
|
||||
|
||||
void loadObject(std::string scope, std::string name, const JsonNode & data) override;
|
||||
void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override;
|
||||
void afterLoadFinalization() override;
|
||||
|
||||
std::vector<bool> getDefaultAllowed() const override;
|
||||
|
||||
|
@ -264,6 +264,11 @@ void CContentHandler::ContentTypeHandler::loadMod(std::string modName)
|
||||
}
|
||||
}
|
||||
|
||||
void CContentHandler::ContentTypeHandler::afterLoadFinalization()
|
||||
{
|
||||
handler->afterLoadFinalization();
|
||||
}
|
||||
|
||||
CContentHandler::CContentHandler()
|
||||
{
|
||||
handlers.insert(std::make_pair("heroClasses", ContentTypeHandler(&VLC->heroh->classes, "heroClass")));
|
||||
@ -291,6 +296,14 @@ void CContentHandler::loadMod(std::string modName)
|
||||
}
|
||||
}
|
||||
|
||||
void CContentHandler::afterLoadFinalization()
|
||||
{
|
||||
for(auto & handler : handlers)
|
||||
{
|
||||
handler.second.afterLoadFinalization();
|
||||
}
|
||||
}
|
||||
|
||||
CModHandler::CModHandler()
|
||||
{
|
||||
for (int i = 0; i < GameConstants::RESOURCE_QUANTITY; ++i)
|
||||
@ -558,8 +571,11 @@ void CModHandler::loadGameContent()
|
||||
VLC->creh->loadCrExpBon();
|
||||
VLC->creh->buildBonusTreeForTiers(); //do that after all new creatures are loaded
|
||||
identifiers.finalize();
|
||||
|
||||
logGlobal->infoStream() << "\tResolving identifiers: " << timer.getDiff() << " ms";
|
||||
|
||||
content.afterLoadFinalization();
|
||||
logGlobal->infoStream() << "\tHandlers post-load finalization: " << timer.getDiff() << " ms";
|
||||
|
||||
logGlobal->infoStream() << "\tAll game content loaded in " << totalTime.getDiff() << " ms";
|
||||
}
|
||||
|
||||
|
@ -93,6 +93,7 @@ class CContentHandler
|
||||
/// local version of methods in ContentHandler
|
||||
void preloadModData(std::string modName, std::vector<std::string> fileList);
|
||||
void loadMod(std::string modName);
|
||||
void afterLoadFinalization();
|
||||
};
|
||||
|
||||
std::map<std::string, ContentTypeHandler> handlers;
|
||||
@ -105,6 +106,9 @@ public:
|
||||
|
||||
/// actually loads data in mod
|
||||
void loadMod(std::string modName);
|
||||
|
||||
/// all data was loaded, time for final validation / integration
|
||||
void afterLoadFinalization();
|
||||
};
|
||||
|
||||
typedef std::string TModID;
|
||||
|
@ -29,6 +29,9 @@ public:
|
||||
virtual void loadObject(std::string scope, std::string name, const JsonNode & data) = 0;
|
||||
virtual void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) = 0;
|
||||
|
||||
/// allows handler to do post-loading step for validation or integration of loaded data
|
||||
virtual void afterLoadFinalization(){};
|
||||
|
||||
/**
|
||||
* Gets a list of objects that are allowed by default on maps
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user