mirror of
https://github.com/minetest/minetest.git
synced 2024-11-23 16:13:46 +01:00
Fix liquid bottoms not being rendered
This commit is contained in:
parent
cc400581e2
commit
49b65a5593
@ -385,9 +385,16 @@ void MapblockMeshGenerator::prepareLiquidNodeDrawing()
|
||||
getSpecialTile(1, &tile_liquid);
|
||||
|
||||
MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(p.X, p.Y + 1, p.Z));
|
||||
MapNode nbottom = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(p.X, p.Y - 1, p.Z));
|
||||
c_flowing = nodedef->getId(f->liquid_alternative_flowing);
|
||||
c_source = nodedef->getId(f->liquid_alternative_source);
|
||||
top_is_same_liquid = (ntop.getContent() == c_flowing) || (ntop.getContent() == c_source);
|
||||
draw_liquid_bottom = (nbottom.getContent() != c_flowing) && (nbottom.getContent() != c_source);
|
||||
if (draw_liquid_bottom) {
|
||||
const ContentFeatures &f2 = nodedef->get(nbottom.getContent());
|
||||
if (f2.solidness > 1)
|
||||
draw_liquid_bottom = false;
|
||||
}
|
||||
|
||||
if (data->m_smooth_lighting)
|
||||
return; // don't need to pre-compute anything in this case
|
||||
@ -595,6 +602,24 @@ void MapblockMeshGenerator::drawLiquidTop()
|
||||
collector->append(tile_liquid_top, vertices, 4, quad_indices, 6);
|
||||
}
|
||||
|
||||
void MapblockMeshGenerator::drawLiquidBottom()
|
||||
{
|
||||
video::S3DVertex vertices[4] = {
|
||||
video::S3DVertex(-BS / 2, -BS / 2, -BS / 2, 0, 0, 0, color_liquid_top, 0, 0),
|
||||
video::S3DVertex( BS / 2, -BS / 2, -BS / 2, 0, 0, 0, color_liquid_top, 1, 0),
|
||||
video::S3DVertex( BS / 2, -BS / 2, BS / 2, 0, 0, 0, color_liquid_top, 1, 1),
|
||||
video::S3DVertex(-BS / 2, -BS / 2, BS / 2, 0, 0, 0, color_liquid_top, 0, 1),
|
||||
};
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (data->m_smooth_lighting)
|
||||
vertices[i].Color = blendLightColor(vertices[i].Pos);
|
||||
vertices[i].Pos += origin;
|
||||
}
|
||||
|
||||
collector->append(tile_liquid_top, vertices, 4, quad_indices, 6);
|
||||
}
|
||||
|
||||
void MapblockMeshGenerator::drawLiquidNode()
|
||||
{
|
||||
prepareLiquidNodeDrawing();
|
||||
@ -603,6 +628,8 @@ void MapblockMeshGenerator::drawLiquidNode()
|
||||
drawLiquidSides();
|
||||
if (!top_is_same_liquid)
|
||||
drawLiquidTop();
|
||||
if (draw_liquid_bottom)
|
||||
drawLiquidBottom();
|
||||
}
|
||||
|
||||
void MapblockMeshGenerator::drawGlasslikeNode()
|
||||
|
@ -92,6 +92,7 @@ public:
|
||||
|
||||
// liquid-specific
|
||||
bool top_is_same_liquid;
|
||||
bool draw_liquid_bottom;
|
||||
TileSpec tile_liquid;
|
||||
TileSpec tile_liquid_top;
|
||||
content_t c_flowing;
|
||||
@ -112,6 +113,7 @@ public:
|
||||
f32 getCornerLevel(int i, int k);
|
||||
void drawLiquidSides();
|
||||
void drawLiquidTop();
|
||||
void drawLiquidBottom();
|
||||
|
||||
// raillike-specific
|
||||
// name of the group that enables connecting to raillike nodes of different kind
|
||||
|
Loading…
Reference in New Issue
Block a user