]> git.lizzy.rs Git - signs_lib.git/commitdiff
allow mods to pass a function or just `true`
authorVanessa Dannenberg <vanessa.e.dannenberg@gmail.com>
Sun, 22 Sep 2019 07:19:31 +0000 (03:19 -0400)
committerVanessa Dannenberg <vanessa.e.dannenberg@gmail.com>
Sun, 22 Sep 2019 07:19:31 +0000 (03:19 -0400)
to the pole and horiz pole check routines, in case they need
their own, custom checking routines, if the usual, simple
checks aren't good enough.

got rid of the allowed-poles table, as it's now obsolete

moved all existing special code into compat.lua, altered to
use this feature.

api.lua
compat.lua [new file with mode: 0644]
depends.txt
init.lua

diff --git a/api.lua b/api.lua
index 7414cec6a65692ee94d2e1b91f1dfdfce36383c8..0119f75ddee07e5e0bb18a56e61aaca32d360a34 100644 (file)
--- a/api.lua
+++ b/api.lua
@@ -6,7 +6,6 @@ signs_lib.lbm_restore_nodes = {}
 signs_lib.old_fenceposts = {}
 signs_lib.old_fenceposts_replacement_signs = {}
 signs_lib.old_fenceposts_with_signs = {}
-signs_lib.allowed_poles = {}
 
 -- Settings used for a standard wood or steel wall sign
 signs_lib.standard_lines = 6
@@ -152,78 +151,6 @@ signs_lib.flip_walldir = {
        [5] = 4
 }
 
-local htj_north = {
-       [1] = true,
-       [3] = true,
-       [9] = true,
-       [11] = true,
-       [21] = true,
-       [23] = true
-}
-
-local htj_east = {
-       [0] = true,
-       [2] = true,
-       [16] = true,
-       [18] = true,
-       [20] = true,
-       [22] = true
-}
-
-local htj_south = {
-       [1] = true,
-       [3] = true,
-       [5] = true,
-       [7] = true,
-       [21] = true,
-       [23] = true
-}
-
-local htj_west = {
-       [0] = true,
-       [2] = true,
-       [12] = true,
-       [14] = true,
-       [20] = true,
-       [22] = true
-}
-
-local vtj_north = {
-       [8] = true,
-       [10] = true,
-       [13] = true,
-       [15] = true,
-       [17] = true,
-       [19] = true
-}
-
-local vtj_east = {
-       [4] = true,
-       [6] = true,
-       [8] = true,
-       [10] = true,
-       [17] = true,
-       [19] = true
-}
-
-local vtj_south = {
-       [4] = true,
-       [6] = true,
-       [13] = true,
-       [15] = true,
-       [17] = true,
-       [10] = true
-}
-
-local vtj_west = {
-       [4] = true,
-       [6] = true,
-       [8] = true,
-       [10] = true,
-       [13] = true,
-       [15] = true
-}
-
 -- Initialize character texture cache
 local ctexcache = {}
 
@@ -817,83 +744,37 @@ function signs_lib.make_selection_boxes(sizex, sizey, foo, xoffs, yoffs, zoffs,
 end
 
 function signs_lib.check_for_pole(pos, pointed_thing)
-       local node = minetest.get_node(pos)
-       local def = minetest.registered_items[node.name]
-
        local ppos = minetest.get_pointed_thing_position(pointed_thing)
        local pnode = minetest.get_node(ppos)
        local pdef = minetest.registered_items[pnode.name]
 
-       if (signs_lib.allowed_poles[pnode.name]
-         or (pdef and pdef.drawtype == "fencelike")
-         or string.find(pnode.name, "default:fence_")
+       if not pdef then return end
+
+       if type(pdef.check_for_pole) == "function" then
+               local node = minetest.get_node(pos)
+               local def = minetest.registered_items[node.name]
+               return pdef.check_for_pole(pos, node, def, ppos, pnode, pdef)
+       elseif pdef.check_for_pole
+         or pdef.drawtype == "fencelike"
          or string.find(pnode.name, "_post")
-         or string.find(pnode.name, "fencepost")
-         or string.find(pnode.name, "streets:streetlamp_basic_top")
-         or (pnode.name == "streets:bigpole" and pnode.param2 < 4)
-         or (pnode.name == "streets:bigpole" and pnode.param2 > 19 and pnode.param2 < 24) )
-         and (pos.x ~= ppos.x or pos.z ~= ppos.z) then
+         or string.find(pnode.name, "fencepost") then
                return true
-       elseif pnode.name == "streets:bigpole_tjunction" then
-               if def.paramtype2 == "wallmounted" then
-                       if   (node.param2 == 4 and vtj_north[pnode.param2])
-                         or (node.param2 == 2 and vtj_east[pnode.param2])
-                         or (node.param2 == 5 and vtj_south[pnode.param2])
-                         or (node.param2 == 3 and vtj_west[pnode.param2]) then
-                               return true
-                       end
-               else
-                       if   (node.param2 == 0 and vtj_north[pnode.param2])
-                         or (node.param2 == 1 and vtj_east[pnode.param2])
-                         or (node.param2 == 2 and vtj_south[pnode.param2])
-                         or (node.param2 == 3 and vtj_west[pnode.param2]) then
-                               return true
-                       end
-               end
        end
 end
 
 function signs_lib.check_for_horizontal_pole(pos, pointed_thing)
-       local node = minetest.get_node(pos)
-       local def = minetest.registered_items[node.name]
        local ppos = minetest.get_pointed_thing_position(pointed_thing)
        local pnode = minetest.get_node(ppos)
-       if pnode.name == "streets:bigpole" and pnode.param2 > 3 and pnode.param2 < 12 then
-               if def.paramtype2 == "wallmounted" then
-                       if node.param2 == 2 or node.param2 == 3 -- E/W
-                               then return true
-                       end
-               else
-                       if node.param2 == 1 or node.param2 == 3 -- E/W
-                               then return true
-                       end
-               end
-       elseif pnode.name == "streets:bigpole" and pnode.param2 > 11 and pnode.param2 < 20 then
-               if def.paramtype2 == "wallmounted" then
-                       if node.param2 == 4 or node.param2 == 5 then
-                               return true
-                       end
-               else
-                       if node.param2 == 0 or node.param2 == 2 then
-                               return true
-                       end
-               end
-       elseif pnode.name == "streets:bigpole_tjunction" then
-               if def.paramtype2 == "wallmounted" then
-                       if   (node.param2 == 4 and htj_north[pnode.param2])
-                         or (node.param2 == 2 and htj_east[pnode.param2])
-                         or (node.param2 == 5 and htj_south[pnode.param2])
-                         or (node.param2 == 3 and htj_west[pnode.param2]) then
-                               return true
-                       end
-               else
-                       if   (node.param2 == 0 and htj_north[pnode.param2])
-                         or (node.param2 == 1 and htj_east[pnode.param2])
-                         or (node.param2 == 2 and htj_south[pnode.param2])
-                         or (node.param2 == 3 and htj_west[pnode.param2]) then
-                               return true
-                       end
-               end
+       local pdef = minetest.registered_items[pnode.name]
+
+       if not pdef then return end
+
+       if type(pdef.check_for_horiz_pole) == "function" then
+               local node = minetest.get_node(pos)
+               local def = minetest.registered_items[node.name]
+               return pdef.check_for_horiz_pole(pos, node, def, ppos, pnode, pdef)
+       elseif pdef.check_for_horiz_pole then
+               return true
        end
 end
 
diff --git a/compat.lua b/compat.lua
new file mode 100644 (file)
index 0000000..76405d3
--- /dev/null
@@ -0,0 +1,176 @@
+
+local default_fences = {
+       "default:fence_wood",
+       "default:fence_acacia_wood",
+       "default:fence_aspen_wood",
+       "default:fence_junglewood",
+       "default:fence_pine_wood"
+}
+
+for _, n in ipairs(default_fences) do
+       minetest.override_item(n, {
+               check_for_pole = true
+       })
+end
+
+if minetest.get_modpath("streetspoles") then
+
+       local htj_north = {
+               [1] = true,
+               [3] = true,
+               [9] = true,
+               [11] = true,
+               [21] = true,
+               [23] = true
+       }
+
+       local htj_east = {
+               [0] = true,
+               [2] = true,
+               [16] = true,
+               [18] = true,
+               [20] = true,
+               [22] = true
+       }
+
+       local htj_south = {
+               [1] = true,
+               [3] = true,
+               [5] = true,
+               [7] = true,
+               [21] = true,
+               [23] = true
+       }
+
+       local htj_west = {
+               [0] = true,
+               [2] = true,
+               [12] = true,
+               [14] = true,
+               [20] = true,
+               [22] = true
+       }
+
+       local vtj_north = {
+               [8] = true,
+               [10] = true,
+               [13] = true,
+               [15] = true,
+               [17] = true,
+               [19] = true
+       }
+
+       local vtj_east = {
+               [4] = true,
+               [6] = true,
+               [8] = true,
+               [10] = true,
+               [17] = true,
+               [19] = true
+       }
+
+       local vtj_south = {
+               [4] = true,
+               [6] = true,
+               [13] = true,
+               [15] = true,
+               [17] = true,
+               [10] = true
+       }
+
+       local vtj_west = {
+               [4] = true,
+               [6] = true,
+               [8] = true,
+               [10] = true,
+               [13] = true,
+               [15] = true
+       }
+
+       minetest.override_item("streets:bigpole", {
+               check_for_pole = function(pos, node, def, ppos, pnode, pdef)
+                       if pnode.param2 < 4
+                         or (pnode.param2 > 19 and pnode.param2 < 24)
+                         and (pos.x ~= ppos.x or pos.z ~= ppos.z) then
+                               return true
+                       end
+               end,
+
+               check_for_horiz_pole = function(pos, node, def, ppos, pnode, pdef)
+                       if pnode.param2 > 3 and pnode.param2 < 12 then
+                               if def.paramtype2 == "wallmounted" then
+                                       if node.param2 == 2 or node.param2 == 3 -- E/W
+                                               then return true
+                                       end
+                               else
+                                       if node.param2 == 1 or node.param2 == 3 -- E/W
+                                               then return true
+                                       end
+                               end
+                       elseif pnode.param2 > 11 and pnode.param2 < 20 then
+                               if def.paramtype2 == "wallmounted" then
+                                       if node.param2 == 4 or node.param2 == 5 then
+                                               return true
+                                       end
+                               else
+                                       if node.param2 == 0 or node.param2 == 2 then
+                                               return true
+                                       end
+                               end
+                       end
+               end
+       })
+
+       minetest.override_item("streets:bigpole_tjunction", {
+               check_for_pole = function(pos, node, def, ppos, pnode, pdef)
+                       if def.paramtype2 == "wallmounted" then
+                               if   (node.param2 == 4 and vtj_north[pnode.param2])
+                                 or (node.param2 == 2 and vtj_east[pnode.param2])
+                                 or (node.param2 == 5 and vtj_south[pnode.param2])
+                                 or (node.param2 == 3 and vtj_west[pnode.param2]) then
+                                       return true
+                               end
+                       else
+                               if   (node.param2 == 0 and vtj_north[pnode.param2])
+                                 or (node.param2 == 1 and vtj_east[pnode.param2])
+                                 or (node.param2 == 2 and vtj_south[pnode.param2])
+                                 or (node.param2 == 3 and vtj_west[pnode.param2]) then
+                                       return true
+                               end
+                       end
+               end,
+
+               check_for_horiz_pole = function(pos, node, def, ppos, pnode, pdef)
+                       if def.paramtype2 == "wallmounted" then
+                               if   (node.param2 == 4 and htj_north[pnode.param2])
+                                 or (node.param2 == 2 and htj_east[pnode.param2])
+                                 or (node.param2 == 5 and htj_south[pnode.param2])
+                                 or (node.param2 == 3 and htj_west[pnode.param2]) then
+                                       return true
+                               end
+                       else
+                               if   (node.param2 == 0 and htj_north[pnode.param2])
+                                 or (node.param2 == 1 and htj_east[pnode.param2])
+                                 or (node.param2 == 2 and htj_south[pnode.param2])
+                                 or (node.param2 == 3 and htj_west[pnode.param2]) then
+                                       return true
+                               end
+                       end
+               end
+       })
+
+end
+
+if minetest.get_modpath("streetlamps") then
+       minetest.override_item("streets:streetlamp_basic_top_on", {
+               selection_box = {
+                       type = "fixed",
+                       fixed = {
+                               {-0.3,-0.4,-0.3,0.3,0.5,0.3},
+                               {-0.15,-0.4,-0.15,0.15,-1.55,0.15},
+                               {-0.18,-1.55,-0.18,0.18,-2.5,0.18},
+                       }
+               },
+               check_for_pole = true
+       })
+end
index c0dd3b0710e95dfa193103b82fca4aaa08b20f71..7e47df4a4ddd7170a2f76c70d85a39a24b08972d 100644 (file)
@@ -1,3 +1,5 @@
 default
 intllib?
 screwdriver?
+streetspoles?
+streetlamps?
index 152cf1fd56419d833964d5229351514f29489440..fd6c8e7563f66937c404b2093794b71c5feb6a99 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -13,3 +13,4 @@ signs_lib.gettext = S
 dofile(signs_lib.path.."/api.lua")
 dofile(signs_lib.path.."/encoding.lua")
 dofile(signs_lib.path.."/standard_signs.lua")
+dofile(signs_lib.path.."/compat.lua")