diff options
author | kwolekr <kwolekr@minetest.net> | 2015-01-04 02:34:33 -0500 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2015-01-04 02:42:31 -0500 |
commit | 7233a1228eb161cbcbb46c6e801cabd89ef3d2ab (patch) | |
tree | af3b728cb6052e3bd409ac39cd6b2db7c633076d /src/script/lua_api | |
parent | 060ae29eafbca089824cfbcedc9bc36b7fda5d5e (diff) | |
download | minetest-7233a1228eb161cbcbb46c6e801cabd89ef3d2ab.tar.gz minetest-7233a1228eb161cbcbb46c6e801cabd89ef3d2ab.tar.bz2 minetest-7233a1228eb161cbcbb46c6e801cabd89ef3d2ab.zip |
Lighting: Fix nearly all issues
The cause of a single light source seemingly being lit without spread
was due to its creation in the +Y mapblock boundary layer during map
generation, which was ignored as the overtop. This overtop explicitly
needs to be omitted during sunlight propagation, however. To accomplish
this, Mapgen::calcLighting() was split into separate functions taking
separate parameters.
Additionally, do not diminish light too early during spread. This fixes the
output inconsistency between Map::updateLighting and Mapgen::calcLighting.
Diffstat (limited to 'src/script/lua_api')
-rw-r--r-- | src/script/lua_api/l_vmanip.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index 6c12baf92..bf702eaff 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -168,10 +168,8 @@ int LuaVoxelManip::l_calc_lighting(lua_State *L) EmergeManager *emerge = getServer(L)->getEmergeManager(); ManualMapVoxelManipulator *vm = o->vm; - v3s16 p1 = lua_istable(L, 2) ? read_v3s16(L, 2) : - vm->m_area.MinEdge + v3s16(0, 1, 0) * MAP_BLOCKSIZE; - v3s16 p2 = lua_istable(L, 3) ? read_v3s16(L, 3) : - vm->m_area.MaxEdge - v3s16(0, 1, 0) * MAP_BLOCKSIZE; + v3s16 p1 = lua_istable(L, 2) ? read_v3s16(L, 2) : vm->m_area.MinEdge; + v3s16 p2 = lua_istable(L, 3) ? read_v3s16(L, 3) : vm->m_area.MaxEdge; sortBoxVerticies(p1, p2); Mapgen mg; @@ -179,7 +177,11 @@ int LuaVoxelManip::l_calc_lighting(lua_State *L) mg.ndef = ndef; mg.water_level = emerge->params.water_level; - mg.calcLighting(p1, p2); + // Mapgen::calcLighting assumes the coordinates of + // the central chunk; correct for this + mg.calcLighting( + p1 + v3s16(1, 1, 1) * MAP_BLOCKSIZE, + p2 - v3s16(1, 1, 1) * MAP_BLOCKSIZE); return 0; } @@ -201,10 +203,8 @@ int LuaVoxelManip::l_set_lighting(lua_State *L) ManualMapVoxelManipulator *vm = o->vm; - v3s16 p1 = lua_istable(L, 3) ? read_v3s16(L, 3) : - vm->m_area.MinEdge + v3s16(0, 1, 0) * MAP_BLOCKSIZE; - v3s16 p2 = lua_istable(L, 4) ? read_v3s16(L, 4) : - vm->m_area.MaxEdge - v3s16(0, 1, 0) * MAP_BLOCKSIZE; + v3s16 p1 = lua_istable(L, 3) ? read_v3s16(L, 3) : vm->m_area.MinEdge; + v3s16 p2 = lua_istable(L, 4) ? read_v3s16(L, 4) : vm->m_area.MaxEdge; sortBoxVerticies(p1, p2); Mapgen mg; |