minetestmapper/TileGenerator.h

138 lines
3.4 KiB
C
Raw Normal View History

#ifndef TILEGENERATOR_HEADER
#define TILEGENERATOR_HEADER
2012-08-23 12:46:22 +02:00
2012-08-23 14:21:34 +02:00
#include <gd.h>
2012-09-01 15:51:02 +02:00
#include <iosfwd>
2012-08-23 15:35:00 +02:00
#include <list>
2014-08-02 16:30:52 +02:00
#include <config.h>
#if USE_CXX11
#include <unordered_map>
#include <unordered_set>
#else
2012-08-23 13:32:22 +02:00
#include <map>
2012-09-01 15:51:02 +02:00
#include <set>
2014-08-02 16:30:52 +02:00
#endif
#include <stdint.h>
2012-08-23 12:46:22 +02:00
#include <string>
2012-08-25 13:19:58 +02:00
#include "PixelAttributes.h"
2014-03-05 21:41:27 +01:00
#include "db.h"
#include "types.h"
struct Color {
Color(): r(0xFF), g(0xFF), b(0xFF), a(0) {};
2014-04-28 17:43:50 +02:00
Color(uint8_t r, uint8_t g, uint8_t b): r(r), g(g), b(b), a(0) {};
Color(uint8_t r, uint8_t g, uint8_t b, uint8_t a): r(r), g(g), b(b), a(a) {};
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
};
2012-08-23 12:46:22 +02:00
struct ColorEntry {
2014-04-03 20:38:09 +02:00
ColorEntry(): r(0), g(0), b(0), a(0), t(0) {};
ColorEntry(uint8_t r, uint8_t g, uint8_t b, uint8_t a, uint8_t t): r(r), g(g), b(b), a(a), t(t) {};
inline Color to_color() const { return Color(r, g, b, a); }
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
uint8_t t;
};
2012-08-23 12:46:22 +02:00
class TileGenerator
{
private:
2014-08-02 16:30:52 +02:00
#if USE_CXX11
typedef std::unordered_map<std::string, ColorEntry> ColorMap;
typedef std::unordered_map<int, std::string> NameMap;
typedef std::unordered_set<std::string> NameSet;
#else
typedef std::map<std::string, ColorEntry> ColorMap;
2014-08-02 16:30:52 +02:00
typedef std::map<int, std::string> NameMap;
typedef std::set<std::string> NameSet;
#endif
2012-08-23 12:46:22 +02:00
public:
TileGenerator();
~TileGenerator();
void setBgColor(const std::string &bgColor);
void setScaleColor(const std::string &scaleColor);
void setOriginColor(const std::string &originColor);
2012-08-24 10:44:48 +02:00
void setPlayerColor(const std::string &playerColor); Color parseColor(const std::string &color);
2012-08-23 12:46:22 +02:00
void setDrawOrigin(bool drawOrigin);
void setDrawPlayers(bool drawPlayers);
void setDrawScale(bool drawScale);
void setDrawAlpha(bool drawAlpha);
void setShading(bool shading);
2012-11-24 19:25:13 +01:00
void setGeometry(int x, int y, int w, int h);
2014-03-05 18:06:05 +01:00
void setMinY(int y);
void setMaxY(int y);
void parseColorsFile(const std::string &fileName);
2014-03-05 21:41:27 +01:00
void setBackend(std::string backend);
2012-08-23 13:32:22 +02:00
void generate(const std::string &input, const std::string &output);
2016-07-06 21:45:38 +02:00
void setZoom(int zoom);
2012-08-23 13:32:22 +02:00
private:
2012-09-01 15:51:02 +02:00
void parseColorsStream(std::istream &in);
2012-08-23 13:32:22 +02:00
void openDb(const std::string &input);
void loadBlocks();
2012-08-23 14:21:34 +02:00
void createImage();
2012-08-23 15:35:00 +02:00
void renderMap();
2012-08-24 09:46:14 +02:00
std::list<int> getZValueList() const;
void renderMapBlock(const ustring &mapBlock, const BlockPos &pos, int version);
2014-07-08 14:58:40 +02:00
void renderMapBlockBottom(const BlockPos &pos);
2012-08-25 13:19:58 +02:00
void renderShading(int zPos);
2012-08-25 14:11:55 +02:00
void renderScale();
2012-08-25 15:21:51 +02:00
void renderOrigin();
2012-08-25 16:29:41 +02:00
void renderPlayers(const std::string &inputPath);
2012-08-23 14:21:34 +02:00
void writeImage(const std::string &output);
2012-08-25 16:41:53 +02:00
void printUnknown();
2012-08-25 14:11:55 +02:00
int getImageX(int val) const;
int getImageY(int val) const;
2016-07-06 21:45:38 +02:00
void setZoomed(gdImagePtr image, int x, int y, int color);
2012-08-23 12:46:22 +02:00
private:
2012-08-23 14:43:11 +02:00
Color m_bgColor;
Color m_scaleColor;
Color m_originColor;
Color m_playerColor;
2012-08-23 12:46:22 +02:00
bool m_drawOrigin;
bool m_drawPlayers;
bool m_drawScale;
bool m_drawAlpha;
bool m_shading;
std::string m_backend;
2012-08-25 14:11:55 +02:00
int m_border;
2012-08-23 14:06:16 +02:00
2014-03-05 21:41:27 +01:00
DB *m_db;
2012-08-23 14:21:34 +02:00
gdImagePtr m_image;
2012-08-25 13:19:58 +02:00
PixelAttributes m_blockPixelAttributes;
2012-08-23 14:06:16 +02:00
int m_xMin;
int m_xMax;
int m_zMin;
int m_zMax;
2014-03-05 18:06:05 +01:00
int m_yMin;
int m_yMax;
2012-11-24 19:25:13 +01:00
int m_geomX;
int m_geomY;
int m_geomX2;
int m_geomY2;
2012-08-25 13:19:58 +02:00
int m_mapWidth;
int m_mapHeight;
2012-08-23 15:35:00 +02:00
std::list<std::pair<int, int> > m_positions;
2014-08-02 16:30:52 +02:00
NameMap m_nameMap;
ColorMap m_colorMap;
uint16_t m_readPixels[16];
2014-07-08 14:58:40 +02:00
uint16_t m_readInfo[16];
2014-08-02 16:30:52 +02:00
NameSet m_unknownNodes;
Color m_color[16][16];
uint8_t m_thickness[16][16];
2012-08-24 22:51:17 +02:00
int m_blockAirId;
int m_blockIgnoreId;
2016-07-06 21:45:38 +02:00
int m_zoom;
}; // class TileGenerator
2012-08-23 12:46:22 +02:00
#endif // TILEGENERATOR_HEADER