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.master
parent
e4336e320c
commit
dcdee22265
157
api.lua
157
api.lua
|
@ -6,7 +6,6 @@ signs_lib.lbm_restore_nodes = {}
|
||||||
signs_lib.old_fenceposts = {}
|
signs_lib.old_fenceposts = {}
|
||||||
signs_lib.old_fenceposts_replacement_signs = {}
|
signs_lib.old_fenceposts_replacement_signs = {}
|
||||||
signs_lib.old_fenceposts_with_signs = {}
|
signs_lib.old_fenceposts_with_signs = {}
|
||||||
signs_lib.allowed_poles = {}
|
|
||||||
|
|
||||||
-- Settings used for a standard wood or steel wall sign
|
-- Settings used for a standard wood or steel wall sign
|
||||||
signs_lib.standard_lines = 6
|
signs_lib.standard_lines = 6
|
||||||
|
@ -152,78 +151,6 @@ signs_lib.flip_walldir = {
|
||||||
[5] = 4
|
[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
|
-- Initialize character texture cache
|
||||||
local ctexcache = {}
|
local ctexcache = {}
|
||||||
|
|
||||||
|
@ -817,83 +744,37 @@ function signs_lib.make_selection_boxes(sizex, sizey, foo, xoffs, yoffs, zoffs,
|
||||||
end
|
end
|
||||||
|
|
||||||
function signs_lib.check_for_pole(pos, pointed_thing)
|
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 ppos = minetest.get_pointed_thing_position(pointed_thing)
|
||||||
local pnode = minetest.get_node(ppos)
|
local pnode = minetest.get_node(ppos)
|
||||||
local pdef = minetest.registered_items[pnode.name]
|
local pdef = minetest.registered_items[pnode.name]
|
||||||
|
|
||||||
if (signs_lib.allowed_poles[pnode.name]
|
if not pdef then return end
|
||||||
or (pdef and pdef.drawtype == "fencelike")
|
|
||||||
or string.find(pnode.name, "default:fence_")
|
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, "_post")
|
||||||
or string.find(pnode.name, "fencepost")
|
or string.find(pnode.name, "fencepost") then
|
||||||
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
|
|
||||||
return true
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
function signs_lib.check_for_horizontal_pole(pos, pointed_thing)
|
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 ppos = minetest.get_pointed_thing_position(pointed_thing)
|
||||||
local pnode = minetest.get_node(ppos)
|
local pnode = minetest.get_node(ppos)
|
||||||
if pnode.name == "streets:bigpole" and pnode.param2 > 3 and pnode.param2 < 12 then
|
local pdef = minetest.registered_items[pnode.name]
|
||||||
if def.paramtype2 == "wallmounted" then
|
|
||||||
if node.param2 == 2 or node.param2 == 3 -- E/W
|
if not pdef then return end
|
||||||
then return true
|
|
||||||
end
|
if type(pdef.check_for_horiz_pole) == "function" then
|
||||||
else
|
local node = minetest.get_node(pos)
|
||||||
if node.param2 == 1 or node.param2 == 3 -- E/W
|
local def = minetest.registered_items[node.name]
|
||||||
then return true
|
return pdef.check_for_horiz_pole(pos, node, def, ppos, pnode, pdef)
|
||||||
end
|
elseif pdef.check_for_horiz_pole then
|
||||||
end
|
return true
|
||||||
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
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -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
|
default
|
||||||
intllib?
|
intllib?
|
||||||
screwdriver?
|
screwdriver?
|
||||||
|
streetspoles?
|
||||||
|
streetlamps?
|
||||||
|
|
1
init.lua
1
init.lua
|
@ -13,3 +13,4 @@ signs_lib.gettext = S
|
||||||
dofile(signs_lib.path.."/api.lua")
|
dofile(signs_lib.path.."/api.lua")
|
||||||
dofile(signs_lib.path.."/encoding.lua")
|
dofile(signs_lib.path.."/encoding.lua")
|
||||||
dofile(signs_lib.path.."/standard_signs.lua")
|
dofile(signs_lib.path.."/standard_signs.lua")
|
||||||
|
dofile(signs_lib.path.."/compat.lua")
|
||||||
|
|
Loading…
Reference in New Issue