Explorar o código

Text container fix

nordsoft %!s(int64=2) %!d(string=hai) anos
pai
achega
6093f042dd

+ 5 - 5
lib/CGeneralTextHandler.cpp

@@ -264,21 +264,21 @@ void TextLocalizationContainer::registerStringOverride(const std::string & modCo
 
 void TextLocalizationContainer::addSubContainer(const TextLocalizationContainer & container)
 {
-	subContainers.insert(&container);
+	subContainers.push_back(&container);
 }
 
 void TextLocalizationContainer::removeSubContainer(const TextLocalizationContainer & container)
 {
-	subContainers.erase(&container);
+	std::remove(subContainers.begin(), subContainers.end(), &container);
 }
 
 const std::string & TextLocalizationContainer::deserialize(const TextIdentifier & identifier) const
 {
 	if(stringsLocalizations.count(identifier.get()) == 0)
 	{
-		for(const auto * container : subContainers)
-			if(container->identifierExists(identifier))
-				return container->deserialize(identifier);
+		for(auto containerIter = subContainers.rbegin(); containerIter != subContainers.rend(); ++containerIter)
+			if((*containerIter)->identifierExists(identifier))
+				return (*containerIter)->deserialize(identifier);
 		
 		logGlobal->error("Unable to find localization for string '%s'", identifier.get());
 		return identifier.get();

+ 1 - 1
lib/CGeneralTextHandler.h

@@ -146,7 +146,7 @@ protected:
 	/// map identifier -> localization
 	std::unordered_map<std::string, StringState> stringsLocalizations;
 	
-	std::set<const TextLocalizationContainer *> subContainers;
+	std::vector<const TextLocalizationContainer *> subContainers;
 	
 	/// add selected string to internal storage as high-priority strings
 	void registerStringOverride(const std::string & modContext, const std::string & language, const TextIdentifier & UID, const std::string & localized);

+ 3 - 0
lib/mapping/CMapHeader.cpp

@@ -144,6 +144,9 @@ ui8 CMapHeader::levels() const
 
 void CMapHeader::registerMapStrings()
 {
+	VLC->generaltexth->removeSubContainer(*this);
+	VLC->generaltexth->addSubContainer(*this);
+	
 	//get supported languages. Assuming that translation containing most strings is the base language
 	std::set<std::string> mapLanguages, mapBaseLanguages;
 	int maxStrings = 0;

+ 3 - 0
lib/mapping/CMapInfo.cpp

@@ -105,7 +105,10 @@ std::string CMapInfo::getNameTranslated() const
 	if(campaign && !campaign->getNameTranslated().empty())
 		return campaign->getNameTranslated();
 	else if(mapHeader && !mapHeader->name.empty())
+	{
+		mapHeader->registerMapStrings();
 		return mapHeader->name.toString();
+	}
 	else
 		return VLC->generaltexth->allTexts[508];
 }