mirror of
https://github.com/minetest/minetestmapper.git
synced 2024-11-25 17:03:47 +01:00
Minor refactoring (2)
Also tunes --drawalpha to hide shadows in deep water better.
This commit is contained in:
parent
c15adfd325
commit
7c71138fec
@ -30,6 +30,18 @@ static inline uint16_t readU16(const unsigned char *data)
|
|||||||
return data[0] << 8 | data[1];
|
return data[0] << 8 | data[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
static inline T mymax(T a, T b)
|
||||||
|
{
|
||||||
|
return (a > b) ? a : b;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
static inline T mymin(T a, T b)
|
||||||
|
{
|
||||||
|
return (a > b) ? b : a;
|
||||||
|
}
|
||||||
|
|
||||||
// rounds n (away from 0) to a multiple of f while preserving the sign of n
|
// rounds n (away from 0) to a multiple of f while preserving the sign of n
|
||||||
static int round_multiple_nosign(int n, int f)
|
static int round_multiple_nosign(int n, int f)
|
||||||
{
|
{
|
||||||
@ -58,11 +70,9 @@ static int readBlockContent(const unsigned char *mapData, int version, int datap
|
|||||||
throw std::runtime_error(oss.str());
|
throw std::runtime_error(oss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int colorSafeBounds(int color)
|
static inline unsigned int colorSafeBounds (int channel)
|
||||||
{
|
{
|
||||||
color = (color > 255) ? 255 : color;
|
return mymin(mymax(channel, 0), 255);
|
||||||
color = (color < 0) ? 0 : color;
|
|
||||||
return color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Color mixColors(Color a, Color b)
|
static Color mixColors(Color a, Color b)
|
||||||
@ -337,19 +347,21 @@ void TileGenerator::loadBlocks()
|
|||||||
|
|
||||||
void TileGenerator::createImage()
|
void TileGenerator::createImage()
|
||||||
{
|
{
|
||||||
|
const int scale_d = 40; // pixels reserved for a scale
|
||||||
|
if(!m_drawScale)
|
||||||
|
m_scales = 0;
|
||||||
|
|
||||||
m_mapWidth = (m_xMax - m_xMin + 1) * 16;
|
m_mapWidth = (m_xMax - m_xMin + 1) * 16;
|
||||||
m_mapHeight = (m_zMax - m_zMin + 1) * 16;
|
m_mapHeight = (m_zMax - m_zMin + 1) * 16;
|
||||||
if(m_drawScale) {
|
m_xBorder = (m_scales & SCALE_LEFT) ? scale_d : 0;
|
||||||
m_xBorder = (m_scales & SCALE_LEFT) ? 40 : 0;
|
m_yBorder = (m_scales & SCALE_TOP) ? scale_d : 0;
|
||||||
m_yBorder = (m_scales & SCALE_TOP) ? 40 : 0;
|
|
||||||
}
|
|
||||||
m_blockPixelAttributes.setWidth(m_mapWidth);
|
m_blockPixelAttributes.setWidth(m_mapWidth);
|
||||||
|
|
||||||
int image_width, image_height;
|
int image_width, image_height;
|
||||||
image_width = (m_mapWidth * m_zoom) + m_xBorder;
|
image_width = (m_mapWidth * m_zoom) + m_xBorder;
|
||||||
image_width += m_drawScale && (m_scales & SCALE_RIGHT) ? 40 : 0;
|
image_width += (m_scales & SCALE_RIGHT) ? scale_d : 0;
|
||||||
image_height = (m_mapHeight * m_zoom) + m_yBorder;
|
image_height = (m_mapHeight * m_zoom) + m_yBorder;
|
||||||
image_height += m_drawScale && (m_scales & SCALE_BOTTOM) ? 40 : 0;
|
image_height += (m_scales & SCALE_BOTTOM) ? scale_d : 0;
|
||||||
|
|
||||||
if(image_width > 4096 || image_height > 4096)
|
if(image_width > 4096 || image_height > 4096)
|
||||||
std::cerr << "Warning: The width or height of the image to be created exceeds 4096 pixels!"
|
std::cerr << "Warning: The width or height of the image to be created exceeds 4096 pixels!"
|
||||||
@ -593,11 +605,11 @@ void TileGenerator::renderShading(int zPos)
|
|||||||
int y1 = m_blockPixelAttributes.attribute(z, x - 1).height;
|
int y1 = m_blockPixelAttributes.attribute(z, x - 1).height;
|
||||||
int y2 = m_blockPixelAttributes.attribute(z - 1, x).height;
|
int y2 = m_blockPixelAttributes.attribute(z - 1, x).height;
|
||||||
int d = ((y - y1) + (y - y2)) * 12;
|
int d = ((y - y1) + (y - y2)) * 12;
|
||||||
if (d > 36)
|
if (m_drawAlpha) { // less visible shadow with increasing "thickness"
|
||||||
d = 36;
|
double t = m_blockPixelAttributes.attribute(z, x).thickness * 1.2;
|
||||||
// more thickness -> less visible shadows: t=0 -> 100% visible, t=255 -> 0% visible
|
d *= 1.0 - mymin(t, 255.0) / 255.0;
|
||||||
if (m_drawAlpha)
|
}
|
||||||
d = d * ((0xFF - m_blockPixelAttributes.attribute(z, x).thickness) / 255.0);
|
d = mymin(d, 36);
|
||||||
|
|
||||||
Color c = m_image->getPixel(getImageX(x), getImageY(imageY));
|
Color c = m_image->getPixel(getImageX(x), getImageY(imageY));
|
||||||
c.r = colorSafeBounds(c.r + d);
|
c.r = colorSafeBounds(c.r + d);
|
||||||
|
Loading…
Reference in New Issue
Block a user