diff options
Diffstat (limited to 'stairsplus_convert.lua')
-rw-r--r-- | stairsplus_convert.lua | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/stairsplus_convert.lua b/stairsplus_convert.lua new file mode 100644 index 0000000..7d6b94b --- /dev/null +++ b/stairsplus_convert.lua @@ -0,0 +1,133 @@ +-- 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 |