aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mapblock.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index 2d077121c..68b296154 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -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);
+ }
}
}