]> git.lizzy.rs Git - signs_lib.git/commitdiff
pass node information to sign update function, remove all entities on update incase...
authortenplus1 <kinsellaja@yahoo.com>
Wed, 26 Sep 2018 12:13:34 +0000 (12:13 +0000)
committertenplus1 <kinsellaja@yahoo.com>
Wed, 26 Sep 2018 12:13:34 +0000 (12:13 +0000)
init.lua

index d181121eca4040a8f8f09bdc5210e17594126829..b8b4db593afca598852d4530068ee81493c41089 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -40,55 +40,33 @@ local wall_dir_change = {
 signs_lib.wallmounted_rotate = function(pos, node, user, mode)
        if mode ~= screwdriver.ROTATE_FACE then return false end 
        minetest.swap_node(pos, { name = node.name, param2 = wall_dir_change[node.param2 % 6] })
-       for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
-               local e = v:get_luaentity()
-               if e and e.name == "signs:text" then
-                       v:remove()
-               end
-       end
-       signs_lib.update_sign(pos)
+       signs_lib.update_sign(pos,nil,nil,node)
        return true
 end
 
 signs_lib.facedir_rotate = function(pos, node, user, mode)
        if mode ~= screwdriver.ROTATE_FACE then return false end
-       newparam2 = (node.param2 %8) + 1
+       local newparam2 = (node.param2 %8) + 1
        if newparam2 == 5 then
                newparam2 = 6
        elseif newparam2 > 6 then
                newparam2 = 0
        end
        minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
-       for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
-               local e = v:get_luaentity()
-               if e and e.name == "signs:text" then
-                       v:remove()
-               end
-       end
-       signs_lib.update_sign(pos)
+       signs_lib.update_sign(pos,nil,nil,node)
        return true
 end
 
 signs_lib.facedir_rotate_simple = function(pos, node, user, mode)
        if mode ~= screwdriver.ROTATE_FACE then return false end
-       newparam2 = (node.param2 %8) + 1
+       local newparam2 = (node.param2 %8) + 1
        if newparam2 > 3 then newparam2 = 0 end
        minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
-       for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
-               local e = v:get_luaentity()
-               if e and e.name == "signs:text" then
-                       v:remove()
-               end
-       end
-       signs_lib.update_sign(pos)
+       signs_lib.update_sign(pos,nil,nil,node)
        return true
 end
 
 
-
-
-
-
 signs_lib.modpath = minetest.get_modpath("signs_lib")
 
 local DEFAULT_TEXT_SCALE = {x=0.8, y=0.5}
@@ -206,15 +184,15 @@ default_sign_metal_image = "default_sign_steel.png"
 --table copy
 
 function signs_lib.table_copy(t)
-    local nt = { };
-    for k, v in pairs(t) do
-        if type(v) == "table" then
-            nt[k] = signs_lib.table_copy(v)
-        else
-            nt[k] = v
-        end
-    end
-    return nt
+       local nt = { }
+       for k, v in pairs(t) do
+               if type(v) == "table" then
+                       nt[k] = signs_lib.table_copy(v)
+               else
+                       nt[k] = v
+               end
+       end
+       return nt
 end
 
 -- infinite stacks
@@ -512,7 +490,7 @@ local function set_obj_text(obj, text, new, pos)
 end
 
 signs_lib.construct_sign = function(pos, locked)
-    local meta = minetest.get_meta(pos)
+       local meta = minetest.get_meta(pos)
        meta:set_string(
                "formspec",
                "size[6,4]"..
@@ -523,13 +501,13 @@ signs_lib.construct_sign = function(pos, locked)
 end
 
 signs_lib.destruct_sign = function(pos)
-    local objects = minetest.get_objects_inside_radius(pos, 0.5)
-    for _, v in ipairs(objects) do
+       local objects = minetest.get_objects_inside_radius(pos, 0.5)
+       for _, v in ipairs(objects) do
                local e = v:get_luaentity()
-        if e and e.name == "signs:text" then
-            v:remove()
-        end
-    end
+               if e and e.name == "signs:text" then
+                       v:remove()
+               end
+       end
 end
 
 local function make_infotext(text)
@@ -542,7 +520,7 @@ local function make_infotext(text)
        return table.concat(lines2, "\n")
 end
 
-signs_lib.update_sign = function(pos, fields, owner)
+signs_lib.update_sign = function(pos, fields, owner, node)
 
        -- First, check if the interact keyword from CWz's mod is being set,
        -- or has been changed since the last restart...
@@ -586,28 +564,14 @@ signs_lib.update_sign = function(pos, fields, owner)
        else
                new = (meta:get_int("__signslib_new_format") ~= 0)
        end
+       signs_lib.destruct_sign(pos)
        local text = meta:get_string("text")
-       if text == nil then return end
-       local objects = minetest.get_objects_inside_radius(pos, 0.5)
-       local found
-       for _, v in ipairs(objects) do
-               local e = v:get_luaentity()
-               if e and e.name == "signs:text" then
-                       if found then
-                               v:remove()
-                       else
-                               set_obj_text(v, text, new, pos)
-                               found = true
-                       end
-               end
-       end
-       if found then
-               return
-       end
+       if text == nil or text == "" then return end
+
+if node then print ("---", node.name, node.param2) end
 
-       -- if there is no entity
        local sign_info
-       local signnode = minetest.get_node(pos)
+       local signnode = node or minetest.get_node(pos)
        local signname = signnode.name
        local textpos = minetest.registered_nodes[signname].textpos
        if textpos then
@@ -764,52 +728,52 @@ minetest.register_node(":"..default_sign, {
                signs_lib.receive_fields(pos, formname, fields, sender)
        end,
        on_punch = function(pos, node, puncher)
-               signs_lib.update_sign(pos)
+               signs_lib.update_sign(pos,nil,nil,node)
        end,
        on_rotate = signs_lib.wallmounted_rotate
 })
 
 minetest.register_node(":signs:sign_yard", {
-    paramtype = "light",
+       paramtype = "light",
        sunlight_propagates = true,
-    paramtype2 = "facedir",
-    drawtype = "nodebox",
-    node_box = signs_lib.yard_sign_model.nodebox,
+       paramtype2 = "facedir",
+       drawtype = "nodebox",
+       node_box = signs_lib.yard_sign_model.nodebox,
        selection_box = {
                type = "fixed",
                fixed = {-0.4375, -0.5, -0.0625, 0.4375, 0.375, 0}
        },
-    tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"},
-    groups = {choppy=2, dig_immediate=2},
-    drop = default_sign,
-
-    on_construct = function(pos)
-        signs_lib.construct_sign(pos)
-    end,
-    on_destruct = function(pos)
-        signs_lib.destruct_sign(pos)
-    end,
+       tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"},
+       groups = {choppy=2, dig_immediate=2},
+       drop = default_sign,
+
+       on_construct = function(pos)
+               signs_lib.construct_sign(pos)
+       end,
+       on_destruct = function(pos)
+               signs_lib.destruct_sign(pos)
+       end,
        on_receive_fields = function(pos, formname, fields, sender)
                signs_lib.receive_fields(pos, formname, fields, sender)
        end,
        on_punch = function(pos, node, puncher)
-               signs_lib.update_sign(pos)
+               signs_lib.update_sign(pos,nil,nil,node)
        end,
        on_rotate = signs_lib.facedir_rotate_simple
 
 })
 
 minetest.register_node(":signs:sign_hanging", {
-    paramtype = "light",
+       paramtype = "light",
        sunlight_propagates = true,
-    paramtype2 = "facedir",
-    drawtype = "nodebox",
-    node_box = signs_lib.hanging_sign_model.nodebox,
-    selection_box = {
+       paramtype2 = "facedir",
+       drawtype = "nodebox",
+       node_box = signs_lib.hanging_sign_model.nodebox,
+       selection_box = {
                type = "fixed",
                fixed = {-0.45, -0.275, -0.049, 0.45, 0.5, 0.049}
        },
-    tiles = {
+       tiles = {
                "signs_hanging_top.png",
                "signs_hanging_bottom.png",
                "signs_hanging_side.png",
@@ -817,31 +781,31 @@ minetest.register_node(":signs:sign_hanging", {
                "signs_hanging_back.png",
                "signs_hanging_front.png"
        },
-    groups = {choppy=2, dig_immediate=2},
-    drop = default_sign,
-
-    on_construct = function(pos)
-        signs_lib.construct_sign(pos)
-    end,
-    on_destruct = function(pos)
-        signs_lib.destruct_sign(pos)
-    end,
+       groups = {choppy=2, dig_immediate=2},
+       drop = default_sign,
+
+       on_construct = function(pos)
+               signs_lib.construct_sign(pos)
+       end,
+       on_destruct = function(pos)
+               signs_lib.destruct_sign(pos)
+       end,
        on_receive_fields = function(pos, formname, fields, sender)
                signs_lib.receive_fields(pos, formname, fields, sender)
        end,
        on_punch = function(pos, node, puncher)
-               signs_lib.update_sign(pos)
+               signs_lib.update_sign(pos,nil,nil,node)
        end,
        on_rotate = signs_lib.facedir_rotate_simple
 })
 
 minetest.register_node(":signs:sign_post", {
-    paramtype = "light",
+       paramtype = "light",
        sunlight_propagates = true,
-    paramtype2 = "facedir",
-    drawtype = "nodebox",
-    node_box = signs_lib.sign_post_model.nodebox,
-    tiles = {
+       paramtype2 = "facedir",
+       drawtype = "nodebox",
+       node_box = signs_lib.sign_post_model.nodebox,
+       tiles = {
                "signs_post_top.png",
                "signs_post_bottom.png",
                "signs_post_side.png",
@@ -849,14 +813,14 @@ minetest.register_node(":signs:sign_post", {
                "signs_post_back.png",
                "signs_post_front.png",
        },
-    groups = {choppy=2, dig_immediate=2},
-    drop = {
+       groups = {choppy=2, dig_immediate=2},
+       drop = {
                max_items = 2,
                items = {
                        { items = { default_sign }},
                        { items = { "default:fence_wood" }},
                },
-    },
+       },
        on_rotate = signs_lib.facedir_rotate_simple
 })
 
@@ -896,7 +860,7 @@ minetest.register_node(":locked_sign:sign_wall_locked", {
                signs_lib.receive_fields(pos, formname, fields, sender, true)
        end,
        on_punch = function(pos, node, puncher)
-               signs_lib.update_sign(pos)
+               signs_lib.update_sign(pos,nil,nil,node)
        end,
        can_dig = function(pos, player)
                local meta = minetest.get_meta(pos)
@@ -937,7 +901,7 @@ if minetest.registered_nodes["default:sign_wall_steel"] then
                        signs_lib.receive_fields(pos, formname, fields, sender)
                end,
                on_punch = function(pos, node, puncher)
-                       signs_lib.update_sign(pos)
+                       signs_lib.update_sign(pos,nil,nil,node)
                end,
                on_rotate = signs_lib.wallmounted_rotate
        })
@@ -991,7 +955,7 @@ if enable_colored_metal_signs then
                                signs_lib.receive_fields(pos, formname, fields, sender)
                        end,
                        on_punch = function(pos, node, puncher)
-                               signs_lib.update_sign(pos)
+                               signs_lib.update_sign(pos,nil,nil,node)
                        end,
                        on_rotate = signs_lib.facedir_rotate
                })
@@ -1012,9 +976,9 @@ signs_text_on_activate = function(self)
 end
 
 minetest.register_entity(":signs:text", {
-    collisionbox = { 0, 0, 0, 0, 0, 0 },
-    visual = "upright_sprite",
-    textures = {},
+       collisionbox = { 0, 0, 0, 0, 0, 0 },
+       visual = "upright_sprite",
+       textures = {},
 
        on_activate = signs_text_on_activate,
 })
@@ -1022,17 +986,17 @@ minetest.register_entity(":signs:text", {
 -- And the good stuff here! :-)
 
 function signs_lib.register_fence_with_sign(fencename, fencewithsignname)
-    local def = minetest.registered_nodes[fencename]
-    local def_sign = minetest.registered_nodes[fencewithsignname]
-    if not (def and def_sign) then
-        minetest.log("warning", "[signs_lib] "..S("Attempt to register unknown node as fence"))
-        return
-    end
-    def = signs_lib.table_copy(def)
-    def_sign = signs_lib.table_copy(def_sign)
-    fences_with_sign[fencename] = fencewithsignname
-
-    def_sign.on_place = function(itemstack, placer, pointed_thing, ...)
+       local def = minetest.registered_nodes[fencename]
+       local def_sign = minetest.registered_nodes[fencewithsignname]
+       if not (def and def_sign) then
+               minetest.log("warning", "[signs_lib] "..S("Attempt to register unknown node as fence"))
+               return
+       end
+       def = signs_lib.table_copy(def)
+       def_sign = signs_lib.table_copy(def_sign)
+       fences_with_sign[fencename] = fencewithsignname
+
+       def_sign.on_place = function(itemstack, placer, pointed_thing, ...)
                local node_above = minetest.get_node_or_nil(pointed_thing.above)
                local node_under = minetest.get_node_or_nil(pointed_thing.under)
                local def_above = node_above and minetest.registered_nodes[node_above.name]
@@ -1077,16 +1041,16 @@ function signs_lib.register_fence_with_sign(fencename, fencewithsignname)
                signs_lib.receive_fields(pos, formname, fields, sender)
        end
        def_sign.on_punch = function(pos, node, puncher, ...)
-               signs_lib.update_sign(pos)
+               signs_lib.update_sign(pos,nil,nil,node)
        end
        local fencename = fencename
        def_sign.after_dig_node = function(pos, node, ...)
-           node.name = fencename
-           minetest.add_node(pos, node)
+               node.name = fencename
+               minetest.add_node(pos, node)
        end
        def_sign.on_rotate = signs_lib.facedir_rotate_simple
 
-    def_sign.drop = default_sign
+       def_sign.drop = default_sign
        minetest.register_node(":"..fencename, def)
        minetest.register_node(":"..fencewithsignname, def_sign)
        table.insert(signs_lib.sign_node_list, fencewithsignname)
@@ -1109,18 +1073,18 @@ minetest.register_lbm({
        label = "Restore sign text",
        run_at_every_load = true,
        action = function(pos, node)
-               signs_lib.update_sign(pos)
+               signs_lib.update_sign(pos,nil,nil,node)
        end
 })
 
 -- locked sign
 
 minetest.register_craft({
-       output = "locked_sign:sign_wall_locked",
-       recipe = {
-               {default_sign},
-               {"default:steel_ingot"},
-    },
+               output = "locked_sign:sign_wall_locked",
+               recipe = {
+                       {default_sign},
+                       {"default:steel_ingot"},
+       },
 })
 
 -- craft recipes for the metal signs