X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fvoxelalgorithms.cpp;h=f067a221ac1504484bc5ff4cd9e6beb6618a022d;hb=5dbaa689677e89ee10e2c6e3a4e8eb57b79f3140;hp=ab6cbdfa2cf2aef1a45bf3649804dfd29ee404cc;hpb=0f3c2f65414f332fad510fb8651dd59d506aad2e;p=minetest.git diff --git a/src/voxelalgorithms.cpp b/src/voxelalgorithms.cpp index ab6cbdfa2..f067a221a 100644 --- a/src/voxelalgorithms.cpp +++ b/src/voxelalgorithms.cpp @@ -1,18 +1,18 @@ /* -Minetest-c55 -Copyright (C) 2010-2012 celeron55, Perttu Ahola +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ @@ -39,14 +39,14 @@ void setLight(VoxelManipulator &v, VoxelArea a, u8 light, void clearLightAndCollectSources(VoxelManipulator &v, VoxelArea a, enum LightBank bank, INodeDefManager *ndef, - core::map & light_sources, - core::map & unlight_from) + std::set & light_sources, + std::map & unlight_from) { // The full area we shall touch VoxelArea required_a = a; required_a.pad(v3s16(0,0,0)); // Make sure we have access to it - v.emerge(a); + v.addArea(a); for(s32 x=a.MinEdge.X; x<=a.MaxEdge.X; x++) for(s32 z=a.MinEdge.Z; z<=a.MaxEdge.Z; z++) @@ -60,7 +60,7 @@ void clearLightAndCollectSources(VoxelManipulator &v, VoxelArea a, // If node sources light, add to list u8 source = ndef->get(n).light_source; if(source != 0) - light_sources[p] = true; + light_sources.insert(p); // Collect borders for unlighting if((x==a.MinEdge.X || x == a.MaxEdge.X @@ -68,14 +68,14 @@ void clearLightAndCollectSources(VoxelManipulator &v, VoxelArea a, || z==a.MinEdge.Z || z == a.MaxEdge.Z) && oldlight != 0) { - unlight_from.insert(p, oldlight); + unlight_from[p] = oldlight; } } } SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a, bool inexistent_top_provides_sunlight, - core::map & light_sources, + std::set & light_sources, INodeDefManager *ndef) { // Return values @@ -85,11 +85,11 @@ SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a, VoxelArea required_a = a; required_a.pad(v3s16(0,1,0)); // Make sure we have access to it - v.emerge(a); - + v.addArea(a); + s16 max_y = a.MaxEdge.Y; s16 min_y = a.MinEdge.Y; - + for(s32 x=a.MinEdge.X; x<=a.MaxEdge.X; x++) for(s32 z=a.MinEdge.Z; z<=a.MaxEdge.Z; z++) { @@ -125,11 +125,11 @@ SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a, if(incoming_light > old_light) n.setLight(LIGHTBANK_DAY, incoming_light, ndef); - + if(diminish_light(incoming_light) != 0) - light_sources.insert(p, true); + light_sources.insert(p); } - + // Check validity of sunlight at top of block below if it // hasn't already been proven invalid if(bottom_sunlight_valid)