forked from Mirrorlandia_minetest/minetest
Annotate light spread functions with comments
This commit is contained in:
parent
e92a217bd1
commit
0b41533763
@ -453,9 +453,8 @@ void Mapgen::lightSpread(VoxelArea &a, std::queue<std::pair<v3s16, u8>> &queue,
|
||||
!ndef->get(n).light_propagates)
|
||||
return;
|
||||
|
||||
// Since this recursive function only terminates when there is no light from
|
||||
// either bank left, we need to take the max of both banks into account for
|
||||
// the case where spreading has stopped for one light bank but not the other.
|
||||
// MYMAX still needed here because we only exit early if both banks have
|
||||
// nothing to propagate anymore.
|
||||
light = MYMAX(light_day, n.param1 & 0x0F) |
|
||||
MYMAX(light_night, n.param1 & 0xF0);
|
||||
|
||||
@ -470,12 +469,9 @@ void Mapgen::calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nm
|
||||
bool propagate_shadow)
|
||||
{
|
||||
ScopeProfiler sp(g_profiler, "EmergeThread: update lighting", SPT_AVG);
|
||||
//TimeTaker t("updateLighting");
|
||||
|
||||
propagateSunlight(nmin, nmax, propagate_shadow);
|
||||
spreadLight(full_nmin, full_nmax);
|
||||
|
||||
//printf("updateLighting: %dms\n", t.stop());
|
||||
}
|
||||
|
||||
|
||||
|
@ -190,12 +190,38 @@ public:
|
||||
|
||||
void updateLiquid(UniqueQueue<v3s16> *trans_liquid, v3s16 nmin, v3s16 nmax);
|
||||
|
||||
/**
|
||||
* Set light in entire area to fixed value.
|
||||
* @param light Light value (contains both banks)
|
||||
* @param nmin Area to operate on
|
||||
* @param nmax ^
|
||||
*/
|
||||
void setLighting(u8 light, v3s16 nmin, v3s16 nmax);
|
||||
void lightSpread(VoxelArea &a, std::queue<std::pair<v3s16, u8>> &queue,
|
||||
const v3s16 &p, u8 light);
|
||||
/**
|
||||
* Run all lighting calculations.
|
||||
* @param nmin Area to spread sunlight in
|
||||
* @param nmax ^
|
||||
* @param full_nmin Area to recalculate light in
|
||||
* @param full_nmax ^
|
||||
* @param propagate_shadow see propagateSunlight()
|
||||
*/
|
||||
void calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nmax,
|
||||
bool propagate_shadow = true);
|
||||
/**
|
||||
* Spread sunlight from the area above downwards.
|
||||
* Note that affected nodes have their night bank cleared so you want to
|
||||
* run a light spread afterwards.
|
||||
* @param nmin Area to operate on
|
||||
* @param nmax ^
|
||||
* @param propagate_shadow Ignore obstructions above and spread sun anyway
|
||||
*/
|
||||
void propagateSunlight(v3s16 nmin, v3s16 nmax, bool propagate_shadow);
|
||||
/**
|
||||
* Spread light in the given area.
|
||||
* Artificial light is taken from nodedef, sunlight must already be set.
|
||||
* @param nmin Area to operate on
|
||||
* @param nmax ^
|
||||
*/
|
||||
void spreadLight(const v3s16 &nmin, const v3s16 &nmax);
|
||||
|
||||
virtual void makeChunk(BlockMakeData *data) {}
|
||||
@ -218,6 +244,18 @@ public:
|
||||
static void setDefaultSettings(Settings *settings);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Spread light to the node at the given position, add to queue if changed.
|
||||
* The given light value is diminished once.
|
||||
* @param a VoxelArea being operated on
|
||||
* @param queue Queue for later lightSpread() calls
|
||||
* @param p Node position
|
||||
* @param light Light value (contains both banks)
|
||||
*
|
||||
*/
|
||||
void lightSpread(VoxelArea &a, std::queue<std::pair<v3s16, u8>> &queue,
|
||||
const v3s16 &p, u8 light);
|
||||
|
||||
// isLiquidHorizontallyFlowable() is a helper function for updateLiquid()
|
||||
// that checks whether there are floodable nodes without liquid beneath
|
||||
// the node at index vi.
|
||||
|
Loading…
Reference in New Issue
Block a user