forked from minetest-mods/moreblocks
134 lines
4.0 KiB
Lua
134 lines
4.0 KiB
Lua
-- Function to convert all stairs/slabs/etc nodes from
|
|
-- inverted, wall, etc to regular + 6d facedir
|
|
|
|
local dirs1 = { 21, 20, 23, 22, 21 }
|
|
local dirs2 = { 15, 8, 17, 6, 15 }
|
|
local dirs3 = { 14, 11, 16, 5, 14 }
|
|
|
|
function register_6dfacedir_conversion(modname, material)
|
|
--print("Register stairsplus 6d facedir conversion")
|
|
--print('ABM for '..modname..' "'..material..'"')
|
|
|
|
local objects_list1 = {
|
|
modname..":slab_" .. material .. "_inverted",
|
|
modname..":slab_" .. material .. "_quarter_inverted",
|
|
modname..":slab_" .. material .. "_three_quarter_inverted",
|
|
modname..":stair_" .. material .. "_inverted",
|
|
modname..":stair_" .. material .. "_wall",
|
|
modname..":stair_" .. material .. "_wall_half",
|
|
modname..":stair_" .. material .. "_wall_half_inverted",
|
|
modname..":stair_" .. material .. "_half_inverted",
|
|
modname..":stair_" .. material .. "_right_half_inverted",
|
|
modname..":panel_" .. material .. "_vertical",
|
|
modname..":panel_" .. material .. "_top",
|
|
}
|
|
|
|
local objects_list2 = {
|
|
modname..":slab_" .. material .. "_wall",
|
|
modname..":slab_" .. material .. "_quarter_wall",
|
|
modname..":slab_" .. material .. "_three_quarter_wall",
|
|
modname..":stair_" .. material .. "_inner_inverted",
|
|
modname..":stair_" .. material .. "_outer_inverted",
|
|
modname..":micro_" .. material .. "_top"
|
|
}
|
|
|
|
for j in ipairs(objects_list1) do
|
|
local flip_upside_down = false
|
|
local flip_to_wall = false
|
|
|
|
local object = objects_list1[j]
|
|
local dest_object = objects_list1[j]
|
|
|
|
if string.find(dest_object, "_inverted") then
|
|
flip_upside_down = true
|
|
dest_object = string.gsub(dest_object, "_inverted", "")
|
|
end
|
|
|
|
if string.find(dest_object, "_top") then
|
|
flip_upside_down = true
|
|
dest_object = string.gsub(dest_object, "_top", "")
|
|
end
|
|
|
|
if string.find(dest_object, "_wall") then
|
|
flip_to_wall = true
|
|
dest_object = string.gsub(dest_object, "_wall", "")
|
|
end
|
|
|
|
if string.find(dest_object, "_vertical") then
|
|
flip_to_wall = true
|
|
dest_object = string.gsub(dest_object, "_vertical", "")
|
|
end
|
|
|
|
if string.find(dest_object, "_half") and not string.find(dest_object, "_right_half") then
|
|
dest_object = string.gsub(dest_object, "_half", "_right_half")
|
|
elseif string.find(dest_object, "_right_half") then
|
|
dest_object = string.gsub(dest_object, "_right_half", "_half")
|
|
end
|
|
|
|
--print(" +---> convert "..object)
|
|
--print(" | to "..dest_object)
|
|
|
|
minetest.register_abm({
|
|
nodenames = { object },
|
|
interval = 1,
|
|
chance = 1,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local fdir = node.param2 or 0
|
|
|
|
if flip_upside_down and not flip_to_wall then
|
|
nfdir = dirs1[fdir+2]
|
|
elseif flip_to_wall and not flip_upside_down then
|
|
nfdir = dirs2[fdir+1]
|
|
elseif flip_to_wall and flip_upside_down then
|
|
nfdir = dirs3[fdir+2]
|
|
end
|
|
minetest.env:add_node(pos, {name = dest_object, param2 = nfdir})
|
|
end
|
|
})
|
|
end
|
|
|
|
for j in ipairs(objects_list2) do
|
|
local flip_upside_down = false
|
|
local flip_to_wall = false
|
|
|
|
local object = objects_list2[j]
|
|
local dest_object = objects_list2[j]
|
|
|
|
if string.find(dest_object, "_inverted") then
|
|
flip_upside_down = true
|
|
dest_object = string.gsub(dest_object, "_inverted", "")
|
|
end
|
|
|
|
if string.find(dest_object, "_top") then
|
|
flip_upside_down = true
|
|
dest_object = string.gsub(dest_object, "_top", "")
|
|
end
|
|
|
|
if string.find(dest_object, "_wall") then
|
|
flip_to_wall = true
|
|
dest_object = string.gsub(dest_object, "_wall", "")
|
|
end
|
|
|
|
--print(" +---> convert "..object)
|
|
--print(" | to "..dest_object)
|
|
|
|
minetest.register_abm({
|
|
nodenames = { object },
|
|
interval = 1,
|
|
chance = 1,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local fdir = node.param2
|
|
local nfdir = 20
|
|
|
|
if flip_upside_down and not flip_to_wall then
|
|
nfdir = dirs1[fdir+1]
|
|
elseif flip_to_wall and not flip_upside_down then
|
|
nfdir = dirs2[fdir+2]
|
|
|
|
end
|
|
minetest.env:add_node(pos, {name = dest_object, param2 = nfdir})
|
|
end
|
|
})
|
|
end
|
|
end
|