From 09c48b60bd0430084d0d5a93357147e5279f071b Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 4 Dec 2011 15:55:37 +0200 Subject: [PATCH] Add EnvRef:get_node_light(pos, timeofday) --- data/mods/default/init.lua | 2 ++ src/scriptapi.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/data/mods/default/init.lua b/data/mods/default/init.lua index 7f0614e2..1bd1eba4 100644 --- a/data/mods/default/init.lua +++ b/data/mods/default/init.lua @@ -146,6 +146,8 @@ -- ^ Returns {name="ignore", ...} for unloaded area -- - get_node_or_nil(pos) -- ^ Returns nil for unloaded area +-- - get_node_light(pos, timeofday) -> 0...15 or nil +-- ^ timeofday: nil = current time, 0 = night, 0.5 = day -- - add_luaentity(pos, name) -- - add_item(pos, itemstring) -- - add_rat(pos) diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index ffbce916..9b37c53b 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -2402,6 +2402,34 @@ private: } } + // EnvRef:get_node_light(pos, timeofday) + // pos = {x=num, y=num, z=num} + // timeofday: nil = current time, 0 = night, 0.5 = day + static int l_get_node_light(lua_State *L) + { + EnvRef *o = checkobject(L, 1); + ServerEnvironment *env = o->m_env; + if(env == NULL) return 0; + // Do it + v3s16 pos = readpos(L, 2); + u32 time_of_day = env->getTimeOfDay(); + if(lua_isnumber(L, 3)) + time_of_day = 24000.0 * lua_tonumber(L, 3); + time_of_day %= 24000; + u32 dnr = time_to_daynight_ratio(time_of_day); + MapNode n = env->getMap().getNodeNoEx(pos); + try{ + MapNode n = env->getMap().getNode(pos); + INodeDefManager *ndef = env->getGameDef()->ndef(); + lua_pushinteger(L, n.getLightBlend(dnr, ndef)); + return 1; + } catch(InvalidPositionException &e) + { + lua_pushnil(L); + return 1; + } + } + // EnvRef:add_luaentity(pos, entityname) // pos = {x=num, y=num, z=num} static int l_add_luaentity(lua_State *L) @@ -2571,6 +2599,7 @@ const luaL_reg EnvRef::methods[] = { method(EnvRef, remove_node), method(EnvRef, get_node), method(EnvRef, get_node_or_nil), + method(EnvRef, get_node_light), method(EnvRef, add_luaentity), method(EnvRef, add_item), method(EnvRef, add_rat),