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:
parent
1fd9a07497
commit
c071efaa43
6 changed files with 648 additions and 448 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue