minetestmapper/mapper.cpp

163 lines
3.5 KiB
C++
Raw Normal View History

2012-08-22 15:22:01 +02:00
/*
* =====================================================================
* Version: 1.0
* Created: 22.08.2012 15:15:54
* Author: Miroslav Bendík
* Company: LinuxOS.sk
* =====================================================================
*/
2012-08-22 15:49:45 +02:00
#include <cstdlib>
2012-08-23 12:30:09 +02:00
#include <getopt.h>
2012-08-22 15:49:45 +02:00
#include <iostream>
2012-08-23 12:30:09 +02:00
#include <map>
2012-08-22 16:04:43 +02:00
#include <string>
2012-11-24 19:25:13 +01:00
#include <sstream>
2014-03-09 12:32:13 +01:00
#include <stdexcept>
2012-08-23 12:46:22 +02:00
#include "TileGenerator.h"
2012-08-22 15:49:45 +02:00
using namespace std;
void usage()
{
2013-07-29 18:16:08 +02:00
const char *usage_text = "minetestmapper [options]\n"
" -i/--input <world_path>\n"
" -o/--output <output_image.png>\n"
" --bgcolor <color>\n"
" --scalecolor <color>\n"
" --playercolor <color>\n"
" --origincolor <color>\n"
" --drawscale\n"
" --drawplayers\n"
" --draworigin\n"
" --drawalpha\n"
" --noshading\n"
2014-03-05 21:41:27 +01:00
" --min-y <y>\n"
" --max-y <y>\n"
" --backend <sqlite3/leveldb>\n"
2013-07-29 18:16:08 +02:00
" --geometry x:y+w+h\n"
"Color format: '#000000'\n";
2012-08-22 15:49:45 +02:00
std::cout << usage_text;
}
2012-08-22 15:22:01 +02:00
int main(int argc, char *argv[])
{
2012-08-22 15:49:45 +02:00
static struct option long_options[] =
{
{"help", no_argument, 0, 'h'},
{"input", required_argument, 0, 'i'},
{"output", required_argument, 0, 'o'},
{"bgcolor", required_argument, 0, 'b'},
{"scalecolor", required_argument, 0, 's'},
{"origincolor", required_argument, 0, 'r'},
{"playercolor", required_argument, 0, 'p'},
2012-08-22 16:04:43 +02:00
{"draworigin", no_argument, 0, 'R'},
{"drawplayers", no_argument, 0, 'P'},
{"drawscale", no_argument, 0, 'S'},
{"drawalpha", no_argument, 0, 'e'},
{"noshading", no_argument, 0, 'H'},
2012-11-24 19:25:13 +01:00
{"geometry", required_argument, 0, 'g'},
2014-03-05 18:06:05 +01:00
{"min-y", required_argument, 0, 'a'},
{"max-y", required_argument, 0, 'c'},
2014-03-05 21:41:27 +01:00
{"backend", required_argument, 0, 'd'},
2012-08-22 15:49:45 +02:00
};
2012-08-23 12:46:22 +02:00
2012-08-22 16:04:43 +02:00
string input;
string output;
2012-08-23 12:46:22 +02:00
TileGenerator generator;
generator.parseColorsFile("colors.txt");
2012-08-22 15:49:45 +02:00
int option_index = 0;
2012-08-22 16:04:43 +02:00
int c = 0;
2012-08-22 15:49:45 +02:00
while (1) {
c = getopt_long(argc, argv, "hi:o:", long_options, &option_index);
if (c == -1) {
2012-08-22 16:04:43 +02:00
if (input.empty() || output.empty()) {
usage();
2014-03-05 18:06:05 +01:00
return 0;
2012-08-22 16:04:43 +02:00
}
2012-08-22 15:49:45 +02:00
break;
}
2012-08-22 16:04:43 +02:00
switch (c) {
case 'h':
usage();
return 0;
2012-08-22 16:04:43 +02:00
break;
case 'i':
input = optarg;
break;
case 'o':
output = optarg;
break;
case 'b':
2012-08-23 12:46:22 +02:00
generator.setBgColor(optarg);
2012-08-22 16:04:43 +02:00
break;
case 's':
2012-08-23 12:46:22 +02:00
generator.setScaleColor(optarg);
2012-08-22 16:04:43 +02:00
break;
case 'r':
2012-08-23 12:46:22 +02:00
generator.setOriginColor(optarg);
2012-08-22 16:04:43 +02:00
break;
case 'p':
2012-08-23 12:46:22 +02:00
generator.setPlayerColor(optarg);
2012-08-22 16:04:43 +02:00
break;
case 'R':
2012-08-23 12:46:22 +02:00
generator.setDrawOrigin(true);
2012-08-22 16:04:43 +02:00
break;
case 'P':
2012-08-23 12:46:22 +02:00
generator.setDrawPlayers(true);
2012-08-22 16:04:43 +02:00
break;
case 'S':
2012-08-23 12:46:22 +02:00
generator.setDrawScale(true);
2012-08-22 16:04:43 +02:00
break;
case 'e':
generator.setDrawAlpha(true);
break;
case 'H':
generator.setShading(false);
break;
2014-03-05 18:06:05 +01:00
case 'a': {
istringstream iss;
iss.str(optarg);
int miny;
iss >> miny;
generator.setMinY(miny);
}
break;
case 'c': {
istringstream iss;
iss.str(optarg);
int maxy;
iss >> maxy;
generator.setMaxY(maxy);
}
break;
2012-11-24 19:25:13 +01:00
case 'g': {
istringstream geometry;
geometry.str(optarg);
int x, y, w, h;
char c;
geometry >> x >> c >> y >> w >> h;
if (geometry.fail() || c != ':' || w < 1 || h < 1) {
usage();
2014-03-05 18:06:05 +01:00
exit(1);
2012-11-24 19:25:13 +01:00
}
generator.setGeometry(x, y, w, h);
}
break;
2014-03-05 21:41:27 +01:00
case 'd':
generator.setBackend(optarg);
break;
2012-08-22 16:04:43 +02:00
default:
2014-03-05 18:06:05 +01:00
exit(1);
2012-08-22 16:04:43 +02:00
}
2012-08-22 15:49:45 +02:00
}
try {
generator.generate(input, output);
} catch(std::runtime_error e) {
std::cout<<"Exception: "<<e.what()<<std::endl;
return 1;
}
return 0;
2012-08-22 15:22:01 +02:00
}