1
0
mirror of https://github.com/mt-mods/signs_lib.git synced 2025-06-28 22:06:20 +02:00

Compare commits

...

2 Commits

Author SHA1 Message Date
ae6e707ebe forgot to include onpole_widefont signs in conversion list 2019-09-22 04:28:01 -04:00
dcdee22265 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.
2019-09-22 03:19:31 -04:00
4 changed files with 199 additions and 138 deletions

156
api.lua
View File

@ -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,84 +744,38 @@ 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
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 return true
end 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
function signs_lib.check_for_ceiling(pointed_thing) function signs_lib.check_for_ceiling(pointed_thing)
@ -1147,6 +1028,7 @@ function signs_lib.register_sign(name, rdef)
if rdef.allow_widefont then if rdef.allow_widefont then
table.insert(signs_lib.old_widefont_signs, name.."_widefont") table.insert(signs_lib.old_widefont_signs, name.."_widefont")
table.insert(signs_lib.old_widefont_signs, name.."_widefont_onpole")
end end
end end

176
compat.lua Normal file
View 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

View File

@ -1,3 +1,5 @@
default default
intllib? intllib?
screwdriver? screwdriver?
streetspoles?
streetlamps?

View File

@ -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")