Permalink
Browse files

Fix liquid bottom

  • Loading branch information...
numberZero authored and sfan5 committed Jan 29, 2018
1 parent cc40058 commit aa4aecd008fd3838f1a7fb8422720a41094c6eda
Showing with 29 additions and 0 deletions.
  1. +27 −0 src/content_mapblock.cpp
  2. +2 −0 src/content_mapblock.h
@@ -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_bottom = (nbottom.getContent() != c_flowing) && (nbottom.getContent() != c_source);
if (draw_bottom && (nbottom.getContent() != CONTENT_AIR)) {
const ContentFeatures &f2 = nodedef->get(nbottom.getContent());
if ((f2.solidness > 1) || (f2.visual_solidness > 1))
draw_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_bottom)
drawLiquidBottom();
}

void MapblockMeshGenerator::drawGlasslikeNode()
@@ -92,6 +92,7 @@ class MapblockMeshGenerator

// liquid-specific
bool top_is_same_liquid;
bool draw_bottom;
TileSpec tile_liquid;
TileSpec tile_liquid_top;
content_t c_flowing;
@@ -112,6 +113,7 @@ class MapblockMeshGenerator
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

0 comments on commit aa4aecd

Please sign in to comment.