mirror of
https://github.com/minetest/minetest.git
synced 2024-11-30 11:33:44 +01:00
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)
|
!ndef->get(n).light_propagates)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Since this recursive function only terminates when there is no light from
|
// MYMAX still needed here because we only exit early if both banks have
|
||||||
// either bank left, we need to take the max of both banks into account for
|
// nothing to propagate anymore.
|
||||||
// the case where spreading has stopped for one light bank but not the other.
|
|
||||||
light = MYMAX(light_day, n.param1 & 0x0F) |
|
light = MYMAX(light_day, n.param1 & 0x0F) |
|
||||||
MYMAX(light_night, n.param1 & 0xF0);
|
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)
|
bool propagate_shadow)
|
||||||
{
|
{
|
||||||
ScopeProfiler sp(g_profiler, "EmergeThread: update lighting", SPT_AVG);
|
ScopeProfiler sp(g_profiler, "EmergeThread: update lighting", SPT_AVG);
|
||||||
//TimeTaker t("updateLighting");
|
|
||||||
|
|
||||||
propagateSunlight(nmin, nmax, propagate_shadow);
|
propagateSunlight(nmin, nmax, propagate_shadow);
|
||||||
spreadLight(full_nmin, full_nmax);
|
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);
|
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 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,
|
void calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nmax,
|
||||||
bool propagate_shadow = true);
|
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);
|
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);
|
void spreadLight(const v3s16 &nmin, const v3s16 &nmax);
|
||||||
|
|
||||||
virtual void makeChunk(BlockMakeData *data) {}
|
virtual void makeChunk(BlockMakeData *data) {}
|
||||||
@ -218,6 +244,18 @@ public:
|
|||||||
static void setDefaultSettings(Settings *settings);
|
static void setDefaultSettings(Settings *settings);
|
||||||
|
|
||||||
private:
|
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()
|
// isLiquidHorizontallyFlowable() is a helper function for updateLiquid()
|
||||||
// that checks whether there are floodable nodes without liquid beneath
|
// that checks whether there are floodable nodes without liquid beneath
|
||||||
// the node at index vi.
|
// the node at index vi.
|
||||||
|
Loading…
Reference in New Issue
Block a user