]> git.lizzy.rs Git - signs_lib.git/commitdiff
detect streets:bigpole_tjunction
authorVanessa Dannenberg <vanessa.e.dannenberg@gmail.com>
Sat, 21 Sep 2019 23:48:35 +0000 (19:48 -0400)
committerVanessa Dannenberg <vanessa.e.dannenberg@gmail.com>
Sun, 22 Sep 2019 01:39:53 +0000 (21:39 -0400)
Treat T-junction as a vertical or horizontal pole (depending
on its orientation), if the sign could be placed flat against
the back or side of the junction.

In this instance, the "front" of the junction is the side with
the middle bit sticking out, and will just get a regular wall
signif targeted, as with any non-pole node.

api.lua

diff --git a/api.lua b/api.lua
index c6ee2eb7057e9f172e88d331e5eb5b8cd113f5ee..a1ebcc7e06f26657569a776f0e71001eb6b9809e 100644 (file)
--- a/api.lua
+++ b/api.lua
@@ -147,6 +147,78 @@ 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 = {}
 
@@ -747,6 +819,9 @@ 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]
@@ -761,6 +836,22 @@ function signs_lib.check_for_pole(pos, pointed_thing)
          or (pnode.name == "streets:bigpole" and pnode.param2 > 19 and pnode.param2 < 24) )
          and (pos.x ~= ppos.x or pos.z ~= ppos.z) 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
 
@@ -789,6 +880,22 @@ function signs_lib.check_for_horizontal_pole(pos, pointed_thing)
                                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
        end
 end