Determine light_propagates from paramtype
authorPerttu Ahola <celeron55@gmail.com>
Sun, 4 Dec 2011 01:45:02 +0000 (03:45 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 4 Dec 2011 01:45:02 +0000 (03:45 +0200)
data/builtin.lua
data/mods/default/init.lua
src/script.cpp
src/script.h
src/scriptapi.cpp

index 2f167acfababb4e1ecd78db22e8c312d6312b9ff..555cc3ab83e5026f84fe9723eaf0aaac794d0121 100644 (file)
@@ -97,7 +97,6 @@ minetest.register_nodedef_defaults({
        post_effect_color = {a=0, r=0, g=0, b=0},
        paramtype = "none",
        is_ground_content = false,
-       light_propagates = false,
        sunlight_propagates = false,
        walkable = true,
        pointable = true,
@@ -133,7 +132,6 @@ minetest.register_nodedef_defaults({
 minetest.register_node("air", {
        drawtype = "airlike",
        paramtype = "light",
-       light_propagates = true,
        sunlight_propagates = true,
        walkable = false,
        pointable = false,
@@ -145,7 +143,6 @@ minetest.register_node("air", {
 minetest.register_node("ignore", {
        drawtype = "airlike",
        paramtype = "none",
-       light_propagates = false,
        sunlight_propagates = false,
        walkable = false,
        pointable = false,
index 100b9f1c83431edc4a0546466b2fc25356d254af..a843063ef40b917b8cd3c11d8907a8afd9552e3b 100644 (file)
 --     post_effect_color = {a=0, r=0, g=0, b=0},
 --     paramtype = "none",
 --     is_ground_content = false,
---     light_propagates = false,
 --     sunlight_propagates = false,
 --     walkable = true,
 --     pointable = true,
@@ -889,7 +888,6 @@ minetest.register_node("default:junglegrass", {
        visual_scale = 1.3,
        tile_images = {"default_junglegrass.png"},
        inventory_image = "default_junglegrass.png",
-       light_propagates = true,
        paramtype = "light",
        walkable = false,
        material = minetest.digprop_leaveslike(1.0),
@@ -901,7 +899,6 @@ minetest.register_node("default:leaves", {
        visual_scale = 1.3,
        tile_images = {"default_leaves.png"},
        inventory_image = minetest.inventorycube("default_leaves.png"),
-       light_propagates = true,
        paramtype = "light",
        material = minetest.digprop_leaveslike(1.0),
        extra_dug_item = 'node "sapling" 1',
@@ -921,7 +918,6 @@ minetest.register_node("default:papyrus", {
        drawtype = "plantlike",
        tile_images = {"default_papyrus.png"},
        inventory_image = "default_papyrus.png",
-       light_propagates = true,
        paramtype = "light",
        is_ground_content = true,
        walkable = false,
@@ -941,7 +937,6 @@ minetest.register_node("default:glass", {
        drawtype = "glasslike",
        tile_images = {"default_glass.png"},
        inventory_image = minetest.inventorycube("default_glass.png"),
-       light_propagates = true,
        paramtype = "light",
        sunlight_propagates = true,
        is_ground_content = true,
@@ -952,7 +947,6 @@ minetest.register_node("default:fence_wood", {
        drawtype = "fencelike",
        tile_images = {"default_wood.png"},
        inventory_image = "default_fence.png",
-       light_propagates = true,
        paramtype = "light",
        is_ground_content = true,
        selection_box = {
@@ -967,7 +961,6 @@ minetest.register_node("default:rail", {
        drawtype = "raillike",
        tile_images = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
        inventory_image = "default_rail.png",
-       light_propagates = true,
        paramtype = "light",
        is_ground_content = true,
        walkable = false,
@@ -982,7 +975,6 @@ minetest.register_node("default:ladder", {
        drawtype = "signlike",
        tile_images = {"default_ladder.png"},
        inventory_image = "default_ladder.png",
-       light_propagates = true,
        paramtype = "light",
        is_ground_content = true,
        wall_mounted = true,
@@ -1026,7 +1018,6 @@ minetest.register_node("default:water_flowing", {
        alpha = WATER_ALPHA,
        inventory_image = minetest.inventorycube("default_water.png"),
        paramtype = "light",
-       light_propagates = true,
        walkable = false,
        pointable = false,
        diggable = false,
@@ -1048,7 +1039,6 @@ minetest.register_node("default:water_source", {
        alpha = WATER_ALPHA,
        inventory_image = minetest.inventorycube("default_water.png"),
        paramtype = "light",
-       light_propagates = true,
        walkable = false,
        pointable = false,
        diggable = false,
@@ -1069,7 +1059,6 @@ minetest.register_node("default:lava_flowing", {
        tile_images = {"default_lava.png"},
        inventory_image = minetest.inventorycube("default_lava.png"),
        paramtype = "light",
-       light_propagates = false,
        light_source = LIGHT_MAX - 1,
        walkable = false,
        pointable = false,
@@ -1092,7 +1081,6 @@ minetest.register_node("default:lava_source", {
        tile_images = {"default_lava.png"},
        inventory_image = minetest.inventorycube("default_lava.png"),
        paramtype = "light",
-       light_propagates = false,
        light_source = LIGHT_MAX - 1,
        walkable = false,
        pointable = false,
@@ -1116,7 +1104,6 @@ minetest.register_node("default:torch", {
        tile_images = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
        inventory_image = "default_torch_on_floor.png",
        paramtype = "light",
-       light_propagates = true,
        sunlight_propagates = true,
        walkable = false,
        wall_mounted = true,
@@ -1136,7 +1123,6 @@ minetest.register_node("default:sign_wall", {
        tile_images = {"default_sign_wall.png"},
        inventory_image = "default_sign_wall.png",
        paramtype = "light",
-       light_propagates = true,
        sunlight_propagates = true,
        walkable = false,
        wall_mounted = true,
@@ -1224,7 +1210,6 @@ minetest.register_node("default:sapling", {
        tile_images = {"default_sapling.png"},
        inventory_image = "default_sapling.png",
        paramtype = "light",
-       light_propagates = true,
        walkable = false,
        material = minetest.digprop_constanttime(0.0),
        furnace_burntime = 10,
@@ -1236,7 +1221,6 @@ minetest.register_node("default:apple", {
        tile_images = {"default_apple.png"},
        inventory_image = "default_apple.png",
        paramtype = "light",
-       light_propagates = true,
        sunlight_propagates = true,
        walkable = false,
        dug_item = 'craft "apple" 1',
index 8b1b7013e9ff7210854c9fefde58ca57f1b4b701..14c23e009f7728b380a4fa838281d627018f3f50 100644 (file)
@@ -35,13 +35,19 @@ LuaError::LuaError(lua_State *L, const std::string &s)
 {
        m_s = "LuaError: ";
        m_s += s + "\n";
+       m_s += script_get_backtrace(L);
+}
+
+std::string script_get_backtrace(lua_State *L)
+{
+       std::string s;
        lua_getfield(L, LUA_GLOBALSINDEX, "debug");
        if(lua_istable(L, -1)){
                lua_getfield(L, -1, "traceback");
                if(lua_isfunction(L, -1)){
                        lua_call(L, 0, 1);
                        if(lua_isstring(L, -1)){
-                               m_s += lua_tostring(L, -1);
+                               s += lua_tostring(L, -1);
                        }
                        lua_pop(L, 1);
                }
@@ -50,6 +56,7 @@ LuaError::LuaError(lua_State *L, const std::string &s)
                }
        }
        lua_pop(L, 1);
+       return s;
 }
 
 void script_error(lua_State *L, const char *fmt, ...)
index 3c056ae35a1a6694c55fa090f09ab7dea73641c2..3bf5342f5e29c7558fcb7e2123a71400fa4866d8 100644 (file)
@@ -41,6 +41,7 @@ public:
 
 lua_State* script_init();
 void script_deinit(lua_State *L);
+std::string script_get_backtrace(lua_State *L);
 void script_error(lua_State *L, const char *fmt, ...);
 bool script_load(lua_State *L, const char *path);
 
index d7382b98bc73348e44a2cedfc97fb4493d6ee0bd..ffbce916797d1e11ba9b66ef876cb6e12d3c6794 100644 (file)
@@ -455,6 +455,18 @@ static void setfloatfield(lua_State *L, int table,
        lua_setfield(L, table, fieldname);
 }
 
+static void warn_if_field_exists(lua_State *L, int table,
+               const char *fieldname, const std::string &message)
+{
+       lua_getfield(L, table, fieldname);
+       if(!lua_isnil(L, -1)){
+               infostream<<script_get_backtrace(L)<<std::endl;
+               infostream<<"WARNING: field \""<<fieldname<<"\": "
+                               <<message<<std::endl;
+       }
+       lua_pop(L, 1);
+}
+
 /*
        Inventory stuff
 */
@@ -1019,7 +1031,9 @@ static int l_register_node(lua_State *L)
        
        // True for all ground-like things like stone and mud, false for eg. trees
        getboolfield(L, nodedef_table, "is_ground_content", f.is_ground_content);
-       getboolfield(L, nodedef_table, "light_propagates", f.light_propagates);
+       f.light_propagates = (f.param_type == CPT_LIGHT);
+       warn_if_field_exists(L, nodedef_table, "light_propagates",
+                       "deprecated: determined from paramtype");
        getboolfield(L, nodedef_table, "sunlight_propagates", f.sunlight_propagates);
        // This is used for collision detection.
        // Also for general solidness queries.