mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Replaced vector of strings with simple bool for flag
This commit is contained in:
		| @@ -129,6 +129,16 @@ const std::string & JsonNode::getModScope() const | ||||
| 	return modScope; | ||||
| } | ||||
|  | ||||
| void JsonNode::setOverrideFlag(bool value) | ||||
| { | ||||
| 	overrideFlag = value; | ||||
| } | ||||
|  | ||||
| bool JsonNode::getOverrideFlag() const | ||||
| { | ||||
| 	return overrideFlag; | ||||
| } | ||||
|  | ||||
| void JsonNode::setModScope(const std::string & metadata, bool recursive) | ||||
| { | ||||
| 	modScope = metadata; | ||||
|   | ||||
| @@ -43,10 +43,9 @@ private: | ||||
|  | ||||
| 	/// Mod-origin of this particular field | ||||
| 	std::string modScope; | ||||
| public: | ||||
| 	/// meta-flags like override | ||||
| 	std::vector<std::string> flags; | ||||
|  | ||||
| 	bool overrideFlag = false; | ||||
| public: | ||||
| 	JsonNode() = default; | ||||
|  | ||||
| 	/// Create single node with specified value | ||||
| @@ -71,6 +70,9 @@ public: | ||||
| 	const std::string & getModScope() const; | ||||
| 	void setModScope(const std::string & metadata, bool recursive = true); | ||||
|  | ||||
| 	void setOverrideFlag(bool value); | ||||
| 	bool getOverrideFlag() const; | ||||
|  | ||||
| 	/// Convert node to another type. Converting to nullptr will clear all data | ||||
| 	void setType(JsonType Type); | ||||
| 	JsonType getType() const; | ||||
| @@ -132,7 +134,16 @@ public: | ||||
| 	template <typename Handler> void serialize(Handler &h) | ||||
| 	{ | ||||
| 		h & modScope; | ||||
| 		h & flags; | ||||
|  | ||||
| 		if (h.version >= Handler::Version::JSON_FLAGS) | ||||
| 		{ | ||||
| 			h & overrideFlag; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			std::vector<std::string> oldFlags; | ||||
| 			h & oldFlags; | ||||
| 		} | ||||
| 		h & data; | ||||
| 	} | ||||
| }; | ||||
|   | ||||
| @@ -255,20 +255,26 @@ bool JsonParser::extractStruct(JsonNode &node) | ||||
| 		if (!extractWhitespace()) | ||||
| 			return false; | ||||
|  | ||||
| 		bool overrideFlag = false; | ||||
| 		std::string key; | ||||
| 		if (!extractString(key)) | ||||
| 			return false; | ||||
|  | ||||
| 		// split key string into actual key and meta-flags | ||||
| 		std::vector<std::string> keyAndFlags; | ||||
| 		boost::split(keyAndFlags, key, boost::is_any_of("#")); | ||||
| 		key = keyAndFlags[0]; | ||||
| 		// check for unknown flags - helps with debugging | ||||
| 		std::vector<std::string> knownFlags = { "override" }; | ||||
| 		for(int i = 1; i < keyAndFlags.size(); i++) | ||||
| 		if (key.find('#') != std::string::npos) | ||||
| 		{ | ||||
| 			if(!vstd::contains(knownFlags, keyAndFlags[i])) | ||||
| 				error("Encountered unknown flag #" + keyAndFlags[i], true); | ||||
| 			// split key string into actual key and meta-flags | ||||
| 			std::vector<std::string> keyAndFlags; | ||||
| 			boost::split(keyAndFlags, key, boost::is_any_of("#")); | ||||
|  | ||||
| 			key = keyAndFlags[0]; | ||||
|  | ||||
| 			for(int i = 1; i < keyAndFlags.size(); i++) | ||||
| 			{ | ||||
| 				if (keyAndFlags[i] == "override") | ||||
| 					overrideFlag = true; | ||||
| 				else | ||||
| 					error("Encountered unknown flag #" + keyAndFlags[i], true); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if (node.Struct().find(key) != node.Struct().end()) | ||||
| @@ -280,9 +286,7 @@ bool JsonParser::extractStruct(JsonNode &node) | ||||
| 		if (!extractElement(node.Struct()[key], '}')) | ||||
| 			return false; | ||||
|  | ||||
| 		// flags from key string belong to referenced element | ||||
| 		for(int i = 1; i < keyAndFlags.size(); i++) | ||||
| 			node.Struct()[key].flags.push_back(keyAndFlags[i]); | ||||
| 		node.Struct()[key].setOverrideFlag(overrideFlag); | ||||
|  | ||||
| 		if (input[pos] == '}') | ||||
| 		{ | ||||
|   | ||||
| @@ -223,7 +223,7 @@ void JsonUtils::merge(JsonNode & dest, JsonNode & source, bool ignoreOverride, b | ||||
| 		} | ||||
| 		case JsonNode::JsonType::DATA_STRUCT: | ||||
| 		{ | ||||
| 			if(!ignoreOverride && vstd::contains(source.flags, "override")) | ||||
| 			if(!ignoreOverride && source.getOverrideFlag()) | ||||
| 			{ | ||||
| 				std::swap(dest, source); | ||||
| 			} | ||||
|   | ||||
| @@ -39,8 +39,6 @@ void JsonWriter::writeEntry(JsonMap::const_iterator entry) | ||||
| 	{ | ||||
| 		if (!entry->second.getModScope().empty()) | ||||
| 			out << prefix << " // " << entry->second.getModScope() << "\n"; | ||||
| 		if(!entry->second.flags.empty()) | ||||
| 			out << prefix << " // flags: " << boost::algorithm::join(entry->second.flags, ", ") << "\n"; | ||||
| 		out << prefix; | ||||
| 	} | ||||
| 	writeString(entry->first); | ||||
| @@ -54,8 +52,6 @@ void JsonWriter::writeEntry(JsonVector::const_iterator entry) | ||||
| 	{ | ||||
| 		if (!entry->getModScope().empty()) | ||||
| 			out << prefix << " // " << entry->getModScope() << "\n"; | ||||
| 		if(!entry->flags.empty()) | ||||
| 			out << prefix << " // flags: " << boost::algorithm::join(entry->flags, ", ") << "\n"; | ||||
| 		out << prefix; | ||||
| 	} | ||||
| 	writeNode(*entry); | ||||
|   | ||||
| @@ -35,7 +35,8 @@ enum class ESerializationVersion : int32_t | ||||
| 	RELEASE_143, // 832 +text container in campaigns, +starting hero in RMG options | ||||
| 	HAS_EXTRA_OPTIONS, // 833 +extra options struct as part of startinfo | ||||
| 	DESTROYED_OBJECTS, // 834 +list of objects destroyed by player | ||||
| 	CAMPAIGN_MAP_TRANSLATIONS, | ||||
| 	CAMPAIGN_MAP_TRANSLATIONS, // 835 +campaigns include translations for its maps | ||||
| 	JSON_FLAGS, // 836 json uses new format for flags | ||||
|  | ||||
| 	CURRENT = CAMPAIGN_MAP_TRANSLATIONS | ||||
| 	CURRENT = JSON_FLAGS | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user