mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	This commit is contained in:
		| @@ -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 | ||||
| 	 * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user