1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

Improved lighting

This commit rewrites the procedure that is responsible for light
updating.

this commit
-provides iterative solutions for unlighting and light spreading
-introduces a new priority queue-like container for the iteration
-creates per-node MapBlock caching to reduce retrieving MapBlocks from
the map
-calculates with map block positions and in-block relative node
coordinates
-skips light updating if it is not necessary since the node's new light
will be the same as its old light was
This commit is contained in:
Dániel Juhász 2016-10-20 21:41:38 +02:00 committed by Ner'zhul
parent 1fd9a07497
commit c071efaa43
6 changed files with 648 additions and 448 deletions

View file

@ -25,6 +25,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <set>
#include <map>
class Map;
class MapBlock;
namespace voxalgo
{
@ -52,6 +55,23 @@ SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a,
std::set<v3s16> & light_sources,
INodeDefManager *ndef);
/*!
* Updates the lighting on the map.
* The result will be correct only if
* no nodes were changed except the given one.
*
* \param p position of the changed node
* \param oldnode this node was overwritten on the map
* \param modified_blocks output, contains all map blocks that
* the function modified
*/
void update_lighting_node(
Map *map,
INodeDefManager *ndef,
v3s16 p,
MapNode oldnode,
std::map<v3s16, MapBlock*> &modified_blocks);
} // namespace voxalgo
#endif