
digicontrol = {}

digicontrol.selection_box = {
	type = "fixed",
	fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }
}

digicontrol.node_box = {
	type = "fixed",
	fixed = {
		{ -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 },
		{ -6/16, -7/16, -6/16, 6/16, -6/16, 6/16 }
	},
}

local BASE_RULES = {
	{x = 0, y = 0, z = 1},  -- Up    (side 0)
	{x = 1, y = 0, z = 0},  -- Right (side 1)
	{x = 0, y = 0, z =-1},  -- Down  (side 2)
	{x =-1, y = 0, z = 0}   -- Left  (side 3)
}

digicontrol.all_rules = BASE_RULES

function digicontrol.get_rule(side, param2)
	if param2 >= 4 then return nil end
	return BASE_RULES[((side + param2) % 4) + 1]
end

function digicontrol.get_side(pos, from, param2)
	if param2 >= 4 then return nil end
	local dir = vector.subtract(from, pos)
	local facedir = minetest.dir_to_facedir(dir)
	return ((facedir - param2) + 4) % 4
end

function digicontrol.on_rotate(pos, node, _, mode, new_param2)
	if mode ~= 1 then return false end
	node.param2 = new_param2
	minetest.swap_node(pos, node)
	digilines.update_autoconnect(pos)
	return true
end

local MP = minetest.get_modpath("digicontrol")

-- Overrides to digilines functions
dofile(MP.."/override.lua")

-- Compatibility for replacing digiline_routing
dofile(MP.."/compatibility.lua")

-- Digicontrol nodes
dofile(MP.."/diode.lua")
dofile(MP.."/splitter.lua")
dofile(MP.."/trisplitter.lua")
dofile(MP.."/filter.lua")
dofile(MP.."/limiter.lua")

-- Crafting recipes
dofile(MP.."/crafts.lua")
