aboutsummaryrefslogtreecommitdiff
path: root/builtin/fstk
Commit message (Expand)AuthorAge
* Add Lua errors to error dialogrubenwardy2015-06-29
* Add tooltips to main menu subgames button barWuzzy2014-11-09
* Add support for exiting formspecs by doubleclicking outsidesapier2014-06-12
* Fix a bunch of small bugs due to mainmenu cleanupsapier2014-05-24
* Add formspec toolkit and refactor mainmenu to use itsapier2014-05-16
d='n62' href='#n62'>62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 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