From 09c48b60bd0430084d0d5a93357147e5279f071b Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
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 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 @@ class EnvRef
 		}
 	}
 
+	// 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),
-- 
GitLab