aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-12-04 15:55:37 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-12-04 15:55:37 +0200
commit09c48b60bd0430084d0d5a93357147e5279f071b (patch)
treec824795332cd801c1cdc62c502a58258f7371302
parent4cc117ddf6149b5b488e598a620674c8df208eac (diff)
downloadminetest-09c48b60bd0430084d0d5a93357147e5279f071b.tar.gz
minetest-09c48b60bd0430084d0d5a93357147e5279f071b.tar.bz2
minetest-09c48b60bd0430084d0d5a93357147e5279f071b.zip
Add EnvRef:get_node_light(pos, timeofday)
-rw-r--r--data/mods/default/init.lua2
-rw-r--r--src/scriptapi.cpp29
2 files changed, 31 insertions, 0 deletions
diff --git a/data/mods/default/init.lua b/data/mods/default/init.lua
index 7f0614e20..1bd1eba4a 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 ffbce9167..9b37c53b4 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),