Cavegen: Respect is_ground_content MapNode setting; fix some code formatting issues
authorkwolekr <kwolekr@minetest.net>
Sat, 30 Nov 2013 01:54:04 +0000 (20:54 -0500)
committerkwolekr <kwolekr@minetest.net>
Sat, 30 Nov 2013 01:54:04 +0000 (20:54 -0500)
src/cavegen.cpp
src/mapnode.cpp
src/nodedef.cpp

index 51af5098421ef15c5d7d1f0d887471100709d256..71f005d5bab9617ec94a773fcdf2abff7f154b4e 100644 (file)
@@ -236,6 +236,9 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) {
                                        continue;
 
                                u32 i = vm->m_area.index(p);
+                               content_t c = vm->m_data[i].getContent();
+                               if (!ndef->get(c).is_ground_content)
+                                       continue;
 
                                if (large_cave) {
                                        int full_ymin = node_min.Y - MAP_BLOCKSIZE;
@@ -250,7 +253,6 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) {
                                        }
                                } else {
                                        // Don't replace air or water or lava or ignore
-                                       content_t c = vm->m_data[i].getContent();
                                        if (c == CONTENT_IGNORE || c == CONTENT_AIR ||
                                                c == c_water_source || c == c_lava_source)
                                                continue;
@@ -530,8 +532,8 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) {
                                
                                // Don't replace air, water, lava, or ice
                                content_t c = vm->m_data[i].getContent();
-                               if (c == CONTENT_AIR   || c == c_water_source ||
-                                       c == c_lava_source || c == c_ice)
+                               if (!ndef->get(c).is_ground_content || c == CONTENT_AIR ||
+                                       c == c_water_source || c == c_lava_source || c == c_ice)
                                        continue;
                                        
                                if (large_cave) {
index a47a48bc0c23871cae1cb5a655cedad24b437d79..d52677be07540def4fc0a15b8b3e0022c6887b4f 100644 (file)
@@ -383,8 +383,10 @@ u8 MapNode::getLevel(INodeDefManager *nodemgr) const
                return getParam2() & LIQUID_LEVEL_MASK;
        if(f.leveled || f.param_type_2 == CPT2_LEVELED) {
                 u8 level = getParam2() & LEVELED_MASK;
-                if(level) return level;
-                if(f.leveled > LEVELED_MAX) return LEVELED_MAX;
+                if(level)
+                       return level;
+                if(f.leveled > LEVELED_MAX)
+                       return LEVELED_MAX;
                 return f.leveled; //default
        }
        return 0;
@@ -398,7 +400,7 @@ u8 MapNode::setLevel(INodeDefManager *nodemgr, s8 level)
                return 0;
        }
        const ContentFeatures &f = nodemgr->get(*this);
-       if (       f.param_type_2 == CPT2_FLOWINGLIQUID
+       if (f.param_type_2 == CPT2_FLOWINGLIQUID
                || f.liquid_type == LIQUID_FLOWING
                || f.liquid_type == LIQUID_SOURCE) {
                if (level >= LIQUID_LEVEL_SOURCE) {
@@ -487,8 +489,7 @@ void MapNode::deSerialize(u8 *source, u8 version)
                param0 = readU16(source+0);
                param1 = readU8(source+2);
                param2 = readU8(source+3);
-       }
-       else{
+       }else{
                param0 = readU8(source+0);
                param1 = readU8(source+1);
                param2 = readU8(source+2);
index 41956ca2eee094922e514bee6376f4c93c411dd7..d13d0653daeed31f7aa23053f971078b167b89a9 100644 (file)
@@ -396,15 +396,16 @@ public:
                // Set CONTENT_AIR
                {
                        ContentFeatures f;
-                       f.name = "air";
-                       f.drawtype = NDT_AIRLIKE;
-                       f.param_type = CPT_LIGHT;
-                       f.light_propagates = true;
+                       f.name                = "air";
+                       f.drawtype            = NDT_AIRLIKE;
+                       f.param_type          = CPT_LIGHT;
+                       f.light_propagates    = true;
                        f.sunlight_propagates = true;
-                       f.walkable = false;
-                       f.pointable = false;
-                       f.diggable = false;
-                       f.buildable_to = true;
+                       f.walkable            = false;
+                       f.pointable           = false;
+                       f.diggable            = false;
+                       f.buildable_to        = true;
+                       f.is_ground_content   = true;
                        // Insert directly into containers
                        content_t c = CONTENT_AIR;
                        m_content_features[c] = f;
@@ -414,16 +415,16 @@ public:
                // Set CONTENT_IGNORE
                {
                        ContentFeatures f;
-                       f.name = "ignore";
-                       f.drawtype = NDT_AIRLIKE;
-                       f.param_type = CPT_NONE;
-                       f.light_propagates = false;
+                       f.name                = "ignore";
+                       f.drawtype            = NDT_AIRLIKE;
+                       f.param_type          = CPT_NONE;
+                       f.light_propagates    = false;
                        f.sunlight_propagates = false;
-                       f.walkable = false;
-                       f.pointable = false;
-                       f.diggable = false;
-                       // A way to remove accidental CONTENT_IGNOREs
-                       f.buildable_to = true;
+                       f.walkable            = false;
+                       f.pointable           = false;
+                       f.diggable            = false;
+                       f.buildable_to        = true; // A way to remove accidental CONTENT_IGNOREs
+                       f.is_ground_content   = true;
                        // Insert directly into containers
                        content_t c = CONTENT_IGNORE;
                        m_content_features[c] = f;