diff --git a/Changelog b/Changelog index 223e127..240b691 100644 --- a/Changelog +++ b/Changelog @@ -12,6 +12,11 @@ are: point, line, rectangle, ellipse (circle), text. Translucency (alpha) is supported, although for ellipses, it does not work as expected (due to a bug in libgd) + - A default color can be specified for invisible/undefined nodes in rendered + blocks Normally, such nodes are not drawn, so they have the background + color; If a different default color is specified, undefined/invisible + nodes in defined blocks get the default color, and can be distinguished + from undefined blocks (which still have the regular background color). Enhancements: - Failure to process a command-line option now causes a specific error message. diff --git a/README.rst b/README.rst index 32f3d72..0dcdc98 100644 --- a/README.rst +++ b/README.rst @@ -137,6 +137,13 @@ colors : bgcolor: Background color of image, `--bgcolor #ffffff` +blockcolor: + Default color of nodes in blocks that are in the database, `--blockcolor #ffffff` + + If a block is in the database, but some of its nodes are not visible (because they are + air, or 'invalid', the nodes are drawn in this color (as opposed to the background + color, which shows for blocks that are not in the database) + scalecolor: Color of scale, `--scalecolor #000000` diff --git a/TileGenerator.cpp b/TileGenerator.cpp index 07afe57..5f078c5 100644 --- a/TileGenerator.cpp +++ b/TileGenerator.cpp @@ -122,6 +122,7 @@ TileGenerator::TileGenerator(): verboseStatistics(false), progressIndicator(false), m_bgColor(255, 255, 255), + m_blockDefaultColor(0, 0, 0, 0), m_scaleColor(0, 0, 0), m_originColor(255, 0, 0), m_playerColor(255, 0, 0), @@ -175,6 +176,13 @@ void TileGenerator::setBgColor(const Color &bgColor) m_bgColor = bgColor; } +void TileGenerator::setBlockDefaultColor(const Color &color) +{ + m_blockDefaultColor = color; + // Any value will do, except for 0 + m_blockDefaultColor.a = 1; +} + void TileGenerator::setShrinkGeometry(bool shrink) { m_shrinkGeometry = shrink; @@ -801,7 +809,7 @@ void TileGenerator::pushPixelRows(int zPosLimit) { { int ix = mapX2ImageX(mapX); assert(ix - m_border >= 0 && ix - m_border < m_pictWidth); } { int iy = mapY2ImageY(mapY); assert(iy - m_border >= 0 && iy - m_border < m_pictHeight); } #endif - if (pixel.is_valid()) + if (pixel.is_valid() || pixel.color().to_uint()) m_image->tpixels[mapY2ImageY(mapY)][mapX2ImageX(mapX)] = pixel.color().to_libgd(); } } @@ -1203,6 +1211,11 @@ inline void TileGenerator::renderMapBlock(const ustring &mapBlock, const BlockPo if (m_readedPixels[z] & (1 << x)) { continue; } + if (m_blockDefaultColor.to_uint() && !m_blockPixelAttributes.attribute(zBegin + 15 - z,xBegin + x).color().to_uint()) { + PixelAttribute pixel = PixelAttribute(m_blockDefaultColor, NAN); + m_blockPixelAttributes.attribute(zBegin + 15 - z,xBegin + x) = pixel; + rowIsEmpty = false; + } for (int y = maxY; y >= minY; --y) { int position = x + (y << 4) + (z << 8); int content = readBlockContent(mapData, version, position); diff --git a/TileGenerator.h b/TileGenerator.h index af2679b..872e8d1 100644 --- a/TileGenerator.h +++ b/TileGenerator.h @@ -83,6 +83,7 @@ public: TileGenerator(); ~TileGenerator(); void setBgColor(const Color &bgColor); + void setBlockDefaultColor(const Color &olor); void setScaleColor(const Color &scaleColor); void setOriginColor(const Color &originColor); void setPlayerColor(const Color &playerColor); @@ -159,6 +160,7 @@ public: private: Color m_bgColor; + Color m_blockDefaultColor; Color m_scaleColor; Color m_originColor; Color m_playerColor; diff --git a/mapper.cpp b/mapper.cpp index b260716..d30cfaa 100644 --- a/mapper.cpp +++ b/mapper.cpp @@ -25,6 +25,7 @@ using namespace std; #define OPT_SQLITE_CACHEWORLDROW 0x81 #define OPT_PROGRESS_INDICATOR 0x82 #define OPT_DRAW_OBJECT 0x83 +#define OPT_BLOCKCOLOR 0x84 #define OPT_VERBOSE_SEARCH_COLORS 0x86 // Will be replaced with the actual name and location of the executable (if found) @@ -61,6 +62,7 @@ void usage() " -o/--output \n" " --colors \n" " --bgcolor \n" + " --blockcolor \n" " --scalecolor \n" " --playercolor \n" " --origincolor \n" @@ -516,6 +518,7 @@ int main(int argc, char *argv[]) {"output", required_argument, 0, 'o'}, {"colors", required_argument, 0, 'C'}, {"bgcolor", required_argument, 0, 'b'}, + {"blockcolor", required_argument, 0, OPT_BLOCKCOLOR}, {"scalecolor", required_argument, 0, 's'}, {"origincolor", required_argument, 0, 'r'}, {"playercolor", required_argument, 0, 'p'}, @@ -596,6 +599,9 @@ int main(int argc, char *argv[]) case 'b': generator.setBgColor(Color(optarg, 0)); break; + case OPT_BLOCKCOLOR: + generator.setBlockDefaultColor(Color(optarg, 0)); + break; case 's': generator.setScaleColor(Color(optarg,0)); break;