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

Compare commits

...

15 Commits

Author SHA1 Message Date
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
e4336e320c fix empty lines being skipped 2019-09-21 22:04:39 -04:00
d41e2ffd73 use a meta key to select wide-font mode
instead of using a separate node
add LBM to convert old nodes.
2019-09-21 21:42:46 -04:00
77987d12b9 detect streets:bigpole_tjunction
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.
2019-09-21 21:39:53 -04:00
dfece5275e rework horizontal pole detection slightly 2019-09-21 19:24:48 -04:00
6285d250d7 default "allow_onpole" to disabled
for consistency with other similar flags
2019-09-21 15:56:45 -04:00
9502812088 Add necessary bits to allow signs to be placed onto horizontal poles
(both wooden and steel signs)

only streets mod's "bigpole" supported for now.

Model changes:

To make a sign support horizontal mounting, make a single "_onpole"
model, with two copies of the pole mount, one rotated by 90°.  Make sure
the second copy appears has its own material entry, and that it is last
in the materials list in the exported .obj (`grep "g " file.obj` to
check).

When registered, signs_lib will set the "_onpole" and "_onpole_horiz"
tiles{} to reveal one mount or the other: entry 3 will expose the
vertical mount, entry 4 is the horizontal copy, with the opposite entry
being set to the "blank" image.
2019-09-21 15:45:48 -04:00
c66c1b70bd disable backface culling on the sign entity
(allows for transparent signs i.e. glass)
2019-09-19 01:02:44 -04:00
831055095c remove debug prints 2019-09-18 20:28:42 -04:00
f0bc18154e fix corner case
Placing a "wallmounted" sign onto a streets lamp would cause a
weird rotation if you're pointing downward too far.  Now it
enforces NESW direction according to your yaw.

Also fixes bad orientation when you're really close to a post.
2019-09-18 20:25:41 -04:00
4eeaf90ae3 allow placement of "facedir" signs flat on floor
(and on ceiling, if hanging isn't available)
mimics the way wallmounted signs behave
2019-09-18 20:12:31 -04:00
906ddbbcc5 rotation fixups
* combine rotation functions -- one no longer needs to choose
  a particular rotation function for the node's paramtype2,
  it'll figure it out automatically.
* fix glitch in wallmounted rotation
* re-order rotation facing order to N, E, S, W, floor, ceiling.
* limit yard sign to simple NESW-only rotation
* allow rotation of hanging signs (NESW only)
* allow rotation of signs on poles/posts if there's nothing in
  the way of where the sign has to move to (NESW only).
2019-09-18 20:07:20 -04:00
01e2adaa46 allow visible text on
floor and when flat on a ceiling
2019-09-18 17:23:07 -04:00
03bd471230 fix a couple of global warnings 2019-09-18 16:33:56 -04:00
e5d525c272 in fact, just bail out if the sign needs no entity 2019-09-18 14:21:56 -04:00
8 changed files with 980 additions and 232 deletions

495
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
@ -31,6 +30,11 @@ signs_lib.standard_steel_sign_sounds = table.copy(minetest.registered_items["def
signs_lib.default_text_scale = {x=10, y=10} signs_lib.default_text_scale = {x=10, y=10}
signs_lib.old_widefont_signs = {}
signs_lib.block_list = {}
signs_lib.totalblocks = 0
signs_lib.standard_yaw = { signs_lib.standard_yaw = {
0, 0,
math.pi / -2, math.pi / -2,
@ -63,25 +67,90 @@ signs_lib.wall_fdir_to_back = {
{ 1, 0 }, { 1, 0 },
} }
signs_lib.rotate_facedir = { signs_lib.fdir_flip_to_back = {
[0] = 1, [0] = { 0, 2 },
[1] = 6, [1] = { 2, 0 },
[2] = 3, [2] = { 0, -2 },
[3] = 0, [3] = { -2, 0 }
[4] = 2, }
[5] = 6,
[6] = 4 signs_lib.wall_fdir_flip_to_back = {
[2] = { 2, 0 },
[3] = { -2, 0 },
[4] = { 0, 2 },
[5] = { 0, -2 },
}
signs_lib.fdir_to_back_left = {
[0] = { -1, 1 },
[1] = { 1, 1 },
[2] = { 1, -1 },
[3] = { -1, -1 }
}
signs_lib.wall_fdir_to_back_left = {
[2] = { 1, 1 },
[3] = { -1, -1 },
[4] = { -1, 1 },
[5] = { 1, -1 }
} }
signs_lib.rotate_walldir = { signs_lib.rotate_walldir = {
[0] = 1, [0] = 4,
[1] = 5, [1] = 0,
[2] = 0, [2] = 5,
[3] = 1,
[4] = 2,
[5] = 3
}
signs_lib.rotate_walldir_simple = {
[0] = 4,
[1] = 4,
[2] = 5,
[3] = 4, [3] = 4,
[4] = 2, [4] = 2,
[5] = 3 [5] = 3
} }
signs_lib.rotate_facedir = {
[0] = 1,
[1] = 2,
[2] = 3,
[3] = 4,
[4] = 6,
[5] = 6,
[6] = 0
}
signs_lib.rotate_facedir_simple = {
[0] = 1,
[1] = 2,
[2] = 3,
[3] = 0,
[4] = 0,
[5] = 0
}
signs_lib.flip_facedir = {
[0] = 2,
[1] = 3,
[2] = 0,
[3] = 1,
[4] = 6,
[5] = 4,
[6] = 4
}
signs_lib.flip_walldir = {
[0] = 1,
[1] = 0,
[2] = 3,
[3] = 2,
[4] = 5,
[5] = 4
}
-- Initialize character texture cache -- Initialize character texture cache
local ctexcache = {} local ctexcache = {}
@ -92,7 +161,8 @@ minetest.register_entity("signs_lib:text", {
visual = "mesh", visual = "mesh",
mesh = "signs_lib_standard_wall_sign_entity.obj", mesh = "signs_lib_standard_wall_sign_entity.obj",
textures = {}, textures = {},
static_save = false static_save = false,
backface_culling = false
}) })
function signs_lib.delete_objects(pos) function signs_lib.delete_objects(pos)
@ -105,7 +175,7 @@ end
function signs_lib.spawn_entity(pos, texture) function signs_lib.spawn_entity(pos, texture)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local def = minetest.registered_items[node.name] local def = minetest.registered_items[node.name]
if not def or not def.entity_info or not def.entity_info.yaw[node.param2 + 1] then return end if not def or not def.entity_info then return end
local text_scale = (node and node.text_scale) or signs_lib.default_text_scale local text_scale = (node and node.text_scale) or signs_lib.default_text_scale
local objects = minetest.get_objects_inside_radius(pos, 0.5) local objects = minetest.get_objects_inside_radius(pos, 0.5)
@ -117,51 +187,109 @@ function signs_lib.spawn_entity(pos, texture)
obj = minetest.add_entity(pos, "signs_lib:text") obj = minetest.add_entity(pos, "signs_lib:text")
end end
obj:setyaw(def.entity_info.yaw[node.param2 + 1]) local yaw = def.entity_info.yaw[node.param2 + 1]
local pitch = 0
if not texture then if not string.find(node.name, "onpole") and not string.find(node.name, "hanging") then
obj:set_properties({ local rot90 = math.pi/2
mesh = def.entity_info.mesh,
visual_size = text_scale, if def.paramtype2 == "wallmounted" then
}) if node.param2 == 1 then -- on floor
else pitch = -rot90
obj:set_properties({ yaw = 0
mesh = def.entity_info.mesh, elseif node.param2 == 0 then -- on ceiling
visual_size = text_scale, pitch = rot90
textures={texture}, yaw = math.pi
}) end
elseif def.paramtype2 == "facedir" then
if node.param2 == 4 then
pitch = -rot90
yaw = 0
elseif node.param2 == 6 then
pitch = rot90
yaw = math.pi
end
end
end
if yaw then
obj:set_rotation({x = pitch, y = yaw, z=0})
if not texture then
obj:set_properties({
mesh = def.entity_info.mesh,
visual_size = text_scale,
})
else
obj:set_properties({
mesh = def.entity_info.mesh,
visual_size = text_scale,
textures={texture},
})
end
end end
end end
-- rotation -- rotation
function signs_lib.wallmounted_rotate(pos, node, user, mode) function signs_lib.handle_rotation(pos, node, user, mode)
if not signs_lib.can_modify(pos, user) then return false end if not signs_lib.can_modify(pos, user)
or mode ~= screwdriver.ROTATE_FACE then
if mode ~= screwdriver.ROTATE_FACE or string.match(node.name, "_onpole") then
return false return false
end end
local newparam2
local tpos = pos
local def = minetest.registered_items[node.name]
local newparam2 = signs_lib.rotate_walldir[node.param2] or 0 if string.match(node.name, "_onpole") then
if not string.match(node.name, "_horiz") then
newparam2 = signs_lib.rotate_walldir_simple[node.param2] or 4
local t = signs_lib.wall_fdir_to_back_left
minetest.swap_node(pos, { name = node.name, param2 = newparam2 }) if def.paramtype2 ~= "wallmounted" then
signs_lib.delete_objects(pos) newparam2 = signs_lib.rotate_facedir_simple[node.param2] or 0
signs_lib.update_sign(pos) t = signs_lib.fdir_to_back_left
return true end
end
function signs_lib.facedir_rotate(pos, node, user, mode) tpos = {
if not signs_lib.can_modify(pos, user) then return false end x = pos.x + t[node.param2][1],
y = pos.y,
z = pos.z + t[node.param2][2]
}
else
-- flip the sign to the other side of the horizontal pole
newparam2 = signs_lib.flip_walldir[node.param2] or 4
local t = signs_lib.wall_fdir_flip_to_back
if mode ~= screwdriver.ROTATE_FACE or string.match(node.name, "_onpole") then if def.paramtype2 ~= "wallmounted" then
return false newparam2 = signs_lib.flip_facedir[node.param2] or 0
t = signs_lib.fdir_flip_to_back
end
tpos = {
x = pos.x + t[node.param2][1],
y = pos.y,
z = pos.z + t[node.param2][2]
}
end
local node2 = minetest.get_node(tpos)
local def2 = minetest.registered_items[node2.name]
if not def2 or not def2.buildable_to then return true end -- undefined, or not buildable_to.
minetest.set_node(tpos, {name = node.name, param2 = newparam2})
minetest.get_meta(tpos):from_table(minetest.get_meta(pos):to_table())
minetest.remove_node(pos)
signs_lib.delete_objects(pos)
elseif string.match(node.name, "_hanging") or string.match(node.name, "yard") then
minetest.swap_node(tpos, { name = node.name, param2 = signs_lib.rotate_facedir_simple[node.param2] or 0 })
elseif minetest.registered_items[node.name].paramtype2 == "wallmounted" then
minetest.swap_node(tpos, { name = node.name, param2 = signs_lib.rotate_walldir[node.param2] or 0 })
else
minetest.swap_node(tpos, { name = node.name, param2 = signs_lib.rotate_facedir[node.param2] or 0 })
end end
local newparam2 = signs_lib.rotate_facedir[node.param2] or 0 signs_lib.delete_objects(tpos)
signs_lib.update_sign(tpos)
minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
signs_lib.delete_objects(pos)
signs_lib.update_sign(pos)
return true return true
end end
@ -418,24 +546,31 @@ end
local function make_sign_texture(lines, pos) local function make_sign_texture(lines, pos)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local def = minetest.registered_items[node.name] local def = minetest.registered_items[node.name]
if not def then return end if not def or not def.entity_info then return end
local font_size local font_size
local line_width local line_width
local line_height local line_height
local char_width local char_width
local colorbgw local colorbgw
local widemult = 1
if meta:get_int("widefont") == 1 then
widemult = 0.5
end
if def.font_size and def.font_size == 31 then if def.font_size and def.font_size == 31 then
font_size = 31 font_size = 31
line_width = math.floor(signs_lib.avgwidth31 * def.chars_per_line) * def.horiz_scaling line_width = math.floor(signs_lib.avgwidth31 * def.chars_per_line) * (def.horiz_scaling * widemult)
line_height = signs_lib.lineheight31 line_height = signs_lib.lineheight31
char_width = signs_lib.charwidth31 char_width = signs_lib.charwidth31
colorbgw = signs_lib.colorbgw31 colorbgw = signs_lib.colorbgw31
else else
font_size = 15 font_size = 15
line_width = math.floor(signs_lib.avgwidth15 * def.chars_per_line) * def.horiz_scaling line_width = math.floor(signs_lib.avgwidth15 * def.chars_per_line) * (def.horiz_scaling * widemult)
line_height = signs_lib.lineheight15 line_height = signs_lib.lineheight15
char_width = signs_lib.charwidth15 char_width = signs_lib.charwidth15
colorbgw = signs_lib.colorbgw15 colorbgw = signs_lib.colorbgw15
@ -457,7 +592,7 @@ end
function signs_lib.split_lines_and_words(text) function signs_lib.split_lines_and_words(text)
if not text then return end if not text then return end
local lines = { } local lines = { }
for _, line in ipairs(text:split("\n")) do for _, line in ipairs(text:split("\n", true)) do
table.insert(lines, line:split(" ")) table.insert(lines, line:split(" "))
end end
return lines return lines
@ -471,27 +606,17 @@ function signs_lib.set_obj_text(pos, text)
signs_lib.spawn_entity(pos, make_sign_texture(split(text_ansi), pos)) signs_lib.spawn_entity(pos, make_sign_texture(split(text_ansi), pos))
end end
local function make_widefont_nodename(name)
if string.find(name, "_widefont") then return name end
if string.find(name, "_onpole") then
return string.gsub(name, "_onpole", "_widefont_onpole")
elseif string.find(name, "_hanging") then
return string.gsub(name, "_hanging", "_widefont_hanging")
else
return name.."_widefont"
end
end
function signs_lib.construct_sign(pos) function signs_lib.construct_sign(pos)
local form = "size[6,4]".. local form = "size[6,4]"..
"textarea[0,-0.3;6.5,3;text;;${text}]".. "textarea[0,-0.3;6.5,3;text;;${text}]"..
"background[-0.5,-0.5;7,5;signs_lib_sign_bg.jpg]" "background[-0.5,-0.5;7,5;signs_lib_sign_bg.jpg]"
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local wname = make_widefont_nodename(node.name) local def = minetest.registered_items[node.name]
local meta = minetest.get_meta(pos)
if minetest.registered_items[wname] then if def.allow_widefont then
local state = "off" local state = "off"
if string.find(node.name, "widefont") then state = "on" end if meta:get_int("widefont") == 1 then state = "on" end
form = form.."label[1,3.4;Use wide font]".. form = form.."label[1,3.4;Use wide font]"..
"image_button[1.1,3.7;1,0.6;signs_lib_switch_".. "image_button[1.1,3.7;1,0.6;signs_lib_switch_"..
state..".png;".. state..".png;"..
@ -501,7 +626,6 @@ function signs_lib.construct_sign(pos)
form = form.."button_exit[2,3.4;2,1;ok;"..S("Write").."]" form = form.."button_exit[2,3.4;2,1;ok;"..S("Write").."]"
end end
local meta = minetest.get_meta(pos)
meta:set_string("formspec", form) meta:set_string("formspec", form)
local i = meta:get_string("infotext") local i = meta:get_string("infotext")
if i == "" then -- it wasn't even set, so set it. if i == "" then -- it wasn't even set, so set it.
@ -551,21 +675,22 @@ function signs_lib.receive_fields(pos, formname, fields, sender)
signs_lib.update_sign(pos, fields) signs_lib.update_sign(pos, fields)
elseif fields.on or fields.off then elseif fields.on or fields.off then
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local newname local meta = minetest.get_meta(pos)
local change
if fields.on and string.find(node.name, "widefont") then if fields.on and meta:get_int("widefont") == 1 then
newname = string.gsub(node.name, "_widefont", "") meta:set_int("widefont", 0)
elseif fields.off and not string.find(node.name, "widefont") then change = true
newname = make_widefont_nodename(node.name) elseif fields.off and meta:get_int("widefont") == 0 then
meta:set_int("widefont", 1)
change = true
end end
if newname then if change then
minetest.log("action", S("@1 flipped the wide-font switch to \"@2\" at @3", minetest.log("action", S("@1 flipped the wide-font switch to \"@2\" at @3",
(sender:get_player_name() or ""), (sender:get_player_name() or ""),
(fields.on and "off" or "on"), (fields.on and "off" or "on"),
minetest.pos_to_string(pos) minetest.pos_to_string(pos)
)) ))
minetest.swap_node(pos, {name = newname, param2 = node.param2})
signs_lib.construct_sign(pos) signs_lib.construct_sign(pos)
signs_lib.update_sign(pos, fields) signs_lib.update_sign(pos, fields)
end end
@ -623,17 +748,32 @@ function signs_lib.check_for_pole(pos, 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
or string.find(pnode.name, "_post") local node = minetest.get_node(pos)
or string.find(pnode.name, "fencepost") local def = minetest.registered_items[node.name]
or string.find(pnode.name, "streets:streetlamp_basic_top") return pdef.check_for_pole(pos, node, def, ppos, pnode, pdef)
or (pnode.name == "streets:bigpole" and pnode.param2 < 4) elseif pdef.check_for_pole
or (pnode.name == "streets:bigpole" and pnode.param2 > 19 and pnode.param2 < 24) or pdef.drawtype == "fencelike"
) or string.find(pnode.name, "_post")
and or string.find(pnode.name, "fencepost") then
(pos.x ~= ppos.x or pos.z ~= ppos.z) then return true
end
end
function signs_lib.check_for_horizontal_pole(pos, pointed_thing)
local ppos = minetest.get_pointed_thing_position(pointed_thing)
local pnode = minetest.get_node(ppos)
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 return true
end end
end end
@ -646,6 +786,14 @@ function signs_lib.check_for_ceiling(pointed_thing)
end end
end end
function signs_lib.check_for_floor(pointed_thing)
if pointed_thing.above.x == pointed_thing.under.x
and pointed_thing.above.z == pointed_thing.under.z
and pointed_thing.above.y > pointed_thing.under.y then
return true
end
end
function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locked) function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locked)
local playername = placer:get_player_name() local playername = placer:get_player_name()
local def = minetest.registered_items[itemstack:get_name()] local def = minetest.registered_items[itemstack:get_name()]
@ -653,14 +801,34 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
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 def.allow_onpole and signs_lib.check_for_pole(pos, pointed_thing) then
if (def.allow_onpole ~= false) and signs_lib.check_for_pole(pos, pointed_thing) then local newparam2
local lookdir = minetest.yaw_to_dir(placer:get_look_horizontal())
if def.paramtype2 == "wallmounted" then
newparam2 = minetest.dir_to_wallmounted(lookdir)
else
newparam2 = minetest.dir_to_facedir(lookdir)
end
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
minetest.swap_node(pos, {name = itemstack:get_name().."_onpole", param2 = node.param2}) minetest.swap_node(pos, {name = itemstack:get_name().."_onpole", param2 = newparam2})
elseif def.allow_onpole_horizontal and signs_lib.check_for_horizontal_pole(pos, pointed_thing) then
local newparam2
local lookdir = minetest.yaw_to_dir(placer:get_look_horizontal())
if def.paramtype2 == "wallmounted" then
newparam2 = minetest.dir_to_wallmounted(lookdir)
else
newparam2 = minetest.dir_to_facedir(lookdir)
end
local node = minetest.get_node(pos)
minetest.swap_node(pos, {name = itemstack:get_name().."_onpole_horiz", param2 = newparam2})
elseif def.allow_hanging and signs_lib.check_for_ceiling(pointed_thing) then elseif def.allow_hanging and signs_lib.check_for_ceiling(pointed_thing) then
local newparam2 = minetest.dir_to_facedir(placer:get_look_dir()) local newparam2 = minetest.dir_to_facedir(placer:get_look_dir())
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
minetest.swap_node(pos, {name = itemstack:get_name().."_hanging", param2 = newparam2}) minetest.swap_node(pos, {name = itemstack:get_name().."_hanging", param2 = newparam2})
elseif def.paramtype2 == "facedir" and signs_lib.check_for_ceiling(pointed_thing) then
minetest.swap_node(pos, {name = itemstack:get_name(), param2 = 6})
elseif def.paramtype2 == "facedir" and signs_lib.check_for_floor(pointed_thing) then
minetest.swap_node(pos, {name = itemstack:get_name(), param2 = 4})
end end
if locked then if locked then
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
@ -673,7 +841,53 @@ function signs_lib.register_fence_with_sign()
minetest.log("warning", "[signs_lib] ".."Attempt to call no longer used function signs_lib.register_fence_with_sign()") minetest.log("warning", "[signs_lib] ".."Attempt to call no longer used function signs_lib.register_fence_with_sign()")
end end
local function register_sign(name, rdef) --[[
The main sign registration function
===================================
Example minimal recommended def for writable signs:
signs_lib.register_sign("foo:my_cool_sign", {
description = "Wooden cool sign",
inventory_image = "signs_lib_sign_cool_inv.png",
tiles = {
"signs_lib_sign_cool.png",
"signs_lib_sign_cool_edges.png"
},
number_of_lines = 2,
horiz_scaling = 0.8,
vert_scaling = 1,
line_spacing = 9,
font_size = 31,
x_offset = 7,
y_offset = 4,
chars_per_line = 40,
entity_info = "standard"
})
* default def assumes a wallmounted sign with on-pole being allowed.
*For signs that can support being on a pole, include in the def:
allow_onpole = true,
(defaults to disabled)
*For signs that can support being on a horizontal pole, include in the def:
allow_onpole_horizontal = true,
(defaults to disabled)
* onpole/onpole_horizontal are independent; one may be allowed without the other
* "standard" entity info implies the standard wood/steel sign model, in
wallmounted mode. For facedir signs using the standard model, use:
entity_info = {
mesh = "signs_lib_standard_wall_sign_entity.obj",
yaw = signs_lib.standard_yaw
},
]]--
function signs_lib.register_sign(name, rdef)
local def = table.copy(rdef) local def = table.copy(rdef)
if rdef.entity_info == "standard" then if rdef.entity_info == "standard" then
@ -715,16 +929,8 @@ local function register_sign(name, rdef)
def.wield_image = rdef.wield_image or def.inventory_image def.wield_image = rdef.wield_image or def.inventory_image
def.drop = rdef.drop or name def.drop = rdef.drop or name
def.sounds = rdef.sounds or signs_lib.standard_wood_sign_sounds def.sounds = rdef.sounds or signs_lib.standard_wood_sign_sounds
def.on_rotate = rdef.on_rotate or signs_lib.wallmounted_rotate
def.paramtype2 = rdef.paramtype2 or "wallmounted" def.paramtype2 = rdef.paramtype2 or "wallmounted"
def.on_rotate = rdef.on_rotate or signs_lib.handle_rotation
if rdef.on_rotate then
def.on_rotate = rdef.on_rotate
elseif rdef.drawtype == "wallmounted" then
def.on_rotate = signs_lib.wallmounted_rotate
else
def.on_rotate = signs_lib.facedir_rotate
end
if rdef.groups then if rdef.groups then
def.groups = rdef.groups def.groups = rdef.groups
@ -732,7 +938,7 @@ local function register_sign(name, rdef)
def.groups = signs_lib.standard_wood_groups def.groups = signs_lib.standard_wood_groups
end end
local cbox = signs_lib.make_selection_boxes(35, 25, allow_onpole) local cbox = signs_lib.make_selection_boxes(35, 25)
def.selection_box = rdef.selection_box or cbox def.selection_box = rdef.selection_box or cbox
def.node_box = table.copy(rdef.node_box or rdef.selection_box or cbox) def.node_box = table.copy(rdef.node_box or rdef.selection_box or cbox)
@ -744,9 +950,9 @@ local function register_sign(name, rdef)
minetest.register_node(":"..name, def) minetest.register_node(":"..name, def)
table.insert(signs_lib.lbm_restore_nodes, name) table.insert(signs_lib.lbm_restore_nodes, name)
if rdef.allow_onpole ~= false then local opdef = table.copy(def)
local opdef = table.copy(def) if rdef.allow_onpole or rdef.allow_onpole_horizontal then
local offset = 0.3125 local offset = 0.3125
if opdef.uses_slim_pole_mount then if opdef.uses_slim_pole_mount then
@ -771,24 +977,38 @@ local function register_sign(name, rdef)
end end
opdef.groups.not_in_creative_inventory = 1 opdef.groups.not_in_creative_inventory = 1
opdef.tiles[3] = "signs_lib_pole_mount.png"
opdef.mesh = string.gsub(opdef.mesh, ".obj$", "_onpole.obj") opdef.mesh = string.gsub(opdef.mesh, ".obj$", "_onpole.obj")
opdef.on_rotate = nil
if opdef.entity_info then if opdef.entity_info then
opdef.entity_info.mesh = string.gsub(opdef.entity_info.mesh, ".obj$", "_onpole.obj") opdef.entity_info.mesh = string.gsub(opdef.entity_info.mesh, ".obj$", "_onpole.obj")
end end
end
-- setting one of item 3 or 4 to a texture and leaving the other "blank",
-- reveals either the vertical or horizontal pole mount part of the model
if rdef.allow_onpole then
opdef.tiles[3] = "signs_lib_pole_mount.png"
opdef.tiles[4] = "signs_lib_blank.png"
minetest.register_node(":"..name.."_onpole", opdef) minetest.register_node(":"..name.."_onpole", opdef)
table.insert(signs_lib.lbm_restore_nodes, name.."_onpole") table.insert(signs_lib.lbm_restore_nodes, name.."_onpole")
end end
local ophdef = table.copy(opdef)
if rdef.allow_onpole_horizontal then
ophdef.tiles[3] = "signs_lib_blank.png"
ophdef.tiles[4] = "signs_lib_pole_mount.png"
minetest.register_node(":"..name.."_onpole_horiz", ophdef)
table.insert(signs_lib.lbm_restore_nodes, name.."_onpole_horiz")
end
if rdef.allow_hanging then if rdef.allow_hanging then
local hdef = table.copy(def) local hdef = table.copy(def)
hdef.paramtype2 = "facedir" hdef.paramtype2 = "facedir"
local hcbox = signs_lib.make_selection_boxes(35, 32, false, 0, 3, -18.5, true) local hcbox = signs_lib.make_selection_boxes(35, 32, nil, 0, 3, -18.5, true)
hdef.selection_box = rdef.hanging_selection_box or hcbox hdef.selection_box = rdef.hanging_selection_box or hcbox
hdef.node_box = rdef.hanging_node_box or rdef.hanging_selection_box or hcbox hdef.node_box = rdef.hanging_node_box or rdef.hanging_selection_box or hcbox
@ -796,7 +1016,6 @@ local function register_sign(name, rdef)
hdef.groups.not_in_creative_inventory = 1 hdef.groups.not_in_creative_inventory = 1
hdef.tiles[3] = "signs_lib_hangers.png" hdef.tiles[3] = "signs_lib_hangers.png"
hdef.mesh = string.gsub(string.gsub(hdef.mesh, "_facedir.obj", ".obj"), ".obj$", "_hanging.obj") hdef.mesh = string.gsub(string.gsub(hdef.mesh, "_facedir.obj", ".obj"), ".obj$", "_hanging.obj")
hdef.on_rotate = nil
if hdef.entity_info then if hdef.entity_info then
hdef.entity_info.mesh = string.gsub(string.gsub(hdef.entity_info.mesh, "_facedir.obj", ".obj"), ".obj$", "_hanging.obj") hdef.entity_info.mesh = string.gsub(string.gsub(hdef.entity_info.mesh, "_facedir.obj", ".obj"), ".obj$", "_hanging.obj")
@ -806,57 +1025,9 @@ local function register_sign(name, rdef)
minetest.register_node(":"..name.."_hanging", hdef) minetest.register_node(":"..name.."_hanging", hdef)
table.insert(signs_lib.lbm_restore_nodes, name.."_hanging") table.insert(signs_lib.lbm_restore_nodes, name.."_hanging")
end end
end
--[[
The main sign registration function
===================================
Example minimal recommended def for writable signs:
signs_lib.register_sign("foo:my_cool_sign", {
description = "Wooden cool sign",
inventory_image = "signs_lib_sign_cool_inv.png",
tiles = {
"signs_lib_sign_cool.png",
"signs_lib_sign_cool_edges.png"
},
number_of_lines = 2,
horiz_scaling = 0.8,
vert_scaling = 1,
line_spacing = 9,
font_size = 31,
x_offset = 7,
y_offset = 4,
chars_per_line = 40,
entity_info = "standard"
})
* default def assumes a wallmounted sign with on-pole being allowed.
*For signs that can't support onpole, include in the def:
allow_onpole = false,
* "standard" entity info implies the standard wood/steel sign model, in
wallmounted mode. For facedir signs using the standard model, use:
entity_info = {
mesh = "signs_lib_standard_wall_sign_entity.obj",
yaw = signs_lib.standard_yaw
},
]]--
function signs_lib.register_sign(name, rdef)
register_sign(name, rdef)
if rdef.allow_widefont then if rdef.allow_widefont then
table.insert(signs_lib.old_widefont_signs, name.."_widefont")
wdef = table.copy(minetest.registered_items[name])
wdef.groups.not_in_creative_inventory = 1
wdef.horiz_scaling = wdef.horiz_scaling / 2
register_sign(name.."_widefont", wdef)
end end
end end
@ -906,8 +1077,22 @@ minetest.register_lbm({
end end
}) })
signs_lib.block_list = {} -- Convert widefont sign nodes to use one base node with meta flag to select wide mode
signs_lib.totalblocks = 0
minetest.register_lbm({
nodenames = signs_lib.old_widefont_signs,
name = "signs_lib:convert_widefont_signs",
label = "Convert widefont sign nodes",
run_at_every_load = false,
action = function(pos, node)
local basename = string.gsub(node.name, "_widefont", "")
minetest.swap_node(pos, {name = basename, param2 = node.param2})
local meta = minetest.get_meta(pos)
meta:set_int("widefont", 1)
signs_lib.delete_objects(pos)
signs_lib.update_sign(pos)
end
})
-- Maintain a list of currently-loaded blocks -- Maintain a list of currently-loaded blocks
minetest.register_lbm({ minetest.register_lbm({

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

View File

@ -73,6 +73,62 @@ v -0.164063 0.125000 1.125000
v 0.164062 0.125000 1.125000 v 0.164062 0.125000 1.125000
v -0.164063 0.187500 1.125000 v -0.164063 0.187500 1.125000
v 0.164062 0.187500 1.125000 v 0.164062 0.187500 1.125000
v 0.187500 -0.125000 0.812500
v 0.187500 -0.125000 0.875000
v -0.187500 -0.125000 0.812500
v -0.187500 -0.125000 0.875000
v -0.187500 0.125000 0.812500
v 0.187500 0.125000 0.812500
v 0.187500 0.125000 0.875000
v -0.187500 0.125000 0.875000
v 0.187500 -0.125000 1.125000
v 0.187500 -0.125000 0.812500
v 0.125000 -0.125000 1.125000
v 0.125000 -0.125000 0.812500
v 0.187500 -0.164063 1.125000
v 0.187500 -0.164063 0.812500
v 0.125000 -0.164063 1.125000
v 0.125000 -0.164063 0.812500
v -0.125000 -0.125000 1.125000
v -0.125000 -0.125000 0.812500
v -0.187500 -0.125000 1.125000
v -0.187500 -0.125000 0.812500
v -0.125000 -0.164063 1.125000
v -0.125000 -0.164063 0.812500
v -0.187500 -0.164063 1.125000
v -0.187500 -0.164063 0.812500
v 0.187500 0.164062 1.125000
v 0.187500 0.164062 0.812500
v 0.125000 0.164062 1.125000
v 0.125000 0.164062 0.812500
v 0.187500 0.125000 1.125000
v 0.187500 0.125000 0.812500
v 0.125000 0.125000 1.125000
v 0.125000 0.125000 0.812500
v -0.125000 0.164062 1.125000
v -0.125000 0.164062 0.812500
v -0.187500 0.164062 1.125000
v -0.187500 0.164062 0.812500
v -0.125000 0.125000 1.125000
v -0.125000 0.125000 0.812500
v -0.187500 0.125000 1.125000
v -0.187500 0.125000 0.812500
v 0.187500 -0.164063 1.164063
v 0.187500 0.164062 1.164063
v 0.125000 -0.164063 1.164063
v 0.125000 0.164062 1.164063
v 0.187500 -0.164063 1.125000
v 0.187500 0.164062 1.125000
v 0.125000 -0.164063 1.125000
v 0.125000 0.164062 1.125000
v -0.125000 -0.164063 1.164063
v -0.125000 0.164062 1.164063
v -0.187500 -0.164063 1.164063
v -0.187500 0.164062 1.164063
v -0.125000 -0.164063 1.125000
v -0.125000 0.164062 1.125000
v -0.187500 -0.164063 1.125000
v -0.187500 0.164062 1.125000
vt 0.468750 0.812500 vt 0.468750 0.812500
vt 0.031250 0.812500 vt 0.031250 0.812500
vt 0.031250 0.187500 vt 0.031250 0.187500
@ -195,6 +251,110 @@ vt 0.453125 0.640625
vt 0.453125 0.593750 vt 0.453125 0.593750
vt 0.312500 0.593750 vt 0.312500 0.593750
vt 0.312500 0.640625 vt 0.312500 0.640625
vt 0.843750 0.507812
vt 0.703125 0.507812
vt 0.703125 0.093750
vt 0.843750 0.093750
vt 0.015625 0.507812
vt 0.015625 0.093750
vt 0.156250 0.093750
vt 0.156250 0.507812
vt 0.156250 0.031250
vt 0.703125 0.031250
vt 0.703125 0.578125
vt 0.156250 0.578125
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.781250 0.664062
vt 0.781250 0.992188
vt 0.921875 0.992188
vt 0.921875 0.664062
vt 0.484375 0.664062
vt 0.484375 0.992188
vt 0.562500 0.992188
vt 0.562500 0.664062
vt 0.703125 0.992188
vt 0.703125 0.664062
vt 0.234375 0.593750
vt 0.234375 0.640625
vt 0.093750 0.640625
vt 0.093750 0.593750
vt 0.453125 0.640625
vt 0.453125 0.593750
vt 0.312500 0.593750
vt 0.312500 0.640625
vt 0.781250 0.664062
vt 0.781250 0.992188
vt 0.921875 0.992188
vt 0.921875 0.664062
vt 0.484375 0.664062
vt 0.484375 0.992188
vt 0.562500 0.992188
vt 0.562500 0.664062
vt 0.703125 0.992188
vt 0.703125 0.664062
vt 0.234375 0.593750
vt 0.234375 0.640625
vt 0.093750 0.640625
vt 0.093750 0.593750
vt 0.453125 0.640625
vt 0.453125 0.593750
vt 0.312500 0.593750
vt 0.312500 0.640625
vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000 vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000 vn 0.0000 -1.0000 0.0000
@ -244,3 +404,37 @@ f 71/112/1 72/111/1 70/113/1 69/114/1
f 69/114/3 70/113/3 66/106/3 65/105/3 f 69/114/3 70/113/3 66/106/3 65/105/3
f 67/115/6 71/116/6 69/117/6 65/118/6 f 67/115/6 71/116/6 69/117/6 65/118/6
f 72/119/5 68/120/5 66/121/5 70/122/5 f 72/119/5 68/120/5 66/121/5 70/122/5
g sign_on_pole.001_Cube.002_pole_mount_horizontal
f 73/123/3 74/124/3 76/125/3 75/126/3
f 78/127/4 77/128/4 80/129/4 79/130/4
f 76/125/6 80/129/6 77/131/6 75/132/6
f 73/133/5 78/134/5 79/130/5 74/124/5
f 74/124/2 79/130/2 80/129/2 76/125/2
f 81/135/4 82/136/4 84/137/4 83/138/4
f 83/139/6 84/140/6 88/141/6 87/142/6
f 87/143/3 88/144/3 86/145/3 85/146/3
f 85/146/5 86/145/5 82/147/5 81/148/5
f 89/149/4 90/150/4 92/151/4 91/152/4
f 91/153/6 92/154/6 96/155/6 95/156/6
f 95/157/3 96/158/3 94/159/3 93/160/3
f 93/160/5 94/159/5 90/161/5 89/162/5
f 97/163/4 98/164/4 100/165/4 99/166/4
f 99/167/6 100/168/6 104/169/6 103/170/6
f 103/171/3 104/172/3 102/173/3 101/174/3
f 101/174/5 102/173/5 98/175/5 97/176/5
f 105/177/4 106/178/4 108/179/4 107/180/4
f 107/181/6 108/182/6 112/183/6 111/184/6
f 111/185/3 112/186/3 110/187/3 109/188/3
f 109/188/5 110/187/5 106/189/5 105/190/5
f 113/191/2 114/192/2 116/193/2 115/194/2
f 115/195/6 116/196/6 120/197/6 119/198/6
f 119/198/1 120/197/1 118/199/1 117/200/1
f 117/200/5 118/199/5 114/192/5 113/191/5
f 115/201/3 119/202/3 117/203/3 113/204/3
f 120/205/4 116/206/4 114/207/4 118/208/4
f 121/209/2 122/210/2 124/211/2 123/212/2
f 123/213/6 124/214/6 128/215/6 127/216/6
f 127/216/1 128/215/1 126/217/1 125/218/1
f 125/218/5 126/217/5 122/210/5 121/209/5
f 123/219/3 127/220/3 125/221/3 121/222/3
f 128/223/4 124/224/4 122/225/4 126/226/4

View File

@ -1,6 +1,6 @@
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden wall sign.blend' # Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden sign.blend'
# www.blender.org # www.blender.org
o Cube.003_Cube o sign_on_pole_Cube.002
v 0.437500 -0.812500 -0.312500 v 0.437500 -0.812500 -0.312500
v 0.437500 -0.750000 -0.312500 v 0.437500 -0.750000 -0.312500
v 0.437500 -0.812500 0.312500 v 0.437500 -0.812500 0.312500
@ -17,40 +17,6 @@ v -0.437500 -0.812500 -0.312500
v -0.437500 -0.750000 -0.312500 v -0.437500 -0.750000 -0.312500
v -0.437500 -0.812500 0.312500 v -0.437500 -0.812500 0.312500
v -0.437500 -0.750000 0.312500 v -0.437500 -0.750000 0.312500
vt 0.468750 0.812500
vt 0.031250 0.812500
vt 0.031250 0.187500
vt 0.468750 0.187500
vt 0.531250 0.812500
vt 0.968750 0.812500
vt 0.968750 0.187500
vt 0.531250 0.187500
vt 0.234375 0.000000
vt 0.234375 1.000000
vt 0.015625 1.000000
vt 0.015625 -0.000000
vt 0.609375 -0.000000
vt 0.609375 1.000000
vt 0.390625 1.000000
vt 0.390625 -0.000000
vt 0.765625 0.000000
vt 0.765625 1.000000
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
g Cube.003_Cube_front-back
s off
f 8/1/1 4/2/1 2/3/1 6/4/1
f 3/5/2 7/6/2 5/7/2 1/8/2
g Cube.003_Cube_edges
f 13/9/3 14/10/3 10/11/3 9/12/3
f 11/13/4 12/14/4 16/15/4 15/16/4
f 11/13/5 9/17/5 10/18/5 12/14/5
f 13/9/6 15/16/6 16/15/6 14/10/6
o Cube.001
v -0.125000 -0.812500 -0.187500 v -0.125000 -0.812500 -0.187500
v -0.125000 -0.875000 -0.187500 v -0.125000 -0.875000 -0.187500
v -0.125000 -0.812500 0.187500 v -0.125000 -0.812500 0.187500
@ -107,6 +73,184 @@ v -0.164063 -1.125000 0.125000
v 0.164062 -1.125000 0.125000 v 0.164062 -1.125000 0.125000
v -0.164063 -1.125000 0.187500 v -0.164063 -1.125000 0.187500
v 0.164062 -1.125000 0.187500 v 0.164062 -1.125000 0.187500
v 0.187500 -0.812500 -0.125000
v 0.187500 -0.875000 -0.125000
v -0.187500 -0.812500 -0.125000
v -0.187500 -0.875000 -0.125000
v -0.187500 -0.812500 0.125000
v 0.187500 -0.812500 0.125000
v 0.187500 -0.875000 0.125000
v -0.187500 -0.875000 0.125000
v 0.187500 -1.125000 -0.125000
v 0.187500 -0.812500 -0.125000
v 0.125000 -1.125000 -0.125000
v 0.125000 -0.812500 -0.125000
v 0.187500 -1.125000 -0.164063
v 0.187500 -0.812500 -0.164063
v 0.125000 -1.125000 -0.164063
v 0.125000 -0.812500 -0.164063
v -0.125000 -1.125000 -0.125000
v -0.125000 -0.812500 -0.125000
v -0.187500 -1.125000 -0.125000
v -0.187500 -0.812500 -0.125000
v -0.125000 -1.125000 -0.164063
v -0.125000 -0.812500 -0.164063
v -0.187500 -1.125000 -0.164063
v -0.187500 -0.812500 -0.164063
v 0.187500 -1.125000 0.164062
v 0.187500 -0.812500 0.164062
v 0.125000 -1.125000 0.164062
v 0.125000 -0.812500 0.164062
v 0.187500 -1.125000 0.125000
v 0.187500 -0.812500 0.125000
v 0.125000 -1.125000 0.125000
v 0.125000 -0.812500 0.125000
v -0.125000 -1.125000 0.164062
v -0.125000 -0.812500 0.164062
v -0.187500 -1.125000 0.164062
v -0.187500 -0.812500 0.164062
v -0.125000 -1.125000 0.125000
v -0.125000 -0.812500 0.125000
v -0.187500 -1.125000 0.125000
v -0.187500 -0.812500 0.125000
v 0.187500 -1.164063 -0.164063
v 0.187500 -1.164063 0.164062
v 0.125000 -1.164063 -0.164063
v 0.125000 -1.164063 0.164062
v 0.187500 -1.125000 -0.164063
v 0.187500 -1.125000 0.164062
v 0.125000 -1.125000 -0.164063
v 0.125000 -1.125000 0.164062
v -0.125000 -1.164063 -0.164063
v -0.125000 -1.164063 0.164062
v -0.187500 -1.164063 -0.164063
v -0.187500 -1.164063 0.164062
v -0.125000 -1.125000 -0.164063
v -0.125000 -1.125000 0.164062
v -0.187500 -1.125000 -0.164063
v -0.187500 -1.125000 0.164062
vt 0.468750 0.812500
vt 0.031250 0.812500
vt 0.031250 0.187500
vt 0.468750 0.187500
vt 0.531250 0.812500
vt 0.968750 0.812500
vt 0.968750 0.187500
vt 0.531250 0.187500
vt 0.234375 0.000000
vt 0.234375 1.000000
vt 0.015625 1.000000
vt 0.015625 -0.000000
vt 0.609375 -0.000000
vt 0.609375 1.000000
vt 0.390625 1.000000
vt 0.390625 -0.000000
vt 0.765625 0.000000
vt 0.765625 1.000000
vt 0.843750 0.507812
vt 0.703125 0.507812
vt 0.703125 0.093750
vt 0.843750 0.093750
vt 0.015625 0.507812
vt 0.015625 0.093750
vt 0.156250 0.093750
vt 0.156250 0.507812
vt 0.156250 0.031250
vt 0.703125 0.031250
vt 0.703125 0.578125
vt 0.156250 0.578125
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.312500 0.640625
vt 0.312500 0.992188
vt 0.453125 0.992188
vt 0.453125 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.312500 0.992188
vt 0.312500 0.640625
vt 0.234375 0.640625
vt 0.234375 0.992188
vt 0.093750 0.992188
vt 0.093750 0.640625
vt 0.015625 0.992188
vt 0.015625 0.640625
vt 0.781250 0.664062
vt 0.781250 0.992188
vt 0.921875 0.992188
vt 0.921875 0.664062
vt 0.484375 0.664062
vt 0.484375 0.992188
vt 0.562500 0.992188
vt 0.562500 0.664062
vt 0.703125 0.992188
vt 0.703125 0.664062
vt 0.234375 0.593750
vt 0.234375 0.640625
vt 0.093750 0.640625
vt 0.093750 0.593750
vt 0.453125 0.640625
vt 0.453125 0.593750
vt 0.312500 0.593750
vt 0.312500 0.640625
vt 0.781250 0.664062
vt 0.781250 0.992188
vt 0.921875 0.992188
vt 0.921875 0.664062
vt 0.484375 0.664062
vt 0.484375 0.992188
vt 0.562500 0.992188
vt 0.562500 0.664062
vt 0.703125 0.992188
vt 0.703125 0.664062
vt 0.234375 0.593750
vt 0.234375 0.640625
vt 0.093750 0.640625
vt 0.093750 0.593750
vt 0.453125 0.640625
vt 0.453125 0.593750
vt 0.312500 0.593750
vt 0.312500 0.640625
vt 0.843750 0.507812 vt 0.843750 0.507812
vt 0.703125 0.507812 vt 0.703125 0.507812
vt 0.703125 0.093750 vt 0.703125 0.093750
@ -211,44 +355,86 @@ vt 0.453125 0.640625
vt 0.453125 0.593750 vt 0.453125 0.593750
vt 0.312500 0.593750 vt 0.312500 0.593750
vt 0.312500 0.640625 vt 0.312500 0.640625
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 0.0000 vn 0.0000 1.0000 0.0000
g Cube.001_Cube.001_pole_mount vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
g sign_on_pole_Cube.002_front-back
s off s off
f 17/19/7 18/20/7 20/21/7 19/22/7 f 8/1/1 4/2/1 2/3/1 6/4/1
f 22/23/8 21/24/8 24/25/8 23/26/8 f 3/5/2 7/6/2 5/7/2 1/8/2
f 20/21/9 24/25/9 21/27/9 19/28/9 g sign_on_pole_Cube.002_edges
f 17/29/10 22/30/10 23/26/10 18/20/10 f 13/9/3 14/10/3 10/11/3 9/12/3
f 18/20/11 23/26/11 24/25/11 20/21/11 f 11/13/4 12/14/4 16/15/4 15/16/4
f 25/31/8 26/32/8 28/33/8 27/34/8 f 11/13/5 9/17/5 10/18/5 12/14/5
f 27/35/9 28/36/9 32/37/9 31/38/9 f 13/9/6 15/16/6 16/15/6 14/10/6
f 31/39/7 32/40/7 30/41/7 29/42/7 g sign_on_pole_Cube.002_pole_mount
f 29/42/10 30/41/10 26/43/10 25/44/10 f 17/19/6 18/20/6 20/21/6 19/22/6
f 33/45/8 34/46/8 36/47/8 35/48/8 f 22/23/5 21/24/5 24/25/5 23/26/5
f 35/49/9 36/50/9 40/51/9 39/52/9 f 20/21/4 24/25/4 21/27/4 19/28/4
f 39/53/7 40/54/7 38/55/7 37/56/7 f 17/29/3 22/30/3 23/26/3 18/20/3
f 37/56/10 38/55/10 34/57/10 33/58/10 f 18/20/2 23/26/2 24/25/2 20/21/2
f 41/59/8 42/60/8 44/61/8 43/62/8 f 25/31/5 26/32/5 28/33/5 27/34/5
f 43/63/9 44/64/9 48/65/9 47/66/9 f 27/35/4 28/36/4 32/37/4 31/38/4
f 47/67/7 48/68/7 46/69/7 45/70/7 f 31/39/6 32/40/6 30/41/6 29/42/6
f 45/70/10 46/69/10 42/71/10 41/72/10 f 29/42/3 30/41/3 26/43/3 25/44/3
f 49/73/8 50/74/8 52/75/8 51/76/8 f 33/45/5 34/46/5 36/47/5 35/48/5
f 51/77/9 52/78/9 56/79/9 55/80/9 f 35/49/4 36/50/4 40/51/4 39/52/4
f 55/81/7 56/82/7 54/83/7 53/84/7 f 39/53/6 40/54/6 38/55/6 37/56/6
f 53/84/10 54/83/10 50/85/10 49/86/10 f 37/56/3 38/55/3 34/57/3 33/58/3
f 57/87/11 58/88/11 60/89/11 59/90/11 f 41/59/5 42/60/5 44/61/5 43/62/5
f 59/91/9 60/92/9 64/93/9 63/94/9 f 43/63/4 44/64/4 48/65/4 47/66/4
f 63/94/12 64/93/12 62/95/12 61/96/12 f 47/67/6 48/68/6 46/69/6 45/70/6
f 61/96/10 62/95/10 58/88/10 57/87/10 f 45/70/3 46/69/3 42/71/3 41/72/3
f 59/97/7 63/98/7 61/99/7 57/100/7 f 49/73/5 50/74/5 52/75/5 51/76/5
f 64/101/8 60/102/8 58/103/8 62/104/8 f 51/77/4 52/78/4 56/79/4 55/80/4
f 65/105/11 66/106/11 68/107/11 67/108/11 f 55/81/6 56/82/6 54/83/6 53/84/6
f 67/109/9 68/110/9 72/111/9 71/112/9 f 53/84/3 54/83/3 50/85/3 49/86/3
f 71/112/12 72/111/12 70/113/12 69/114/12 f 57/87/2 58/88/2 60/89/2 59/90/2
f 69/114/10 70/113/10 66/106/10 65/105/10 f 59/91/4 60/92/4 64/93/4 63/94/4
f 67/115/7 71/116/7 69/117/7 65/118/7 f 63/94/1 64/93/1 62/95/1 61/96/1
f 72/119/8 68/120/8 66/121/8 70/122/8 f 61/96/3 62/95/3 58/88/3 57/87/3
f 59/97/6 63/98/6 61/99/6 57/100/6
f 64/101/5 60/102/5 58/103/5 62/104/5
f 65/105/2 66/106/2 68/107/2 67/108/2
f 67/109/4 68/110/4 72/111/4 71/112/4
f 71/112/1 72/111/1 70/113/1 69/114/1
f 69/114/3 70/113/3 66/106/3 65/105/3
f 67/115/6 71/116/6 69/117/6 65/118/6
f 72/119/5 68/120/5 66/121/5 70/122/5
g sign_on_pole_Cube.002_pole_mount_horizontal
f 73/123/3 74/124/3 76/125/3 75/126/3
f 78/127/4 77/128/4 80/129/4 79/130/4
f 76/125/6 80/129/6 77/131/6 75/132/6
f 73/133/5 78/134/5 79/130/5 74/124/5
f 74/124/2 79/130/2 80/129/2 76/125/2
f 81/135/4 82/136/4 84/137/4 83/138/4
f 83/139/6 84/140/6 88/141/6 87/142/6
f 87/143/3 88/144/3 86/145/3 85/146/3
f 85/146/5 86/145/5 82/147/5 81/148/5
f 89/149/4 90/150/4 92/151/4 91/152/4
f 91/153/6 92/154/6 96/155/6 95/156/6
f 95/157/3 96/158/3 94/159/3 93/160/3
f 93/160/5 94/159/5 90/161/5 89/162/5
f 97/163/4 98/164/4 100/165/4 99/166/4
f 99/167/6 100/168/6 104/169/6 103/170/6
f 103/171/3 104/172/3 102/173/3 101/174/3
f 101/174/5 102/173/5 98/175/5 97/176/5
f 105/177/4 106/178/4 108/179/4 107/180/4
f 107/181/6 108/182/6 112/183/6 111/184/6
f 111/185/3 112/186/3 110/187/3 109/188/3
f 109/188/5 110/187/5 106/189/5 105/190/5
f 113/191/2 114/192/2 116/193/2 115/194/2
f 115/195/6 116/196/6 120/197/6 119/198/6
f 119/198/1 120/197/1 118/199/1 117/200/1
f 117/200/5 118/199/5 114/192/5 113/191/5
f 115/201/3 119/202/3 117/203/3 113/204/3
f 120/205/4 116/206/4 114/207/4 118/208/4
f 121/209/2 122/210/2 124/211/2 123/212/2
f 123/213/6 124/214/6 128/215/6 127/216/6
f 127/216/1 128/215/1 126/217/1 125/218/1
f 125/218/5 126/217/5 122/210/5 121/209/5
f 123/219/3 127/220/3 125/221/3 121/222/3
f 128/223/4 124/224/4 122/225/4 126/226/4

View File

@ -9,7 +9,9 @@ signs_lib.register_sign("default:sign_wall_wood", {
}, },
entity_info = "standard", entity_info = "standard",
allow_hanging = true, allow_hanging = true,
allow_widefont = true allow_widefont = true,
allow_onpole = true,
allow_onpole_horizontal = true
}) })
signs_lib.register_sign("default:sign_wall_steel", { signs_lib.register_sign("default:sign_wall_steel", {
@ -24,7 +26,9 @@ signs_lib.register_sign("default:sign_wall_steel", {
locked = true, locked = true,
entity_info = "standard", entity_info = "standard",
allow_hanging = true, allow_hanging = true,
allow_widefont = true allow_widefont = true,
allow_onpole = true,
allow_onpole_horizontal = true
}) })
minetest.register_alias("signs:sign_hanging", "default:sign_wall_wood_hanging") minetest.register_alias("signs:sign_hanging", "default:sign_wall_wood_hanging")

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B