forked from mtcontrib/signs_lib
allow mods to pass a function or just true
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.
This commit is contained in:
parent
e4336e320c
commit
dcdee22265
155
api.lua
155
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,84 +744,38 @@ 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
|
||||
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
|
||||
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
|
||||
end
|
||||
end
|
||||
|
||||
function signs_lib.check_for_ceiling(pointed_thing)
|
||||
|
176
compat.lua
Normal file
176
compat.lua
Normal file
@ -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
|
@ -1,3 +1,5 @@
|
||||
default
|
||||
intllib?
|
||||
screwdriver?
|
||||
streetspoles?
|
||||
streetlamps?
|
||||
|
Loading…
Reference in New Issue
Block a user