Преглед изворни кода

Read and write mods into map

nordsoft пре 2 година
родитељ
комит
d244702abc
2 измењених фајлова са 22 додато и 1 уклоњено
  1. 4 0
      lib/mapping/MapFormatH3M.cpp
  2. 18 1
      lib/mapping/MapFormatJson.cpp

+ 4 - 0
lib/mapping/MapFormatH3M.cpp

@@ -170,6 +170,10 @@ void CMapLoaderH3M::readHeader()
 	{
 		throw std::runtime_error("Invalid map format!");
 	}
+	
+	// include basic mod
+	if(mapHeader->version == EMapFormat::WOG)
+		mapHeader->mods["wake-of-gods"];
 
 	// Read map name, description, dimensions,...
 	mapHeader->areAnyPlayers = reader->readBool();

+ 18 - 1
lib/mapping/MapFormatJson.cpp

@@ -339,7 +339,7 @@ namespace TerrainDetail
 
 ///CMapFormatJson
 const int CMapFormatJson::VERSION_MAJOR = 1;
-const int CMapFormatJson::VERSION_MINOR = 0;
+const int CMapFormatJson::VERSION_MINOR = 1;
 
 const std::string CMapFormatJson::HEADER_FILE_NAME = "header.json";
 const std::string CMapFormatJson::OBJECTS_FILE_NAME = "objects.json";
@@ -947,6 +947,13 @@ void CMapLoaderJson::readHeader(const bool complete)
 	JsonDeserializer handler(mapObjectResolver.get(), header);
 
 	mapHeader->version = EMapFormat::VCMI;//todo: new version field
+	
+	//loading mods
+	if(!header["mods"].isNull())
+	{
+		for(auto & mod : header["mods"].Vector())
+			mapHeader->mods[mod["name"].String()] = CModInfo::Version::fromString(mod["version"].String());
+	}
 
 	//todo: multilevel map load support
 	{
@@ -1279,6 +1286,16 @@ void CMapSaverJson::writeHeader()
 
 	header["versionMajor"].Float() = VERSION_MAJOR;
 	header["versionMinor"].Float() = VERSION_MINOR;
+	
+	//write mods
+	JsonNode & mods = header["mods"];
+	for(const auto & mod : mapHeader->mods)
+	{
+		JsonNode modWriter;
+		modWriter["name"].String() = mod.first;
+		modWriter["version"].String() = mod.second.toString();
+		mods.Vector().push_back(modWriter);
+	}
 
 	//todo: multilevel map save support
 	JsonNode & levels = header["mapLevels"];