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

Compare commits

...

8 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
8 changed files with 851 additions and 187 deletions

297
api.lua
View File

@ -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
@ -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.old_widefont_signs = {}
signs_lib.block_list = {}
signs_lib.totalblocks = 0
signs_lib.standard_yaw = {
0,
math.pi / -2,
@ -63,6 +67,20 @@ signs_lib.wall_fdir_to_back = {
{ 1, 0 },
}
signs_lib.fdir_flip_to_back = {
[0] = { 0, 2 },
[1] = { 2, 0 },
[2] = { 0, -2 },
[3] = { -2, 0 }
}
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 },
@ -114,6 +132,25 @@ signs_lib.rotate_facedir_simple = {
[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
local ctexcache = {}
@ -124,7 +161,8 @@ minetest.register_entity("signs_lib:text", {
visual = "mesh",
mesh = "signs_lib_standard_wall_sign_entity.obj",
textures = {},
static_save = false
static_save = false,
backface_culling = false
})
function signs_lib.delete_objects(pos)
@ -204,7 +242,8 @@ function signs_lib.handle_rotation(pos, node, user, mode)
local def = minetest.registered_items[node.name]
if string.match(node.name, "_onpole") then
local newparam2 = signs_lib.rotate_walldir_simple[node.param2] or 4
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
if def.paramtype2 ~= "wallmounted" then
@ -217,17 +256,30 @@ function signs_lib.handle_rotation(pos, node, user, mode)
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 def.paramtype2 ~= "wallmounted" then
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
@ -494,6 +546,8 @@ end
local function make_sign_texture(lines, pos)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local def = minetest.registered_items[node.name]
if not def or not def.entity_info then return end
@ -502,16 +556,21 @@ local function make_sign_texture(lines, pos)
local line_height
local char_width
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
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
char_width = signs_lib.charwidth31
colorbgw = signs_lib.colorbgw31
else
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
char_width = signs_lib.charwidth15
colorbgw = signs_lib.colorbgw15
@ -533,7 +592,7 @@ end
function signs_lib.split_lines_and_words(text)
if not text then return end
local lines = { }
for _, line in ipairs(text:split("\n")) do
for _, line in ipairs(text:split("\n", true)) do
table.insert(lines, line:split(" "))
end
return lines
@ -547,27 +606,17 @@ function signs_lib.set_obj_text(pos, text)
signs_lib.spawn_entity(pos, make_sign_texture(split(text_ansi), pos))
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)
local form = "size[6,4]"..
"textarea[0,-0.3;6.5,3;text;;${text}]"..
"background[-0.5,-0.5;7,5;signs_lib_sign_bg.jpg]"
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"
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]"..
"image_button[1.1,3.7;1,0.6;signs_lib_switch_"..
state..".png;"..
@ -577,7 +626,6 @@ function signs_lib.construct_sign(pos)
form = form.."button_exit[2,3.4;2,1;ok;"..S("Write").."]"
end
local meta = minetest.get_meta(pos)
meta:set_string("formspec", form)
local i = meta:get_string("infotext")
if i == "" then -- it wasn't even set, so set it.
@ -627,21 +675,22 @@ function signs_lib.receive_fields(pos, formname, fields, sender)
signs_lib.update_sign(pos, fields)
elseif fields.on or fields.off then
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
newname = string.gsub(node.name, "_widefont", "")
elseif fields.off and not string.find(node.name, "widefont") then
newname = make_widefont_nodename(node.name)
if fields.on and meta:get_int("widefont") == 1 then
meta:set_int("widefont", 0)
change = true
elseif fields.off and meta:get_int("widefont") == 0 then
meta:set_int("widefont", 1)
change = true
end
if newname then
if change then
minetest.log("action", S("@1 flipped the wide-font switch to \"@2\" at @3",
(sender:get_player_name() or ""),
(fields.on and "off" or "on"),
minetest.pos_to_string(pos)
))
minetest.swap_node(pos, {name = newname, param2 = node.param2})
signs_lib.construct_sign(pos)
signs_lib.update_sign(pos, fields)
end
@ -699,17 +748,32 @@ function signs_lib.check_for_pole(pos, 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
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
end
end
@ -737,8 +801,7 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
local ppos = minetest.get_pointed_thing_position(pointed_thing)
local pnode = minetest.get_node(ppos)
local pdef = minetest.registered_items[pnode.name]
if (def.allow_onpole ~= false) and signs_lib.check_for_pole(pos, pointed_thing) then
if def.allow_onpole 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
@ -748,6 +811,16 @@ function signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, locke
end
local node = minetest.get_node(pos)
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
local newparam2 = minetest.dir_to_facedir(placer:get_look_dir())
local node = minetest.get_node(pos)
@ -768,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()")
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)
if rdef.entity_info == "standard" then
@ -831,10 +950,10 @@ local function register_sign(name, rdef)
minetest.register_node(":"..name, def)
table.insert(signs_lib.lbm_restore_nodes, name)
if rdef.allow_onpole ~= false then
local opdef = table.copy(def)
if rdef.allow_onpole or rdef.allow_onpole_horizontal then
local offset = 0.3125
if opdef.uses_slim_pole_mount then
offset = 0.35
@ -858,16 +977,32 @@ local function register_sign(name, rdef)
end
opdef.groups.not_in_creative_inventory = 1
opdef.tiles[3] = "signs_lib_pole_mount.png"
opdef.mesh = string.gsub(opdef.mesh, ".obj$", "_onpole.obj")
if opdef.entity_info then
opdef.entity_info.mesh = string.gsub(opdef.entity_info.mesh, ".obj$", "_onpole.obj")
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)
table.insert(signs_lib.lbm_restore_nodes, name.."_onpole")
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
local hdef = table.copy(def)
@ -890,57 +1025,9 @@ local function register_sign(name, rdef)
minetest.register_node(":"..name.."_hanging", hdef)
table.insert(signs_lib.lbm_restore_nodes, name.."_hanging")
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
local 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)
table.insert(signs_lib.old_widefont_signs, name.."_widefont")
end
end
@ -990,8 +1077,22 @@ minetest.register_lbm({
end
})
signs_lib.block_list = {}
signs_lib.totalblocks = 0
-- Convert widefont sign nodes to use one base node with meta flag to select wide mode
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
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
intllib?
screwdriver?
streetspoles?
streetlamps?

View File

@ -13,3 +13,4 @@ signs_lib.gettext = S
dofile(signs_lib.path.."/api.lua")
dofile(signs_lib.path.."/encoding.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.164063 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.031250 0.812500
vt 0.031250 0.187500
@ -195,6 +251,110 @@ 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.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 -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 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.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
o Cube.003_Cube
o sign_on_pole_Cube.002
v 0.437500 -0.812500 -0.312500
v 0.437500 -0.750000 -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.812500 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.875000 -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.164063 -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.703125 0.507812
vt 0.703125 0.093750
@ -211,44 +355,86 @@ vt 0.453125 0.640625
vt 0.453125 0.593750
vt 0.312500 0.593750
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
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
f 17/19/7 18/20/7 20/21/7 19/22/7
f 22/23/8 21/24/8 24/25/8 23/26/8
f 20/21/9 24/25/9 21/27/9 19/28/9
f 17/29/10 22/30/10 23/26/10 18/20/10
f 18/20/11 23/26/11 24/25/11 20/21/11
f 25/31/8 26/32/8 28/33/8 27/34/8
f 27/35/9 28/36/9 32/37/9 31/38/9
f 31/39/7 32/40/7 30/41/7 29/42/7
f 29/42/10 30/41/10 26/43/10 25/44/10
f 33/45/8 34/46/8 36/47/8 35/48/8
f 35/49/9 36/50/9 40/51/9 39/52/9
f 39/53/7 40/54/7 38/55/7 37/56/7
f 37/56/10 38/55/10 34/57/10 33/58/10
f 41/59/8 42/60/8 44/61/8 43/62/8
f 43/63/9 44/64/9 48/65/9 47/66/9
f 47/67/7 48/68/7 46/69/7 45/70/7
f 45/70/10 46/69/10 42/71/10 41/72/10
f 49/73/8 50/74/8 52/75/8 51/76/8
f 51/77/9 52/78/9 56/79/9 55/80/9
f 55/81/7 56/82/7 54/83/7 53/84/7
f 53/84/10 54/83/10 50/85/10 49/86/10
f 57/87/11 58/88/11 60/89/11 59/90/11
f 59/91/9 60/92/9 64/93/9 63/94/9
f 63/94/12 64/93/12 62/95/12 61/96/12
f 61/96/10 62/95/10 58/88/10 57/87/10
f 59/97/7 63/98/7 61/99/7 57/100/7
f 64/101/8 60/102/8 58/103/8 62/104/8
f 65/105/11 66/106/11 68/107/11 67/108/11
f 67/109/9 68/110/9 72/111/9 71/112/9
f 71/112/12 72/111/12 70/113/12 69/114/12
f 69/114/10 70/113/10 66/106/10 65/105/10
f 67/115/7 71/116/7 69/117/7 65/118/7
f 72/119/8 68/120/8 66/121/8 70/122/8
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 sign_on_pole_Cube.002_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
g sign_on_pole_Cube.002_pole_mount
f 17/19/6 18/20/6 20/21/6 19/22/6
f 22/23/5 21/24/5 24/25/5 23/26/5
f 20/21/4 24/25/4 21/27/4 19/28/4
f 17/29/3 22/30/3 23/26/3 18/20/3
f 18/20/2 23/26/2 24/25/2 20/21/2
f 25/31/5 26/32/5 28/33/5 27/34/5
f 27/35/4 28/36/4 32/37/4 31/38/4
f 31/39/6 32/40/6 30/41/6 29/42/6
f 29/42/3 30/41/3 26/43/3 25/44/3
f 33/45/5 34/46/5 36/47/5 35/48/5
f 35/49/4 36/50/4 40/51/4 39/52/4
f 39/53/6 40/54/6 38/55/6 37/56/6
f 37/56/3 38/55/3 34/57/3 33/58/3
f 41/59/5 42/60/5 44/61/5 43/62/5
f 43/63/4 44/64/4 48/65/4 47/66/4
f 47/67/6 48/68/6 46/69/6 45/70/6
f 45/70/3 46/69/3 42/71/3 41/72/3
f 49/73/5 50/74/5 52/75/5 51/76/5
f 51/77/4 52/78/4 56/79/4 55/80/4
f 55/81/6 56/82/6 54/83/6 53/84/6
f 53/84/3 54/83/3 50/85/3 49/86/3
f 57/87/2 58/88/2 60/89/2 59/90/2
f 59/91/4 60/92/4 64/93/4 63/94/4
f 63/94/1 64/93/1 62/95/1 61/96/1
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",
allow_hanging = true,
allow_widefont = true
allow_widefont = true,
allow_onpole = true,
allow_onpole_horizontal = true
})
signs_lib.register_sign("default:sign_wall_steel", {
@ -24,7 +26,9 @@ signs_lib.register_sign("default:sign_wall_steel", {
locked = true,
entity_info = "standard",
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")

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B