X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fvoxel.cpp;h=1f1d253731c558fdc8d8d586f3c4f7d12184756e;hb=c162340973463580cc5013d8b53ea87975637bf2;hp=cd638183c0b11dac7e7fe86905fc647b4968c8bf;hpb=1c1c97cbd1d7913ac12bf550ec02c97f843a0fd3;p=oweals%2Fminetest.git diff --git a/src/voxel.cpp b/src/voxel.cpp index cd638183c..1f1d25373 100644 --- a/src/voxel.cpp +++ b/src/voxel.cpp @@ -48,8 +48,8 @@ void VoxelManipulator::clear() m_flags = nullptr; } -void VoxelManipulator::print(std::ostream &o, INodeDefManager *ndef, - VoxelPrintMode mode) +void VoxelManipulator::print(std::ostream &o, const NodeDefManager *ndef, + VoxelPrintMode mode) { const v3s16 &em = m_area.getExtent(); v3s16 of = m_area.MinEdge; @@ -315,194 +315,6 @@ void VoxelManipulator::clearFlag(u8 flags) < & 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"< 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 & from_nodes, INodeDefManager *nodemgr) -{ - if(from_nodes.empty()) - return; - - std::set 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 " - <