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
f6673dc0f1 added a proper register-sign API call
(see api.lua and standard_signs.lua for examples)

make selectionbox call now ignores the old onpole flag (it's automatic now)
removed debug print()'s
moved the signs-on-fences lbm settings to here, from basic_signs.
some misc cleanups

added reference models for standard wooden sign ("wallmounted" on wall,
"facedir" on wall, and pole-mount variants, using standard-size pole
mount), and a separate .blend with street_signs' OM3 sign on slim pole
mount.
2019-09-14 22:45:01 -04:00
fe57c23132 Add standard wood and steel signs sound defs
use them in standard signs.
2019-09-14 17:59:21 -04:00
94745e123e get standard sign groups directly from the original default node defs
(instead of hard-coding them)
2019-09-14 17:45:42 -04:00
5131eac4bb Move text entity out a bit further from sign surface
was ~7.81 mm (2/256), now ~11.72 mm (3/256)
2019-09-14 17:31:38 -04:00
de69b246ec fix wrong priv 2019-09-13 17:12:40 -04:00
e2d522373d add chat command to sweep-away
and regenerate all sign entities in loaded map
(uses LBM to log all loaded blocks,
but only those with nodes in "group:sign").
2019-09-13 16:51:51 -04:00
d262f95744 fix bad material order in facedir-onpole model 2019-09-12 12:01:51 -04:00
d34d27bb81 fix 'dummy' formspec images (the hacky way) 2019-09-12 11:31:19 -04:00
8 changed files with 362 additions and 234 deletions

263
api.lua
View File

@ -15,11 +15,19 @@ signs_lib.standard_vscale = 1
signs_lib.standard_lspace = 1 signs_lib.standard_lspace = 1
signs_lib.standard_fsize = 15 signs_lib.standard_fsize = 15
signs_lib.standard_xoffs = 4 signs_lib.standard_xoffs = 4
signs_lib.standard_yoffs = 2 signs_lib.standard_yoffs = 0
signs_lib.standard_cpl = 35 signs_lib.standard_cpl = 35
signs_lib.standard_wood_groups = {choppy = 2, flammable = 2, oddly_breakable_by_hand = 3} signs_lib.standard_wood_groups = table.copy(minetest.registered_items["default:sign_wall_wood"].groups)
signs_lib.standard_steel_groups = {cracky = 2, oddly_breakable_by_hand = 3} signs_lib.standard_wood_groups.sign = 1
signs_lib.standard_wood_groups.attached_node = nil
signs_lib.standard_steel_groups = table.copy(minetest.registered_items["default:sign_wall_steel"].groups)
signs_lib.standard_steel_groups.sign = 1
signs_lib.standard_steel_groups.attached_node = nil
signs_lib.standard_wood_sign_sounds = table.copy(minetest.registered_items["default:sign_wall_wood"].sounds)
signs_lib.standard_steel_sign_sounds = table.copy(minetest.registered_items["default:sign_wall_steel"].sounds)
signs_lib.standard_yaw = { signs_lib.standard_yaw = {
0, 0,
@ -434,7 +442,10 @@ signs_lib.construct_sign = function(pos)
"textarea[0,-0.3;6.5,3;text;;${text}]".. "textarea[0,-0.3;6.5,3;text;;${text}]"..
"button_exit[2,3.4;2,1;ok;"..S("Write").."]".. "button_exit[2,3.4;2,1;ok;"..S("Write").."]"..
"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 i = meta:get_string("infotext")
if i == "" then -- it wasn't even set, so set it.
meta:set_string("infotext", "") meta:set_string("infotext", "")
end
end end
function signs_lib.destruct_sign(pos) function signs_lib.destruct_sign(pos)
@ -558,7 +569,7 @@ minetest.register_entity("signs_lib:text", {
-- make selection boxes -- make selection boxes
-- sizex/sizey specified in inches because that's what MUTCD uses. -- sizex/sizey specified in inches because that's what MUTCD uses.
function signs_lib.make_selection_boxes(sizex, sizey, onpole, xoffs, yoffs, zoffs, fdir) function signs_lib.make_selection_boxes(sizex, sizey, foo, xoffs, yoffs, zoffs, is_facedir)
local tx = (sizex * 0.0254 ) / 2 local tx = (sizex * 0.0254 ) / 2
local ty = (sizey * 0.0254 ) / 2 local ty = (sizey * 0.0254 ) / 2
@ -566,22 +577,7 @@ function signs_lib.make_selection_boxes(sizex, sizey, onpole, xoffs, yoffs, zoff
local yo = yoffs and yoffs * 0.0254 or 0 local yo = yoffs and yoffs * 0.0254 or 0
local zo = zoffs and zoffs * 0.0254 or 0 local zo = zoffs and zoffs * 0.0254 or 0
if onpole == "_onpole" then if not is_facedir then
if not fdir then
return {
type = "wallmounted",
wall_side = { -0.5 - 0.3125 + zo, -ty + yo, -tx + xo, -0.4375 - 0.3125 + zo, ty + yo , tx + xo },
wall_top = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
wall_bottom = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
}
else
return {
type = "fixed",
fixed = { -tx + xo, -ty + yo, 0.5 + 0.3125 + zo, tx + xo, ty + yo, 0.4375 + 0.3125 + zo }
}
end
else
if not fdir then
return { return {
type = "wallmounted", type = "wallmounted",
wall_side = { -0.5 + zo, -ty + yo, -tx + xo, -0.4375 + zo, ty + yo, tx + xo }, wall_side = { -0.5 + zo, -ty + yo, -tx + xo, -0.4375 + zo, ty + yo, tx + xo },
@ -594,7 +590,6 @@ function signs_lib.make_selection_boxes(sizex, sizey, onpole, xoffs, yoffs, zoff
fixed = { -tx + xo, -ty + yo, 0.5 + zo, tx + xo, ty + yo, 0.4375 + zo} fixed = { -tx + xo, -ty + yo, 0.5 + zo, tx + xo, ty + yo, 0.4375 + zo}
} }
end end
end
end end
function signs_lib.check_for_pole(pos, pointed_thing) function signs_lib.check_for_pole(pos, pointed_thing)
@ -602,9 +597,6 @@ 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]
print(dump(pos))
print(dump(ppos))
if (signs_lib.allowed_poles[pnode.name] if (signs_lib.allowed_poles[pnode.name]
or (pdef and pdef.drawtype == "fencelike") or (pdef and pdef.drawtype == "fencelike")
or string.find(pnode.name, "default:fence_") or string.find(pnode.name, "default:fence_")
@ -615,18 +607,19 @@ function signs_lib.check_for_pole(pos, pointed_thing)
) )
and and
(pos.x ~= ppos.x or pos.z ~= ppos.z) then (pos.x ~= ppos.x or pos.z ~= ppos.z) then
print("signs_lib.check_for_pole returned true")
return true return true
end end
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 def = minetest.registered_items[itemstack:get_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]
local playername = placer:get_player_name()
if 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 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 = node.param2})
end end
@ -641,6 +634,154 @@ 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
--[[
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)
local def = table.copy(rdef)
if rdef.entity_info == "standard" then
def.entity_info = {
mesh = "signs_lib_standard_wall_sign_entity.obj",
yaw = signs_lib.wallmounted_yaw
}
elseif rdef.entity_info then
def.entity_info = rdef.entity_info
end
if rdef.entity_info then
def.on_rightclick = rdef.on_rightclick or signs_lib.construct_sign
def.on_construct = rdef.on_construct or signs_lib.construct_sign
def.on_destruct = rdef.on_destruct or signs_lib.destruct_sign
def.on_receive_fields = rdef.on_receive_fields or signs_lib.receive_fields
def.on_punch = rdef.on_punch or signs_lib.update_sign
def.number_of_lines = rdef.number_of_lines or signs_lib.standard_lines
def.horiz_scaling = rdef.horiz_scaling or signs_lib.standard_hscale
def.vert_scaling = rdef.vert_scaling or signs_lib.standard_vscale
def.line_spacing = rdef.line_spacing or signs_lib.standard_lspace
def.font_size = rdef.font_size or signs_lib.standard_fsize
def.x_offset = rdef.x_offset or signs_lib.standard_xoffs
def.y_offset = rdef.y_offset or signs_lib.standard_yoffs
def.chars_per_line = rdef.chars_per_line or signs_lib.standard_cpl
def.default_color = rdef.default_color or "0"
if rdef.locked and not rdef.after_place_node then
def.after_place_node = function(pos, placer, itemstack, pointed_thing)
signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, true)
end
else
def.after_place_node = rdef.after_place_node or signs_lib.after_place_node
end
end
def.paramtype = rdef.paramtype or "light"
def.paramtype2 = rdef.paramtype2 or "wallmounted"
def.drawtype = rdef.drawtype or "mesh"
def.mesh = rdef.mesh or "signs_lib_standard_wall_sign.obj"
def.wield_image = rdef.wield_image or def.inventory_image
def.drop = rdef.drop or name
def.sounds = rdef.sounds or signs_lib.standard_wood_sign_sounds
def.on_rotate = rdef.on_rotate or signs_lib.wallmounted_rotate
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
def.groups = rdef.groups
else
def.groups = signs_lib.standard_wood_groups
end
local cbox = signs_lib.make_selection_boxes(35, 25, allow_onpole)
def.selection_box = rdef.selection_box or cbox
def.node_box = table.copy(rdef.node_box or rdef.selection_box or cbox)
if def.sunlight_propagates ~= false then
def.sunlight_propagates = true
end
minetest.register_node(":"..name, def)
table.insert(signs_lib.lbm_restore_nodes, name)
if rdef.allow_onpole ~= false then
local opdef = table.copy(def)
local offset = 0.3125
if opdef.uses_slim_pole_mount then
offset = 0.35
end
if opdef.paramtype2 == "wallmounted" then
opdef.node_box.wall_side[1] = def.node_box.wall_side[1] - offset
opdef.node_box.wall_side[4] = def.node_box.wall_side[4] - offset
opdef.selection_box.wall_side[1] = def.selection_box.wall_side[1] - offset
opdef.selection_box.wall_side[4] = def.selection_box.wall_side[4] - offset
else
opdef.node_box.fixed[3] = def.node_box.fixed[3] + offset
opdef.node_box.fixed[6] = def.node_box.fixed[6] + offset
opdef.selection_box.fixed[3] = def.selection_box.fixed[3] + offset
opdef.selection_box.fixed[6] = def.selection_box.fixed[6] + offset
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")
opdef.on_rotate = nil
if opdef.entity_info then
opdef.entity_info.mesh = string.gsub(opdef.entity_info.mesh, ".obj$", "_onpole.obj")
end
minetest.register_node(":"..name.."_onpole", opdef)
table.insert(signs_lib.lbm_restore_nodes, name.."_onpole")
end
end
-- restore signs' text after /clearobjects and the like, the next time -- restore signs' text after /clearobjects and the like, the next time
-- a block is reloaded by the server. -- a block is reloaded by the server.
@ -691,3 +832,71 @@ minetest.register_lbm({
end end
end end
}) })
signs_lib.block_list = {}
signs_lib.totalblocks = 0
-- Maintain a list of currently-loaded blocks
minetest.register_lbm({
nodenames = {"group:sign"},
name = "signs_lib:update_block_list",
label = "Update list of loaded blocks, log only those with signs",
run_at_every_load = true,
action = function(pos, node)
-- yeah, yeah... I know I'm hashing a block pos, but it's still just a set of coords
local hash = minetest.hash_node_position(vector.floor(vector.divide(pos, core.MAP_BLOCKSIZE)))
if not signs_lib.block_list[hash] then
signs_lib.block_list[hash] = true
signs_lib.totalblocks = signs_lib.totalblocks + 1
end
end
})
minetest.register_chatcommand("regen_signs", {
params = "",
privs = {server = true},
description = "Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.",
func = function(player_name, params)
local allsigns = {}
local totalsigns = 0
for b in pairs(signs_lib.block_list) do
local blockpos = minetest.get_position_from_hash(b)
local pos1 = vector.multiply(blockpos, core.MAP_BLOCKSIZE)
local pos2 = vector.add(pos1, core.MAP_BLOCKSIZE - 1)
if minetest.get_node_or_nil(vector.add(pos1, core.MAP_BLOCKSIZE/2)) then
local signs_in_block = minetest.find_nodes_in_area(pos1, pos2, {"group:sign"})
allsigns[#allsigns + 1] = signs_in_block
totalsigns = totalsigns + #signs_in_block
else
signs_lib.block_list[b] = nil -- if the block is no longer loaded, remove it from the table
signs_lib.totalblocks = signs_lib.totalblocks - 1
end
end
if signs_lib.totalblocks < 0 then signs_lib.totalblocks = 0 end
if totalsigns == 0 then
minetest.chat_send_player(player_name, "There are no signs in the currently-loaded terrain.")
signs_lib.block_list = {}
return
end
minetest.chat_send_player(player_name, "Found a total of "..totalsigns.." sign nodes across "..signs_lib.totalblocks.." blocks.")
minetest.chat_send_player(player_name, "Regenerating sign entities...")
for _, b in pairs(allsigns) do
for _, pos in ipairs(b) do
local objects = minetest.get_objects_inside_radius(pos, 0.5)
if #objects > 0 then
for _, v in ipairs(objects) do
v:remove()
end
end
local node = minetest.get_node(pos)
local def = minetest.registered_items[node.name]
if def and def.entity_info then
signs_lib.update_sign(pos)
end
end
end
minetest.chat_send_player(player_name, "Finished.")
end
})

Binary file not shown.

View File

@ -1,10 +1,10 @@
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden sign.blend' # Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden sign.blend'
# www.blender.org # www.blender.org
o text_entity_Plane o text_entity_Plane
v 0.406250 -0.281250 0.429688 v 0.406250 -0.281250 0.425781
v -0.406250 -0.281250 0.429688 v -0.406250 -0.281250 0.425781
v 0.406250 0.281250 0.429688 v 0.406250 0.281250 0.425781
v -0.406250 0.281250 0.429688 v -0.406250 0.281250 0.425781
vt 0.000000 0.000000 vt 0.000000 0.000000
vt 1.000000 0.000000 vt 1.000000 0.000000
vt 1.000000 1.000000 vt 1.000000 1.000000

View File

@ -1,10 +1,10 @@
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden sign.blend' # Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden sign.blend'
# www.blender.org # www.blender.org
o text_entity.001_Plane o text_entity.001_Plane
v 0.406250 -0.281250 0.742188 v 0.406250 -0.281250 0.738281
v -0.406250 -0.281250 0.742188 v -0.406250 -0.281250 0.738281
v 0.406250 0.281250 0.742188 v 0.406250 0.281250 0.738281
v -0.406250 0.281250 0.742188 v -0.406250 0.281250 0.738281
vt 0.000000 0.000000 vt 0.000000 0.000000
vt 1.000000 0.000000 vt 1.000000 0.000000
vt 1.000000 1.000000 vt 1.000000 1.000000

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.008_Cube o sign_(3)_Cube
v 0.437500 -0.312500 0.500000 v 0.437500 -0.312500 0.500000
v 0.437500 -0.312500 0.437500 v 0.437500 -0.312500 0.437500
v 0.437500 0.312500 0.500000 v 0.437500 0.312500 0.500000
@ -41,11 +41,11 @@ vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000 vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000 vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000
g Cube.008_Cube_front-back g sign_(3)_Cube_front-back
s off s off
f 8/1/1 4/2/1 2/3/1 6/4/1 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 f 3/5/2 7/6/2 5/7/2 1/8/2
g Cube.008_Cube_edges g sign_(3)_Cube_edges
f 13/9/3 14/10/3 10/11/3 9/12/3 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/4 12/14/4 16/15/4 15/16/4
f 11/13/5 9/17/5 10/18/5 12/14/5 f 11/13/5 9/17/5 10/18/5 12/14/5

View File

@ -1,6 +1,22 @@
# 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.009_Cube.001 o sign_on_pole.001_Cube.002
v 0.437500 -0.312500 0.812500
v 0.437500 -0.312500 0.750000
v 0.437500 0.312500 0.812500
v 0.437500 0.312500 0.750000
v -0.437500 -0.312500 0.812500
v -0.437500 -0.312500 0.750000
v -0.437500 0.312500 0.812500
v -0.437500 0.312500 0.750000
v 0.437500 -0.312500 0.812500
v 0.437500 -0.312500 0.750000
v 0.437500 0.312500 0.812500
v 0.437500 0.312500 0.750000
v -0.437500 -0.312500 0.812500
v -0.437500 -0.312500 0.750000
v -0.437500 0.312500 0.812500
v -0.437500 0.312500 0.750000
v -0.125000 -0.187500 0.812500 v -0.125000 -0.187500 0.812500
v -0.125000 -0.187500 0.875000 v -0.125000 -0.187500 0.875000
v -0.125000 0.187500 0.812500 v -0.125000 0.187500 0.812500
@ -57,6 +73,24 @@ 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
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.843750 0.507812
vt 0.703125 0.507812 vt 0.703125 0.507812
vt 0.703125 0.093750 vt 0.703125 0.093750
@ -161,94 +195,52 @@ 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 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
g Cube.009_Cube.001_pole_mount
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 6/5/2 5/6/2 8/7/2 7/8/2
f 4/3/3 8/7/3 5/9/3 3/10/3
f 1/11/4 6/12/4 7/8/4 2/2/4
f 2/2/5 7/8/5 8/7/5 4/3/5
f 9/13/2 10/14/2 12/15/2 11/16/2
f 11/17/3 12/18/3 16/19/3 15/20/3
f 15/21/1 16/22/1 14/23/1 13/24/1
f 13/24/4 14/23/4 10/25/4 9/26/4
f 17/27/2 18/28/2 20/29/2 19/30/2
f 19/31/3 20/32/3 24/33/3 23/34/3
f 23/35/1 24/36/1 22/37/1 21/38/1
f 21/38/4 22/37/4 18/39/4 17/40/4
f 25/41/2 26/42/2 28/43/2 27/44/2
f 27/45/3 28/46/3 32/47/3 31/48/3
f 31/49/1 32/50/1 30/51/1 29/52/1
f 29/52/4 30/51/4 26/53/4 25/54/4
f 33/55/2 34/56/2 36/57/2 35/58/2
f 35/59/3 36/60/3 40/61/3 39/62/3
f 39/63/1 40/64/1 38/65/1 37/66/1
f 37/66/4 38/65/4 34/67/4 33/68/4
f 41/69/5 42/70/5 44/71/5 43/72/5
f 43/73/3 44/74/3 48/75/3 47/76/3
f 47/76/6 48/75/6 46/77/6 45/78/6
f 45/78/4 46/77/4 42/70/4 41/69/4
f 43/79/1 47/80/1 45/81/1 41/82/1
f 48/83/2 44/84/2 42/85/2 46/86/2
f 49/87/5 50/88/5 52/89/5 51/90/5
f 51/91/3 52/92/3 56/93/3 55/94/3
f 55/94/6 56/93/6 54/95/6 53/96/6
f 53/96/4 54/95/4 50/88/4 49/87/4
f 51/97/1 55/98/1 53/99/1 49/100/1
f 56/101/2 52/102/2 50/103/2 54/104/2
o Cube.004_Cube
v 0.437500 -0.312500 0.812500
v 0.437500 -0.312500 0.750000
v 0.437500 0.312500 0.812500
v 0.437500 0.312500 0.750000
v -0.437500 -0.312500 0.812500
v -0.437500 -0.312500 0.750000
v -0.437500 0.312500 0.812500
v -0.437500 0.312500 0.750000
v 0.437500 -0.312500 0.812500
v 0.437500 -0.312500 0.750000
v 0.437500 0.312500 0.812500
v 0.437500 0.312500 0.750000
v -0.437500 -0.312500 0.812500
v -0.437500 -0.312500 0.750000
v -0.437500 0.312500 0.812500
v -0.437500 0.312500 0.750000
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 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
vn 0.0000 1.0000 0.0000 vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000 vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000
g Cube.004_Cube_front-back g sign_on_pole.001_Cube.002_front-back
s off s off
f 64/105/7 60/106/7 58/107/7 62/108/7 f 8/1/1 4/2/1 2/3/1 6/4/1
f 59/109/8 63/110/8 61/111/8 57/112/8 f 3/5/2 7/6/2 5/7/2 1/8/2
g Cube.004_Cube_edges g sign_on_pole.001_Cube.002_edges
f 69/113/9 70/114/9 66/115/9 65/116/9 f 13/9/3 14/10/3 10/11/3 9/12/3
f 67/117/10 68/118/10 72/119/10 71/120/10 f 11/13/4 12/14/4 16/15/4 15/16/4
f 67/117/11 65/121/11 66/122/11 68/118/11 f 11/13/5 9/17/5 10/18/5 12/14/5
f 69/113/12 71/120/12 72/119/12 70/114/12 f 13/9/6 15/16/6 16/15/6 14/10/6
g sign_on_pole.001_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

Binary file not shown.

View File

@ -1,103 +1,30 @@
-- Definitions for standard minetest_game wooden and steel wall signs -- Definitions for standard minetest_game wooden and steel wall signs
for _, onpole in ipairs({"", "_onpole"}) do signs_lib.register_sign("default:sign_wall_wood", {
local nci = nil
local on_rotate = signs_lib.wallmounted_rotate
local pole_mount_tex = nil
if onpole == "_onpole" then
nci = 1
on_rotate = nil
pole_mount_tex = "signs_lib_pole_mount.png" -- the metal straps on back, if needed
end
local wood_groups = table.copy(signs_lib.standard_wood_groups)
wood_groups.not_in_creative_inventory = nci
local steel_groups = table.copy(signs_lib.standard_steel_groups)
steel_groups.not_in_creative_inventory = nci
cbox = signs_lib.make_selection_boxes(35, 25, onpole)
minetest.register_node(":default:sign_wall_wood"..onpole, {
description = "Wooden wall sign", description = "Wooden wall sign",
paramtype = "light", inventory_image = "signs_lib_sign_wall_wooden_inv.png",
sunlight_propagates = true,
paramtype2 = "wallmounted",
drawtype = "mesh",
node_box = cbox,
selection_box = cbox,
mesh = "signs_lib_standard_wall_sign"..onpole..".obj",
tiles = { tiles = {
"signs_lib_sign_wall_wooden.png", "signs_lib_sign_wall_wooden.png",
"signs_lib_sign_wall_wooden_edges.png", "signs_lib_sign_wall_wooden_edges.png",
pole_mount_tex
}, },
inventory_image = "signs_lib_sign_wall_wooden_inv.png", entity_info = "standard"
wield_image = "signs_lib_sign_wall_wooden_inv.png", })
groups = wood_groups,
default_color = "0",
on_construct = signs_lib.construct_sign,
on_destruct = signs_lib.destruct_sign,
on_receive_fields = signs_lib.receive_fields,
on_punch = signs_lib.update_sign,
on_rotate = signs_lib.wallmounted_rotate,
number_of_lines = signs_lib.standard_lines,
horiz_scaling = signs_lib.standard_hscale,
vert_scaling = signs_lib.standard_vscale,
line_spacing = signs_lib.standard_lspace,
font_size = signs_lib.standard_fsize,
x_offset = signs_lib.standard_xoffs,
y_offset = signs_lib.standard_yoffs,
chars_per_line = signs_lib.standard_cpl,
entity_info = {
mesh = "signs_lib_standard_wall_sign_entity"..onpole..".obj",
yaw = signs_lib.wallmounted_yaw
},
drop = "default:sign_wall_wood"
})
table.insert(signs_lib.lbm_restore_nodes, "default:sign_wall_wood"..onpole)
minetest.register_node(":default:sign_wall_steel"..onpole, { signs_lib.register_sign("default:sign_wall_steel", {
description = "Steel wall sign", description = "Steel wall sign",
paramtype = "light", inventory_image = "signs_lib_sign_wall_steel_inv.png",
sunlight_propagates = true,
paramtype2 = "wallmounted",
drawtype = "mesh",
node_box = cbox,
selection_box = cbox,
mesh = "signs_lib_standard_wall_sign"..onpole..".obj",
tiles = { tiles = {
"signs_lib_sign_wall_steel.png", "signs_lib_sign_wall_steel.png",
"signs_lib_sign_wall_steel_edges.png", "signs_lib_sign_wall_steel_edges.png",
pole_mount_tex
}, },
inventory_image = "signs_lib_sign_wall_steel_inv.png", groups = signs_lib.standard_steel_groups,
wield_image = "signs_lib_sign_wall_steel_inv.png", sounds = signs_lib.standard_steel_sign_sounds,
groups = wood_groups, locked = true,
default_color = "0", entity_info = "standard"
on_construct = signs_lib.construct_sign, })
on_destruct = signs_lib.destruct_sign,
after_place_node = function(pos, placer, itemstack, pointed_thing) -- insert the old wood sign-on-fencepost into signs_lib's conversion LBM
signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, true)
end, table.insert(signs_lib.old_fenceposts_with_signs, "signs:sign_post")
on_receive_fields = signs_lib.receive_fields, signs_lib.old_fenceposts["signs:sign_post"] = "default:fence_wood"
on_punch = signs_lib.update_sign, signs_lib.old_fenceposts_replacement_signs["signs:sign_post"] = "default:sign_wall_wood_onpole"
can_dig = signs_lib.can_modify,
on_rotate = signs_lib.wallmounted_rotate,
number_of_lines = signs_lib.standard_lines,
horiz_scaling = signs_lib.standard_hscale,
vert_scaling = signs_lib.standard_vscale,
line_spacing = signs_lib.standard_lspace,
font_size = signs_lib.standard_fsize,
x_offset = signs_lib.standard_xoffs,
y_offset = signs_lib.standard_yoffs,
chars_per_line = signs_lib.standard_cpl,
entity_info = {
mesh = "signs_lib_standard_wall_sign_entity"..onpole..".obj",
yaw = signs_lib.wallmounted_yaw
},
drop = "default:sign_wall_steel"
})
table.insert(signs_lib.lbm_restore_nodes, "default:sign_wall_steel"..onpole)
end