Skip to content
Snippets Groups Projects
Commit efd8dabd authored by Perttu Ahola's avatar Perttu Ahola
Browse files

Lava is now better visible inside water. (a crappy hack)

parent e4f443a5
No related branches found
No related tags found
No related merge requests found
......@@ -448,12 +448,6 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
{
air_count++;
}
/*// Air is liquid level 0
else if(content == CONTENT_AIR)
{
cornerlevel += -0.5*BS;
valid_count++;
}*/
}
if(air_count >= 2)
cornerlevel = -0.5*BS;
......@@ -490,17 +484,20 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
neighbor_flags[dir] & neighborflag_top_is_same_liquid)
continue;
u8 neighbor_content = neighbor_contents[dir];
content_t neighbor_content = neighbor_contents[dir];
// Don't draw face if neighbor is not air or liquid
if(neighbor_content != CONTENT_AIR
&& neighbor_content != c_source)
&& content_liquid(neighbor_content) == false)
continue;
bool neighbor_is_liquid = (neighbor_content == c_source);
bool neighbor_is_same_liquid = (neighbor_content == c_source
|| neighbor_content == c_flowing);
// Don't draw any faces if neighbor is liquid and top is liquid
if(neighbor_is_liquid == true && top_is_same_liquid == false)
// Don't draw any faces if neighbor same is liquid and top is
// same liquid
if(neighbor_is_same_liquid == true
&& top_is_same_liquid == false)
continue;
video::S3DVertex vertices[4] =
......@@ -541,7 +538,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
If neighbor is liquid, lower border of face is corner
liquid levels
*/
if(neighbor_is_liquid)
if(neighbor_is_same_liquid)
{
vertices[0].Pos.Y = corner_levels[side_corners[i][1]];
vertices[1].Pos.Y = corner_levels[side_corners[i][0]];
......@@ -566,6 +563,13 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
vertices[j].Pos.rotateXZBy(90);
if(dir == v3s16(1,0,-0))
vertices[j].Pos.rotateXZBy(-90);
// Do this to not cause glitches when two liquids are
// side-by-side
if(neighbor_is_same_liquid == false){
vertices[j].Pos.X *= 0.98;
vertices[j].Pos.Z *= 0.98;
}
vertices[j].Pos += intToFloat(p + blockpos_nodes, BS);
}
......
......@@ -370,6 +370,7 @@ void content_mapnode_init()
f->param_type = CPT_LIGHT;
f->light_propagates = true;
f->solidness = 0; // Drawn separately, makes no faces
f->visual_solidness = 1;
f->walkable = false;
f->pointable = false;
f->diggable = false;
......@@ -449,6 +450,7 @@ void content_mapnode_init()
f->light_propagates = false;
f->light_source = LIGHT_MAX-1;
f->solidness = 0; // Drawn separately, makes no faces
f->visual_solidness = 2;
f->walkable = false;
f->pointable = false;
f->diggable = false;
......
......@@ -121,6 +121,7 @@ struct ContentFeatures
bool light_propagates;
bool sunlight_propagates;
u8 solidness; // Used when choosing which face is drawn
u8 visual_solidness; // When solidness=0, this tells how it looks like
// This is used for collision detection.
// Also for general solidness queries.
bool walkable;
......@@ -181,6 +182,7 @@ struct ContentFeatures
light_propagates = false;
sunlight_propagates = false;
solidness = 2;
visual_solidness = 0;
walkable = true;
pointable = true;
diggable = true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment