aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authororwell96 <mono96.mml@gmail.com>2017-02-28 13:39:38 +0100
committerorwell96 <mono96.mml@gmail.com>2017-02-28 13:39:38 +0100
commitaa2ec0fc0337de5facb7ebf9adb3dca4f9fefdaf (patch)
tree4920b3e5167162fc53109924b85ceaaf80222334 /Makefile
parentbe1ac1e68ed41945d0dfa68148186856497f2936 (diff)
Add ceiling-mounted signal
This is the wall signal as ceiling variant. Because the trackdb can only save 4 rotation values, we need a ceiling version of this.
Diffstat (limited to 'Makefile')
0 files changed, 0 insertions, 0 deletions
a> 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