Skip to content

Commit

Permalink
Fix liquid bottoms not being rendered
Browse files Browse the repository at this point in the history
  • Loading branch information
numberZero authored and sfan5 committed Jan 30, 2018
1 parent cc40058 commit 49b65a5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
27 changes: 27 additions & 0 deletions src/content_mapblock.cpp
Expand Up @@ -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
Expand Down Expand Up @@ -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();
Expand All @@ -603,6 +628,8 @@ void MapblockMeshGenerator::drawLiquidNode()
drawLiquidSides();
if (!top_is_same_liquid)
drawLiquidTop();
if (draw_liquid_bottom)
drawLiquidBottom();
}

void MapblockMeshGenerator::drawGlasslikeNode()
Expand Down
2 changes: 2 additions & 0 deletions src/content_mapblock.h
Expand Up @@ -92,6 +92,7 @@ class MapblockMeshGenerator

// liquid-specific
bool top_is_same_liquid;
bool draw_liquid_bottom;
TileSpec tile_liquid;
TileSpec tile_liquid_top;
content_t c_flowing;
Expand All @@ -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
Expand Down

0 comments on commit 49b65a5

Please sign in to comment.