mirror of
https://github.com/mt-mods/signs_lib.git
synced 2025-06-28 22:06:20 +02:00
Compare commits
31 Commits
2019-09-13
...
2019-09-22
Author | SHA1 | Date | |
---|---|---|---|
ae6e707ebe | |||
dcdee22265 | |||
e4336e320c | |||
d41e2ffd73 | |||
77987d12b9 | |||
dfece5275e | |||
6285d250d7 | |||
9502812088 | |||
c66c1b70bd | |||
831055095c | |||
f0bc18154e | |||
4eeaf90ae3 | |||
906ddbbcc5 | |||
01e2adaa46 | |||
03bd471230 | |||
e5d525c272 | |||
a907f9535c | |||
bbd580acb1 | |||
2d29a539f8 | |||
4b2abfadce | |||
ee2dc495c3 | |||
f944337b1c | |||
a5e711d354 | |||
bcb6a3aa39 | |||
b021b9666f | |||
c765d3b316 | |||
78418de9c9 | |||
f6673dc0f1 | |||
fe57c23132 | |||
94745e123e | |||
5131eac4bb |
750
api.lua
750
api.lua
@ -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
|
||||
@ -15,11 +14,26 @@ signs_lib.standard_vscale = 1
|
||||
signs_lib.standard_lspace = 1
|
||||
signs_lib.standard_fsize = 15
|
||||
signs_lib.standard_xoffs = 4
|
||||
signs_lib.standard_yoffs = 2
|
||||
signs_lib.standard_yoffs = 0
|
||||
signs_lib.standard_cpl = 35
|
||||
|
||||
signs_lib.standard_wood_groups = {sign = 1, choppy = 2, flammable = 2, oddly_breakable_by_hand = 3}
|
||||
signs_lib.standard_steel_groups = {sign = 1, cracky = 2, oddly_breakable_by_hand = 3}
|
||||
signs_lib.standard_wood_groups = table.copy(minetest.registered_items["default:sign_wall_wood"].groups)
|
||||
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.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,
|
||||
@ -53,70 +67,232 @@ signs_lib.wall_fdir_to_back = {
|
||||
{ 1, 0 },
|
||||
}
|
||||
|
||||
signs_lib.rotate_facedir = {
|
||||
[0] = 1,
|
||||
[1] = 6,
|
||||
[2] = 3,
|
||||
[3] = 0,
|
||||
[4] = 2,
|
||||
[5] = 6,
|
||||
[6] = 4
|
||||
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 },
|
||||
[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 = {
|
||||
[0] = 1,
|
||||
[1] = 5,
|
||||
[2] = 0,
|
||||
[0] = 4,
|
||||
[1] = 0,
|
||||
[2] = 5,
|
||||
[3] = 1,
|
||||
[4] = 2,
|
||||
[5] = 3
|
||||
}
|
||||
|
||||
signs_lib.rotate_walldir_simple = {
|
||||
[0] = 4,
|
||||
[1] = 4,
|
||||
[2] = 5,
|
||||
[3] = 4,
|
||||
[4] = 2,
|
||||
[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
|
||||
local ctexcache = {}
|
||||
|
||||
signs_lib.wallmounted_rotate = function(pos, node, user, mode)
|
||||
if not signs_lib.can_modify(pos, user) then return false end
|
||||
-- entity handling
|
||||
|
||||
if mode ~= screwdriver.ROTATE_FACE or string.match(node.name, "_onpole") then
|
||||
return false
|
||||
end
|
||||
minetest.register_entity("signs_lib:text", {
|
||||
collisionbox = { 0, 0, 0, 0, 0, 0 },
|
||||
visual = "mesh",
|
||||
mesh = "signs_lib_standard_wall_sign_entity.obj",
|
||||
textures = {},
|
||||
static_save = false,
|
||||
backface_culling = false
|
||||
})
|
||||
|
||||
local newparam2 = signs_lib.rotate_walldir[node.param2] or 0
|
||||
|
||||
minetest.swap_node(pos, { name = node.name, param2 = newparam2 })
|
||||
for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
|
||||
local e = v:get_luaentity()
|
||||
if e and e.name == "signs_lib:text" then
|
||||
function signs_lib.delete_objects(pos)
|
||||
local objects = minetest.get_objects_inside_radius(pos, 0.5)
|
||||
for _, v in ipairs(objects) do
|
||||
v:remove()
|
||||
end
|
||||
end
|
||||
signs_lib.update_sign(pos)
|
||||
return true
|
||||
|
||||
function signs_lib.spawn_entity(pos, texture)
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_items[node.name]
|
||||
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 objects = minetest.get_objects_inside_radius(pos, 0.5)
|
||||
local obj
|
||||
|
||||
if #objects > 0 then
|
||||
obj = objects[1]
|
||||
else
|
||||
obj = minetest.add_entity(pos, "signs_lib:text")
|
||||
end
|
||||
|
||||
signs_lib.facedir_rotate = function(pos, node, user, mode)
|
||||
if not signs_lib.can_modify(pos, user) then return false end
|
||||
local yaw = def.entity_info.yaw[node.param2 + 1]
|
||||
local pitch = 0
|
||||
|
||||
if mode ~= screwdriver.ROTATE_FACE or string.match(node.name, "_onpole") then
|
||||
if not string.find(node.name, "onpole") and not string.find(node.name, "hanging") then
|
||||
local rot90 = math.pi/2
|
||||
|
||||
if def.paramtype2 == "wallmounted" then
|
||||
if node.param2 == 1 then -- on floor
|
||||
pitch = -rot90
|
||||
yaw = 0
|
||||
elseif node.param2 == 0 then -- on ceiling
|
||||
pitch = rot90
|
||||
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
|
||||
|
||||
-- rotation
|
||||
|
||||
function signs_lib.handle_rotation(pos, node, user, mode)
|
||||
if not signs_lib.can_modify(pos, user)
|
||||
or mode ~= screwdriver.ROTATE_FACE then
|
||||
return false
|
||||
end
|
||||
local newparam2
|
||||
local tpos = pos
|
||||
local def = minetest.registered_items[node.name]
|
||||
|
||||
local newparam2 = signs_lib.rotate_facedir[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 })
|
||||
for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
|
||||
local e = v:get_luaentity()
|
||||
if e and e.name == "signs_lib:text" then
|
||||
v:remove()
|
||||
if def.paramtype2 ~= "wallmounted" then
|
||||
newparam2 = signs_lib.rotate_facedir_simple[node.param2] or 0
|
||||
t = signs_lib.fdir_to_back_left
|
||||
end
|
||||
|
||||
tpos = {
|
||||
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 def.paramtype2 ~= "wallmounted" then
|
||||
newparam2 = signs_lib.flip_facedir[node.param2] or 0
|
||||
t = signs_lib.fdir_flip_to_back
|
||||
end
|
||||
signs_lib.update_sign(pos)
|
||||
|
||||
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
|
||||
|
||||
signs_lib.delete_objects(tpos)
|
||||
signs_lib.update_sign(tpos)
|
||||
return true
|
||||
end
|
||||
|
||||
local DEFAULT_TEXT_SCALE = {x=10, y=10}
|
||||
|
||||
-- infinite stacks
|
||||
|
||||
if not minetest.settings:get_bool("creative_mode") then
|
||||
@ -227,15 +403,6 @@ local fences_with_sign = { }
|
||||
|
||||
-- some local helper functions
|
||||
|
||||
local function split_lines_and_words(text)
|
||||
if not text then return end
|
||||
local lines = { }
|
||||
for _, line in ipairs(text:split("\n")) do
|
||||
table.insert(lines, line:split(" "))
|
||||
end
|
||||
return lines
|
||||
end
|
||||
|
||||
local math_max = math.max
|
||||
|
||||
local function fill_line(x, y, w, c, font_size, colorbgw)
|
||||
@ -379,23 +546,31 @@ 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
|
||||
|
||||
local font_size
|
||||
local line_width
|
||||
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
|
||||
@ -414,26 +589,44 @@ local function make_sign_texture(lines, pos)
|
||||
return table.concat(texture, "")
|
||||
end
|
||||
|
||||
local function set_obj_text(obj, text, x, pos)
|
||||
local split = split_lines_and_words
|
||||
local text_ansi = Utf8ToAnsi(text)
|
||||
local n = minetest.registered_nodes[minetest.get_node(pos).name]
|
||||
local text_scale = (n and n.text_scale) or DEFAULT_TEXT_SCALE
|
||||
local texture = make_sign_texture(split(text_ansi), pos)
|
||||
obj:set_properties({
|
||||
textures={texture},
|
||||
visual_size = text_scale,
|
||||
})
|
||||
function signs_lib.split_lines_and_words(text)
|
||||
if not text then return end
|
||||
local lines = { }
|
||||
for _, line in ipairs(text:split("\n", true)) do
|
||||
table.insert(lines, line:split(" "))
|
||||
end
|
||||
return lines
|
||||
end
|
||||
|
||||
signs_lib.construct_sign = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string(
|
||||
"formspec",
|
||||
"size[6,4]"..
|
||||
function signs_lib.set_obj_text(pos, text)
|
||||
local split = signs_lib.split_lines_and_words
|
||||
local text_ansi = Utf8ToAnsi(text)
|
||||
local n = minetest.registered_nodes[minetest.get_node(pos).name]
|
||||
signs_lib.delete_objects(pos)
|
||||
signs_lib.spawn_entity(pos, make_sign_texture(split(text_ansi), pos))
|
||||
end
|
||||
|
||||
function signs_lib.construct_sign(pos)
|
||||
local form = "size[6,4]"..
|
||||
"textarea[0,-0.3;6.5,3;text;;${text}]"..
|
||||
"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 node = minetest.get_node(pos)
|
||||
local def = minetest.registered_items[node.name]
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
if def.allow_widefont then
|
||||
local state = "off"
|
||||
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;"..
|
||||
state..";;;false;signs_lib_switch_interm.png]"..
|
||||
"button_exit[3,3.4;2,1;ok;"..S("Write").."]"
|
||||
else
|
||||
form = form.."button_exit[2,3.4;2,1;ok;"..S("Write").."]"
|
||||
end
|
||||
|
||||
meta:set_string("formspec", form)
|
||||
local i = meta:get_string("infotext")
|
||||
if i == "" then -- it wasn't even set, so set it.
|
||||
meta:set_string("infotext", "")
|
||||
@ -441,18 +634,12 @@ signs_lib.construct_sign = function(pos)
|
||||
end
|
||||
|
||||
function signs_lib.destruct_sign(pos)
|
||||
local objects = minetest.get_objects_inside_radius(pos, 0.5)
|
||||
for _, v in ipairs(objects) do
|
||||
local e = v:get_luaentity()
|
||||
if e and e.name == "signs_lib:text" then
|
||||
v:remove()
|
||||
end
|
||||
end
|
||||
signs_lib.delete_objects(pos)
|
||||
end
|
||||
|
||||
local function make_infotext(text)
|
||||
text = trim_input(text)
|
||||
local lines = split_lines_and_words(text) or {}
|
||||
local lines = signs_lib.split_lines_and_words(text) or {}
|
||||
local lines2 = { }
|
||||
for _, line in ipairs(lines) do
|
||||
table.insert(lines2, (table.concat(line, " "):gsub("#[0-9a-fA-F]", ""):gsub("##", "#")))
|
||||
@ -467,50 +654,46 @@ function signs_lib.update_sign(pos, fields)
|
||||
text = trim_input(text)
|
||||
|
||||
local owner = meta:get_string("owner")
|
||||
ownstr = ""
|
||||
local ownstr = ""
|
||||
if owner ~= "" then ownstr = S("Locked sign, owned by @1\n", owner) end
|
||||
|
||||
meta:set_string("text", text)
|
||||
meta:set_string("infotext", ownstr..make_infotext(text).." ")
|
||||
|
||||
local objects = minetest.get_objects_inside_radius(pos, 0.5)
|
||||
local found
|
||||
for _, v in ipairs(objects) do
|
||||
local e = v:get_luaentity()
|
||||
if e and e.name == "signs_lib:text" then
|
||||
if found then
|
||||
v:remove()
|
||||
else
|
||||
set_obj_text(v, text, nil, pos)
|
||||
found = true
|
||||
end
|
||||
end
|
||||
end
|
||||
if found then
|
||||
return
|
||||
end
|
||||
|
||||
-- if there is no entity
|
||||
local signnode = minetest.get_node(pos)
|
||||
local signname = signnode.name
|
||||
local def = minetest.registered_items[signname]
|
||||
if not def.entity_info or not def.entity_info.yaw[signnode.param2 + 1] then return end
|
||||
local obj = minetest.add_entity(pos, "signs_lib:text")
|
||||
|
||||
obj:setyaw(def.entity_info.yaw[signnode.param2 + 1])
|
||||
obj:set_properties({
|
||||
mesh = def.entity_info.mesh,
|
||||
})
|
||||
signs_lib.set_obj_text(pos, text)
|
||||
end
|
||||
|
||||
function signs_lib.receive_fields(pos, formname, fields, sender)
|
||||
if fields and fields.text and fields.ok and signs_lib.can_modify(pos, sender) then
|
||||
|
||||
if not fields or not signs_lib.can_modify(pos, sender) then return end
|
||||
|
||||
if fields.text and fields.ok then
|
||||
minetest.log("action", S("@1 wrote \"@2\" to sign at @3",
|
||||
(sender:get_player_name() or ""),
|
||||
fields.text:gsub('\\', '\\\\'):gsub("\n", "\\n"),
|
||||
minetest.pos_to_string(pos)
|
||||
))
|
||||
signs_lib.update_sign(pos, fields)
|
||||
elseif fields.on or fields.off then
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local change
|
||||
|
||||
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 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)
|
||||
))
|
||||
signs_lib.construct_sign(pos)
|
||||
signs_lib.update_sign(pos, fields)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -534,34 +717,10 @@ function signs_lib.can_modify(pos, player)
|
||||
return false
|
||||
end
|
||||
|
||||
local signs_text_on_activate = function(self)
|
||||
local pos = self.object:getpos()
|
||||
local meta = minetest.get_meta(pos)
|
||||
local signnode = minetest.get_node(pos)
|
||||
local signname = signnode.name
|
||||
local def = minetest.registered_items[signname]
|
||||
local text = meta:get_string("text")
|
||||
if text and def and def.entity_info then
|
||||
text = trim_input(text)
|
||||
set_obj_text(self.object, text, nil, pos)
|
||||
self.object:set_properties({
|
||||
mesh = def.entity_info.mesh,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_entity("signs_lib:text", {
|
||||
collisionbox = { 0, 0, 0, 0, 0, 0 },
|
||||
visual = "mesh",
|
||||
mesh = "signs_lib_standard_wall_sign_entity.obj",
|
||||
textures = {},
|
||||
on_activate = signs_text_on_activate,
|
||||
})
|
||||
|
||||
-- make selection boxes
|
||||
-- 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 ty = (sizey * 0.0254 ) / 2
|
||||
@ -569,22 +728,7 @@ function signs_lib.make_selection_boxes(sizex, sizey, onpole, xoffs, yoffs, zoff
|
||||
local yo = yoffs and yoffs * 0.0254 or 0
|
||||
local zo = zoffs and zoffs * 0.0254 or 0
|
||||
|
||||
if onpole == "_onpole" 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
|
||||
if not is_facedir then
|
||||
return {
|
||||
type = "wallmounted",
|
||||
wall_side = { -0.5 + zo, -ty + yo, -tx + xo, -0.4375 + zo, ty + yo, tx + xo },
|
||||
@ -598,40 +742,93 @@ function signs_lib.make_selection_boxes(sizex, sizey, onpole, xoffs, yoffs, zoff
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function signs_lib.check_for_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]
|
||||
|
||||
print(dump(pos))
|
||||
print(dump(ppos))
|
||||
if not pdef then return end
|
||||
|
||||
if (signs_lib.allowed_poles[pnode.name]
|
||||
or (pdef and pdef.drawtype == "fencelike")
|
||||
or string.find(pnode.name, "default:fence_")
|
||||
if type(pdef.check_for_pole) == "function" then
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_items[node.name]
|
||||
return pdef.check_for_pole(pos, node, def, ppos, pnode, pdef)
|
||||
elseif pdef.check_for_pole
|
||||
or pdef.drawtype == "fencelike"
|
||||
or string.find(pnode.name, "_post")
|
||||
or string.find(pnode.name, "fencepost")
|
||||
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
|
||||
print("signs_lib.check_for_pole returned true")
|
||||
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
|
||||
|
||||
function signs_lib.check_for_ceiling(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.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)
|
||||
local playername = placer:get_player_name()
|
||||
local def = minetest.registered_items[itemstack:get_name()]
|
||||
|
||||
local ppos = minetest.get_pointed_thing_position(pointed_thing)
|
||||
local pnode = minetest.get_node(ppos)
|
||||
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 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)
|
||||
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
|
||||
local newparam2 = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
local node = minetest.get_node(pos)
|
||||
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
|
||||
if locked then
|
||||
local meta = minetest.get_meta(pos)
|
||||
@ -644,6 +841,197 @@ 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
|
||||
|
||||
--[[
|
||||
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
|
||||
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
|
||||
|
||||
def.after_place_node = rdef.after_place_node or signs_lib.after_place_node
|
||||
|
||||
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
|
||||
end
|
||||
end
|
||||
|
||||
def.paramtype = rdef.paramtype or "light"
|
||||
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.paramtype2 = rdef.paramtype2 or "wallmounted"
|
||||
def.on_rotate = rdef.on_rotate or signs_lib.handle_rotation
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
opdef.selection_box = rdef.onpole_selection_box or opdef.selection_box
|
||||
opdef.node_box = rdef.onpole_node_box or opdef.selection_box
|
||||
|
||||
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.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)
|
||||
hdef.paramtype2 = "facedir"
|
||||
|
||||
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.node_box = rdef.hanging_node_box or rdef.hanging_selection_box or hcbox
|
||||
|
||||
hdef.groups.not_in_creative_inventory = 1
|
||||
hdef.tiles[3] = "signs_lib_hangers.png"
|
||||
hdef.mesh = string.gsub(string.gsub(hdef.mesh, "_facedir.obj", ".obj"), ".obj$", "_hanging.obj")
|
||||
|
||||
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.yaw = signs_lib.standard_yaw
|
||||
end
|
||||
|
||||
minetest.register_node(":"..name.."_hanging", hdef)
|
||||
table.insert(signs_lib.lbm_restore_nodes, name.."_hanging")
|
||||
end
|
||||
|
||||
if rdef.allow_widefont then
|
||||
table.insert(signs_lib.old_widefont_signs, name.."_widefont")
|
||||
table.insert(signs_lib.old_widefont_signs, name.."_widefont_onpole")
|
||||
end
|
||||
end
|
||||
|
||||
-- restore signs' text after /clearobjects and the like, the next time
|
||||
-- a block is reloaded by the server.
|
||||
|
||||
@ -678,12 +1066,7 @@ minetest.register_lbm({
|
||||
local oldfence = signs_lib.old_fenceposts[node.name]
|
||||
local newsign = signs_lib.old_fenceposts_replacement_signs[node.name]
|
||||
|
||||
for _, v in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
|
||||
local e = v:get_luaentity()
|
||||
if e and e.name == "signs_lib:text" then
|
||||
v:remove()
|
||||
end
|
||||
end
|
||||
signs_lib.delete_objects(pos)
|
||||
|
||||
local oldmeta = minetest.get_meta(pos):to_table()
|
||||
minetest.set_node(pos, {name = oldfence})
|
||||
@ -695,8 +1078,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({
|
||||
@ -746,12 +1143,7 @@ minetest.register_chatcommand("regen_signs", {
|
||||
|
||||
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
|
||||
signs_lib.delete_objects(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_items[node.name]
|
||||
if def and def.entity_info then
|
||||
|
176
compat.lua
Normal file
176
compat.lua
Normal 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
|
@ -1,3 +1,5 @@
|
||||
default
|
||||
intllib?
|
||||
screwdriver?
|
||||
streetspoles?
|
||||
streetlamps?
|
||||
|
1
init.lua
1
init.lua
@ -13,3 +13,4 @@ signs_lib.gettext = S
|
||||
dofile(signs_lib.path.."/api.lua")
|
||||
dofile(signs_lib.path.."/encoding.lua")
|
||||
dofile(signs_lib.path.."/standard_signs.lua")
|
||||
dofile(signs_lib.path.."/compat.lua")
|
||||
|
BIN
models/basic_signs wooden sign.blend
Normal file
BIN
models/basic_signs wooden sign.blend
Normal file
Binary file not shown.
@ -1,10 +1,10 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden sign.blend'
|
||||
# www.blender.org
|
||||
o text_entity_Plane
|
||||
v 0.406250 -0.281250 0.429688
|
||||
v -0.406250 -0.281250 0.429688
|
||||
v 0.406250 0.281250 0.429688
|
||||
v -0.406250 0.281250 0.429688
|
||||
v 0.406250 -0.281250 0.425781
|
||||
v -0.406250 -0.281250 0.425781
|
||||
v 0.406250 0.281250 0.425781
|
||||
v -0.406250 0.281250 0.425781
|
||||
vt 0.000000 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 1.000000 1.000000
|
||||
|
15
models/signs_lib_standard_wall_sign_entity_hanging.obj
Normal file
15
models/signs_lib_standard_wall_sign_entity_hanging.obj
Normal file
@ -0,0 +1,15 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden hanging sign.blend'
|
||||
# www.blender.org
|
||||
o Plane
|
||||
v 0.406250 -0.281250 -0.042969
|
||||
v -0.406250 -0.281250 -0.042969
|
||||
v 0.406250 0.281250 -0.042969
|
||||
v -0.406250 0.281250 -0.042969
|
||||
vt 0.000000 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vn 0.0000 -0.0000 -1.0000
|
||||
g Plane_Plane_None
|
||||
s off
|
||||
f 1/1/1 2/2/1 4/3/1 3/4/1
|
@ -1,10 +1,10 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden sign.blend'
|
||||
# www.blender.org
|
||||
o text_entity.001_Plane
|
||||
v 0.406250 -0.281250 0.742188
|
||||
v -0.406250 -0.281250 0.742188
|
||||
v 0.406250 0.281250 0.742188
|
||||
v -0.406250 0.281250 0.742188
|
||||
v 0.406250 -0.281250 0.738281
|
||||
v -0.406250 -0.281250 0.738281
|
||||
v 0.406250 0.281250 0.738281
|
||||
v -0.406250 0.281250 0.738281
|
||||
vt 0.000000 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 1.000000 1.000000
|
||||
|
@ -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
|
||||
|
62
models/signs_lib_standard_wall_sign_hanging.obj
Normal file
62
models/signs_lib_standard_wall_sign_hanging.obj
Normal file
@ -0,0 +1,62 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'basic_signs wooden hanging sign.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v 0.437500 -0.312500 0.031250
|
||||
v 0.437500 -0.312500 -0.031250
|
||||
v 0.437500 0.312500 0.031250
|
||||
v 0.437500 0.312500 -0.031250
|
||||
v -0.437500 -0.312500 0.031250
|
||||
v -0.437500 -0.312500 -0.031250
|
||||
v -0.437500 0.312500 0.031250
|
||||
v -0.437500 0.312500 -0.031250
|
||||
v 0.437500 -0.312500 0.031250
|
||||
v 0.437500 -0.312500 -0.031250
|
||||
v 0.437500 0.312500 0.031250
|
||||
v 0.437500 0.312500 -0.031250
|
||||
v -0.437500 -0.312500 0.031250
|
||||
v -0.437500 -0.312500 -0.031250
|
||||
v -0.437500 0.312500 0.031250
|
||||
v -0.437500 0.312500 -0.031250
|
||||
v 0.500000 0.312500 -0.000000
|
||||
v 0.500000 0.500000 0.000000
|
||||
v -0.500000 0.312500 -0.000000
|
||||
v -0.500000 0.500000 0.000000
|
||||
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 1.000000 0.812500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt -0.000000 0.812500
|
||||
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 1.0000 -0.0000 0.0000
|
||||
vn -1.0000 -0.0000 0.0000
|
||||
g Cube_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_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
|
||||
g Cube_Cube_hangers
|
||||
f 19/19/1 20/20/1 18/21/1 17/22/1
|
@ -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
|
||||
|
BIN
models/street_signs OM3.blend
Normal file
BIN
models/street_signs OM3.blend
Normal file
Binary file not shown.
@ -1,105 +1,44 @@
|
||||
-- Definitions for standard minetest_game wooden and steel wall signs
|
||||
|
||||
for _, onpole in ipairs({"", "_onpole"}) do
|
||||
|
||||
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, {
|
||||
signs_lib.register_sign("default:sign_wall_wood", {
|
||||
description = "Wooden wall sign",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "wallmounted",
|
||||
drawtype = "mesh",
|
||||
node_box = cbox,
|
||||
selection_box = cbox,
|
||||
mesh = "signs_lib_standard_wall_sign"..onpole..".obj",
|
||||
inventory_image = "signs_lib_sign_wall_wooden_inv.png",
|
||||
tiles = {
|
||||
"signs_lib_sign_wall_wooden.png",
|
||||
"signs_lib_sign_wall_wooden_edges.png",
|
||||
pole_mount_tex
|
||||
},
|
||||
inventory_image = "signs_lib_sign_wall_wooden_inv.png",
|
||||
wield_image = "signs_lib_sign_wall_wooden_inv.png",
|
||||
groups = wood_groups,
|
||||
default_color = "0",
|
||||
on_rightclick = signs_lib.construct_sign,
|
||||
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"
|
||||
entity_info = "standard",
|
||||
allow_hanging = true,
|
||||
allow_widefont = true,
|
||||
allow_onpole = true,
|
||||
allow_onpole_horizontal = true
|
||||
})
|
||||
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",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "wallmounted",
|
||||
drawtype = "mesh",
|
||||
node_box = cbox,
|
||||
selection_box = cbox,
|
||||
mesh = "signs_lib_standard_wall_sign"..onpole..".obj",
|
||||
inventory_image = "signs_lib_sign_wall_steel_inv.png",
|
||||
tiles = {
|
||||
"signs_lib_sign_wall_steel.png",
|
||||
"signs_lib_sign_wall_steel_edges.png",
|
||||
pole_mount_tex
|
||||
},
|
||||
inventory_image = "signs_lib_sign_wall_steel_inv.png",
|
||||
wield_image = "signs_lib_sign_wall_steel_inv.png",
|
||||
groups = wood_groups,
|
||||
default_color = "0",
|
||||
on_rightclick = signs_lib.construct_sign,
|
||||
on_construct = signs_lib.construct_sign,
|
||||
on_destruct = signs_lib.destruct_sign,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
signs_lib.after_place_node(pos, placer, itemstack, pointed_thing, true)
|
||||
end,
|
||||
on_receive_fields = signs_lib.receive_fields,
|
||||
on_punch = signs_lib.update_sign,
|
||||
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"
|
||||
groups = signs_lib.standard_steel_groups,
|
||||
sounds = signs_lib.standard_steel_sign_sounds,
|
||||
locked = true,
|
||||
entity_info = "standard",
|
||||
allow_hanging = true,
|
||||
allow_widefont = true,
|
||||
allow_onpole = true,
|
||||
allow_onpole_horizontal = true
|
||||
})
|
||||
table.insert(signs_lib.lbm_restore_nodes, "default:sign_wall_steel"..onpole)
|
||||
end
|
||||
|
||||
minetest.register_alias("signs:sign_hanging", "default:sign_wall_wood_hanging")
|
||||
minetest.register_alias("basic_signs:hanging_sign", "default:sign_wall_wood_hanging")
|
||||
|
||||
table.insert(signs_lib.lbm_restore_nodes, "signs:sign_hanging")
|
||||
table.insert(signs_lib.lbm_restore_nodes, "basic_signs:hanging_sign")
|
||||
|
||||
-- insert the old wood sign-on-fencepost into signs_lib's conversion LBM
|
||||
|
||||
table.insert(signs_lib.old_fenceposts_with_signs, "signs:sign_post")
|
||||
signs_lib.old_fenceposts["signs:sign_post"] = "default:fence_wood"
|
||||
signs_lib.old_fenceposts_replacement_signs["signs:sign_post"] = "default:sign_wall_wood_onpole"
|
||||
|
BIN
textures/signs_lib_blank.png
Normal file
BIN
textures/signs_lib_blank.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 68 B |
BIN
textures/signs_lib_hangers.png
Normal file
BIN
textures/signs_lib_hangers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 173 B |
BIN
textures/signs_lib_switch_interm.png
Normal file
BIN
textures/signs_lib_switch_interm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.5 KiB |
BIN
textures/signs_lib_switch_off.png
Normal file
BIN
textures/signs_lib_switch_off.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
textures/signs_lib_switch_on.png
Normal file
BIN
textures/signs_lib_switch_on.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.0 KiB |
BIN
textures/signs_lib_wide_font_overlay_inv.png
Normal file
BIN
textures/signs_lib_wide_font_overlay_inv.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 979 B |
Reference in New Issue
Block a user