diff options
Diffstat (limited to 'src/voxel.cpp')
-rw-r--r-- | src/voxel.cpp | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/src/voxel.cpp b/src/voxel.cpp index cd638183c..b901c1c4f 100644 --- a/src/voxel.cpp +++ b/src/voxel.cpp @@ -315,194 +315,6 @@ void VoxelManipulator::clearFlag(u8 flags) <<volume<<" nodes"<<std::endl;*/ } -void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight, - std::set<v3s16> & light_sources, INodeDefManager *nodemgr) -{ - VoxelArea voxel_area(p - v3s16(1,1,1), p + v3s16(1,1,1)); - addArea(voxel_area); - - // Loop through 6 neighbors - for (const v3s16 &dir : g_6dirs) { - // Get the position of the neighbor node - v3s16 n2pos = p + dir; - - u32 n2i = m_area.index(n2pos); - - if(m_flags[n2i] & VOXELFLAG_NO_DATA) - continue; - - MapNode &n2 = m_data[n2i]; - - /* - If the neighbor is dimmer than what was specified - as oldlight (the light of the previous node) - */ - u8 light2 = n2.getLight(bank, nodemgr); - if(light2 < oldlight) - { - /* - And the neighbor is transparent and it has some light - */ - if(nodemgr->get(n2).light_propagates && light2 != 0) - { - /* - Set light to 0 and add to queue - */ - - n2.setLight(bank, 0, nodemgr); - - unspreadLight(bank, n2pos, light2, light_sources, nodemgr); - - /* - Remove from light_sources if it is there - NOTE: This doesn't happen nearly at all - */ - /*if(light_sources.find(n2pos)) - { - std::cout<<"Removed from light_sources"<<std::endl; - light_sources.remove(n2pos); - }*/ - } - } - else{ - light_sources.insert(n2pos); - } - } -} - -void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p, - INodeDefManager *nodemgr) -{ - VoxelArea voxel_area(p - v3s16(1,1,1), p + v3s16(1,1,1)); - addArea(voxel_area); - - u32 i = m_area.index(p); - - if(m_flags[i] & VOXELFLAG_NO_DATA) - return; - - MapNode &n = m_data[i]; - - u8 oldlight = n.getLight(bank, nodemgr); - u8 newlight = diminish_light(oldlight); - - // Loop through 6 neighbors - for (const auto &dir : g_6dirs) { - // Get the position of the neighbor node - v3s16 n2pos = p + dir; - - u32 n2i = m_area.index(n2pos); - - if(m_flags[n2i] & VOXELFLAG_NO_DATA) - continue; - - MapNode &n2 = m_data[n2i]; - - u8 light2 = n2.getLight(bank, nodemgr); - - /* - If the neighbor is brighter than the current node, - add to list (it will light up this node on its turn) - */ - if(light2 > undiminish_light(oldlight)) - { - spreadLight(bank, n2pos, nodemgr); - } - /* - If the neighbor is dimmer than how much light this node - would spread on it, add to list - */ - if(light2 < newlight) - { - if(nodemgr->get(n2).light_propagates) - { - n2.setLight(bank, newlight, nodemgr); - spreadLight(bank, n2pos, nodemgr); - } - } - } -} - - const MapNode VoxelManipulator::ContentIgnoreNode = MapNode(CONTENT_IGNORE); -/* - Lights neighbors of from_nodes, collects all them and then - goes on recursively. -*/ -void VoxelManipulator::spreadLight(enum LightBank bank, - std::set<v3s16> & from_nodes, INodeDefManager *nodemgr) -{ - if(from_nodes.empty()) - return; - - std::set<v3s16> lighted_nodes; - - for (const v3s16 &pos : from_nodes) { - VoxelArea voxel_area(pos - v3s16(1,1,1), pos + v3s16(1,1,1)); - addArea(voxel_area); - - u32 i = m_area.index(pos); - - if(m_flags[i] & VOXELFLAG_NO_DATA) - continue; - - MapNode &n = m_data[i]; - - u8 oldlight = n.getLight(bank, nodemgr); - u8 newlight = diminish_light(oldlight); - - // Loop through 6 neighbors - for (const v3s16 &dir : g_6dirs) { - // Get the position of the neighbor node - v3s16 n2pos = pos + dir; - - try - { - u32 n2i = m_area.index(n2pos); - - if(m_flags[n2i] & VOXELFLAG_NO_DATA) - continue; - - MapNode &n2 = m_data[n2i]; - - u8 light2 = n2.getLight(bank, nodemgr); - - /* - If the neighbor is brighter than the current node, - add to list (it will light up this node on its turn) - */ - if(light2 > undiminish_light(oldlight)) - { - lighted_nodes.insert(n2pos); - } - /* - If the neighbor is dimmer than how much light this node - would spread on it, add to list - */ - if(light2 < newlight) - { - if(nodemgr->get(n2).light_propagates) - { - n2.setLight(bank, newlight, nodemgr); - lighted_nodes.insert(n2pos); - } - } - } - catch(InvalidPositionException &e) - { - continue; - } - } - } - - /*dstream<<"spreadLight(): Changed block " - <<blockchangecount<<" times" - <<" for "<<from_nodes.size()<<" nodes" - <<std::endl;*/ - - if(!lighted_nodes.empty()) - spreadLight(bank, lighted_nodes, nodemgr); -} - //END |