summaryrefslogtreecommitdiffstats
path: root/src/MinedMap.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-02-02 17:56:43 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-02-02 17:56:43 +0100
commitdb59b7385621a271684c3be5f20618d74e631dda (patch)
tree90f9bee4359db4757574dcabeff0fec562826249 /src/MinedMap.cpp
parent8bbc75d42f46c3a3525a5898235d0e1cd5d1677a (diff)
downloadMinedMap-db59b7385621a271684c3be5f20618d74e631dda.tar
MinedMap-db59b7385621a271684c3be5f20618d74e631dda.zip
Refactor info generation
Diffstat (limited to 'src/MinedMap.cpp')
-rw-r--r--src/MinedMap.cpp60
1 files changed, 4 insertions, 56 deletions
diff --git a/src/MinedMap.cpp b/src/MinedMap.cpp
index ddc6e0d..8997104 100644
--- a/src/MinedMap.cpp
+++ b/src/MinedMap.cpp
@@ -24,8 +24,8 @@
*/
+#include "Info.hpp"
#include "World/Region.hpp"
-#include "NBT/ListTag.hpp"
#include <cerrno>
#include <climits>
@@ -153,52 +153,6 @@ static bool checkFilename(const char *name, int *x, int *z) {
}
-static void writeInfo(const std::string &filename, const std::set<std::pair<int, int>> &regions, int minX, int maxX, int minZ, int maxZ) {
- const std::string tmpfile = filename + ".tmp";
-
- FILE *f = fopen(tmpfile.c_str(), "w");
- if (!f) {
- std::fprintf(stderr, "Unable to open %s: %s\n", tmpfile.c_str(), std::strerror(errno));
- return;
- }
-
- fprintf(f, "{\n");
- fprintf(f, " \"info\" : {\n");
- fprintf(f, " \"minX\" : %i,\n", minX);
- fprintf(f, " \"maxX\" : %i,\n", maxX);
- fprintf(f, " \"minZ\" : %i,\n", minZ);
- fprintf(f, " \"maxZ\" : %i\n", maxZ);
- fprintf(f, " },\n");
- fprintf(f, " \"regions\" : [\n");
-
- for (int z = minZ; z <= maxZ; z++) {
- fprintf(f, " [");
-
- for (int x = minX; x <= maxX; x++) {
- fprintf(f, "%s", regions.count(std::make_pair(x, z)) ? "true" : "false");
-
- if (x < maxX)
- fprintf(f, ", ");
- }
-
- if (z < maxZ)
- fprintf(f, "],\n");
- else
- fprintf(f, "]\n");
- }
-
- fprintf(f, " ]\n");
- fprintf(f, "}\n");
-
- fclose(f);
-
- if (std::rename(tmpfile.c_str(), filename.c_str()) < 0) {
- std::fprintf(stderr, "Unable to save %s: %s\n", filename.c_str(), std::strerror(errno));
- unlink(tmpfile.c_str());
- }
-
-}
-
int main(int argc, char *argv[]) {
if (argc < 3) {
std::fprintf(stderr, "Usage: %s <data directory> <output directory>\n", argv[0]);
@@ -216,8 +170,7 @@ int main(int argc, char *argv[]) {
return 1;
}
- std::set<std::pair<int, int>> regions;
- int minX = INT_MAX, maxX = INT_MIN, minZ = INT_MAX, maxZ = INT_MIN;
+ Info info;
struct dirent *entry;
while ((entry = readdir(dir)) != nullptr) {
@@ -225,12 +178,7 @@ int main(int argc, char *argv[]) {
if (!checkFilename(entry->d_name, &x, &z))
continue;
- if (x < minX) minX = x;
- if (x > maxX) maxX = x;
- if (z < minZ) minZ = z;
- if (z > maxZ) maxZ = z;
-
- regions.insert(std::make_pair(x, z));
+ info.addRegion(x, z);
std::string name(entry->d_name);
doRegion(inputdir + "/" + name, outputdir + "/" + name.substr(0, name.length()-3) + "png");
@@ -238,7 +186,7 @@ int main(int argc, char *argv[]) {
closedir(dir);
- writeInfo(outputdir + "/info.json", regions, minX, maxX, minZ, maxZ);
+ info.writeJSON((outputdir + "/info.json").c_str());
return 0;
}