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

This commit is contained in:
Perttu Ahola 2011-08-23 03:01:01 +03:00
parent e4f443a57a
commit efd8dabd91
3 changed files with 20 additions and 12 deletions

View File

@ -448,12 +448,6 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
{ {
air_count++; air_count++;
} }
/*// Air is liquid level 0
else if(content == CONTENT_AIR)
{
cornerlevel += -0.5*BS;
valid_count++;
}*/
} }
if(air_count >= 2) if(air_count >= 2)
cornerlevel = -0.5*BS; cornerlevel = -0.5*BS;
@ -490,17 +484,20 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
neighbor_flags[dir] & neighborflag_top_is_same_liquid) neighbor_flags[dir] & neighborflag_top_is_same_liquid)
continue; 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 // Don't draw face if neighbor is not air or liquid
if(neighbor_content != CONTENT_AIR if(neighbor_content != CONTENT_AIR
&& neighbor_content != c_source) && content_liquid(neighbor_content) == false)
continue; 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 // Don't draw any faces if neighbor same is liquid and top is
if(neighbor_is_liquid == true && top_is_same_liquid == false) // same liquid
if(neighbor_is_same_liquid == true
&& top_is_same_liquid == false)
continue; continue;
video::S3DVertex vertices[4] = 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 If neighbor is liquid, lower border of face is corner
liquid levels liquid levels
*/ */
if(neighbor_is_liquid) if(neighbor_is_same_liquid)
{ {
vertices[0].Pos.Y = corner_levels[side_corners[i][1]]; vertices[0].Pos.Y = corner_levels[side_corners[i][1]];
vertices[1].Pos.Y = corner_levels[side_corners[i][0]]; vertices[1].Pos.Y = corner_levels[side_corners[i][0]];
@ -567,6 +564,13 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
if(dir == v3s16(1,0,-0)) if(dir == v3s16(1,0,-0))
vertices[j].Pos.rotateXZBy(-90); 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); vertices[j].Pos += intToFloat(p + blockpos_nodes, BS);
} }

View File

@ -370,6 +370,7 @@ void content_mapnode_init()
f->param_type = CPT_LIGHT; f->param_type = CPT_LIGHT;
f->light_propagates = true; f->light_propagates = true;
f->solidness = 0; // Drawn separately, makes no faces f->solidness = 0; // Drawn separately, makes no faces
f->visual_solidness = 1;
f->walkable = false; f->walkable = false;
f->pointable = false; f->pointable = false;
f->diggable = false; f->diggable = false;
@ -449,6 +450,7 @@ void content_mapnode_init()
f->light_propagates = false; f->light_propagates = false;
f->light_source = LIGHT_MAX-1; f->light_source = LIGHT_MAX-1;
f->solidness = 0; // Drawn separately, makes no faces f->solidness = 0; // Drawn separately, makes no faces
f->visual_solidness = 2;
f->walkable = false; f->walkable = false;
f->pointable = false; f->pointable = false;
f->diggable = false; f->diggable = false;

View File

@ -121,6 +121,7 @@ struct ContentFeatures
bool light_propagates; bool light_propagates;
bool sunlight_propagates; bool sunlight_propagates;
u8 solidness; // Used when choosing which face is drawn 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. // This is used for collision detection.
// Also for general solidness queries. // Also for general solidness queries.
bool walkable; bool walkable;
@ -181,6 +182,7 @@ struct ContentFeatures
light_propagates = false; light_propagates = false;
sunlight_propagates = false; sunlight_propagates = false;
solidness = 2; solidness = 2;
visual_solidness = 0;
walkable = true; walkable = true;
pointable = true; pointable = true;
diggable = true; diggable = true;