Generic NodeMetadata text input
[oweals/minetest.git] / src / content_mapblock.cpp
index 60e07781e3d1669b52a2b7389d4ea5e3f8b7becc..4e9c65d41a13f6e2e7359ed3b6e48c366523c0e6 100644 (file)
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "mineral.h"
 #include "mapblock_mesh.h" // For MapBlock_LightColor()
 #include "settings.h"
+#include "mapnode_contentfeatures.h"
 
 #ifndef SERVER
 // Create a cuboid.
@@ -364,6 +365,9 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
                        assert(content_features(n).special_material);
                        video::SMaterial &liquid_material =
                                        *content_features(n).special_material;
+                       video::SMaterial &liquid_material_bfculled =
+                                       *content_features(n).special_material2;
+
                        assert(content_features(n).special_atlas);
                        AtlasPointer &pa_liquid1 =
                                        *content_features(n).special_atlas;
@@ -516,10 +520,10 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
                                        continue;
 
                                content_t neighbor_content = neighbor_contents[dir];
+                               ContentFeatures &n_feat = content_features(neighbor_content);
                                
-                               // Don't draw face if neighbor is not air or liquid
-                               if(neighbor_content != CONTENT_AIR
-                                               && content_liquid(neighbor_content) == false)
+                               // Don't draw face if neighbor is blocking the view
+                               if(n_feat.solidness == 2)
                                        continue;
                                
                                bool neighbor_is_same_liquid = (neighbor_content == c_source
@@ -530,6 +534,12 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
                                if(neighbor_is_same_liquid == true
                                                && top_is_same_liquid == false)
                                        continue;
+
+                               // Use backface culled material if neighbor doesn't have a
+                               // solidness of 0
+                               video::SMaterial *current_material = &liquid_material;
+                               if(n_feat.solidness != 0 || n_feat.visual_solidness != 0)
+                                       current_material = &liquid_material_bfculled;
                                
                                video::S3DVertex vertices[4] =
                                {
@@ -603,7 +613,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
 
                                u16 indices[] = {0,1,2,2,3,0};
                                // Add to mesh collector
-                               collector.append(liquid_material, vertices, 4, indices, 6);
+                               collector.append(*current_material, vertices, 4, indices, 6);
                        }
                        
                        /*