just backuppin' a working mapblock.cpp
authorPerttu Ahola <celeron55@gmail.com>
Sat, 15 Jan 2011 11:07:10 +0000 (13:07 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Sat, 15 Jan 2011 11:07:10 +0000 (13:07 +0200)
src/mapblock.cpp

index 2d077121c827c13f18bdec9bf288bf85324ded1c..68b29615453a93e51c04f2c74bed8d20fae524f6 100644 (file)
@@ -864,8 +864,14 @@ void MapBlock::updateMesh(u32 daynight_ratio)
        - SUGG: This could be optimized
 
        Turns sunglighted mud into grass.
+
+       if remove_light==true, sets non-sunlighted nodes black.
+
+       if black_air_left!=NULL, it is set to true if non-sunlighted
+       air is left in block.
 */
-bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources)
+bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources,
+               bool remove_light, bool *black_air_left)
 {
        // Whether the sunlight at the top of the bottom block is valid
        bool block_below_is_valid = true;
@@ -959,19 +965,27 @@ bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources)
                        }
 
                        bool sunlight_should_go_down = (y==-1);
-
-                       // Fill rest with black (only transparent ones)
-                       for(; y >= 0; y--){
+                       
+                       /*
+                               Check rest through to the bottom of the block
+                       */
+                       for(; y >= 0; y--)
+                       {
                                v3s16 pos(x, y, z);
-                               
                                MapNode &n = getNodeRef(pos);
 
                                if(n.light_propagates())
                                {
-                                       n.setLight(LIGHTBANK_DAY, 0);
-                               }
-                               else{
-                                       break;
+                                       if(black_air_left)
+                                       {
+                                               *black_air_left = true;
+                                       }
+
+                                       if(remove_light)
+                                       {
+                                               // Fill transparent nodes with black
+                                               n.setLight(LIGHTBANK_DAY, 0);
+                                       }
                                }
                        }