
pkarcs = {}

function nb(n)
	return n/16-1/2
end

local source_list = {
	{"black", "Darkened", color1, 40, 36, 33}, 
	{"blue", "Blue", color2, 0, 0, 255},
	{"green", "Green", color3, 0, 255, 0}, 
	{"white", "White", color4, 245, 245, 245}, 
	{"orange", "Orange", color5, 255, 97, 3}, 
	{"red", "Red", color6, 255, 0, 0}, 
	{"yellow", "Yellow", color7, 255, 255, 0}, 
	{"pink", "Pink", color8, 255, 105, 180}
}

for i in ipairs(source_list) do
	local color = source_list[i][1]
local nodename = source_list[i][1]
local name = source_list[i][1]
	local desc = source_list[i][2]
	local desc2 = source_list[i][2]
	local colour = source_list[i][3]
	local red = source_list[i][4]
	local green = source_list[i][5]
	local blue = source_list[i][6]	

	minetest.register_node("pkarcs:".. color .."_arc", {
		description = desc2 .." Arc",
		paramtype = "light",
		paramtype2 = "facedir",
		drawtype = "nodebox",
		node_box = {
			type = "fixed",
			fixed = {
				{ nb(0),  nb(0),  nb(0),     nb(1),  nb(16), nb(16) },
				{ nb(1),  nb(4),  nb(0),     nb(2),  nb(16), nb(16) },
				{ nb(2),  nb(7),  nb(0),     nb(3),  nb(16), nb(16) },
				{ nb(3),  nb(8),  nb(0),     nb(4),  nb(16), nb(16) },
				{ nb(4),  nb(10), nb(0),     nb(5),  nb(16), nb(16) },
				{ nb(5),  nb(11), nb(0),     nb(6),  nb(16), nb(16) },
				{ nb(6),  nb(12), nb(0),     nb(8),  nb(16), nb(16) },
				{ nb(8),  nb(13), nb(0),     nb(9),  nb(16), nb(16) },
				{ nb(9),  nb(14), nb(0),     nb(12), nb(16), nb(16) },
				{ nb(12), nb(15), nb(0),     nb(16), nb(16), nb(16) },
			}
		},
		tiles = {"color_white.png^[colorize:#"..colour..":70"},
		is_ground_content = true,
		groups = {snappy = 2, choppy = 2, wool = 2},
		sounds = default.node_sound_defaults(),
	  oddly_breakable_by_hand = 1,
	  dig_immediate = 3,
     wield_image = "color_handwhite.png^(color_handwhite2.png^[colorize:#"..colour..":70)",
		 wield_scale = {x=1,y=1,z=0.5},
      inventory_image = "arc.png^[colorize:#"..colour..":70",

     on_place = function(itemstack, placer, pointed_thing)
			 if pointed_thing.type ~= "node" then
				return itemstack
			end

			local p1 = pointed_thing.under
			local p0 = pointed_thing.above
			local param2 = 0

			local placer_pos = placer:getpos()
			if placer_pos then
				local dir = {
					x = p1.x - placer_pos.x,
					y = p1.y - placer_pos.y,
					z = p1.z - placer_pos.z
				}
				param2 = minetest.dir_to_facedir(dir)
			end

			if p0.y-1 == p1.y then
				param2 = param2 + 20
				if param2 == 21 then
					param2 = 23
				elseif param2 == 23 then
					param2 = 21
				end
			end

			local NROT = 4 -- Number of possible "rotations" (4 Up down left right)
			local rot = param2 % NROT
			local wall = math.floor(param2/NROT)
			if rot >=3 then
				rot = 0
			else 
				rot = rot +1
			end
			param2 = wall*NROT+rot

			return minetest.item_place(itemstack, placer, pointed_thing, param2)
		end,

	})

-- outer arc

	minetest.register_node("pkarcs:"..nodename.."_outarc", {
		description = desc.." Out Arc",
		paramtype = "light",
		paramtype2 = "facedir",
		drawtype = "nodebox",
		node_box = {
			type = "fixed",
			fixed = {
				{ nb(0),  nb(0),  nb(16),     nb(1),  nb(16), nb(16-1)  },
				{ nb(0),  nb(4),  nb(16),     nb(2),  nb(16), nb(16-2)  },
				{ nb(0),  nb(7),  nb(16),     nb(3),  nb(16), nb(16-3)  },
				{ nb(0),  nb(8),  nb(16),     nb(4),  nb(16), nb(16-4)  },
				{ nb(0),  nb(10), nb(16),     nb(5),  nb(16), nb(16-5)  },
				{ nb(0),  nb(11), nb(16),     nb(6),  nb(16), nb(16-6)  },
				{ nb(0),  nb(12), nb(16),     nb(8),  nb(16), nb(16-8)  },
				{ nb(0),  nb(13), nb(16),     nb(9),  nb(16), nb(16-9)  },
				{ nb(0),  nb(14), nb(16),     nb(12), nb(16), nb(16-12) },
				{ nb(0),  nb(15), nb(16),     nb(16), nb(16), nb(16-16) },
			}
		},
		 tiles = {"color_white.png^[colorize:#"..colour..":70"},
		is_ground_content = true,
		groups = {snappy = 2, choppy = 2, wool = 2},
		sounds = default.node_sound_defaults(),
	  oddly_breakable_by_hand = 1,
	  dig_immediate = 3,
wield_image = "color_handwhite.png^(color_handwhite2.png^[colorize:#"..colour..":70)",
		 wield_scale = {x=1,y=1,z=0.5},
      inventory_image = "arcout.png^[colorize:#"..colour..":70",

		on_place = function(itemstack, placer, pointed_thing)
			if pointed_thing.type ~= "node" then
				return itemstack
			end

			local p1 = pointed_thing.under
			local p0 = pointed_thing.above
			local param2 = 0

			local placer_pos = placer:getpos()
			if placer_pos then
				local dir = {
					x = p1.x - placer_pos.x,
					y = p1.y - placer_pos.y,
					z = p1.z - placer_pos.z
				}
				param2 = minetest.dir_to_facedir(dir)
			end

			if p0.y-1 == p1.y then
				param2 = param2 + 20
				if param2 == 21 then
					param2 = 23
				elseif param2 == 23 then
					param2 = 21
				end
			end

			local NROT = 4 -- Number of possible "rotations" (4 Up down left right)
			local rot = param2 % NROT
			local wall = math.floor(param2/NROT)
			if rot >=3 then
				rot = 0
			else 
				rot = rot +1
			end
			param2 = wall*NROT+rot

			return minetest.item_place(itemstack, placer, pointed_thing, param2)
		end,

	})

-- inner arc

	minetest.register_node("pkarcs:"..nodename.."_inarc", {
		description = desc.." In Arc",
		paramtype = "light",
		paramtype2 = "facedir",
		drawtype = "nodebox",
		node_box = {
			type = "fixed",
			fixed = {
				{ nb(0),  nb(0),  nb(16),     nb(1),  nb(16), nb(0)    },
				{ nb(0),  nb(0),  nb(16),     nb(16), nb(16), nb(16-1) },

				{ nb(0),  nb(4),  nb(16),     nb(2),  nb(16), nb(0)    },
				{ nb(0),  nb(4),  nb(16),     nb(16), nb(16), nb(16-2) },

				{ nb(0),  nb(7),  nb(16),     nb(3),  nb(16), nb(0)    },
				{ nb(0),  nb(7),  nb(16),     nb(16), nb(16), nb(16-3) },

				{ nb(0),  nb(8),  nb(16),     nb(4),  nb(16), nb(0)    },
				{ nb(0),  nb(8),  nb(16),     nb(16), nb(16), nb(16-4) },

				{ nb(0),  nb(10), nb(16),     nb(5),  nb(16), nb(0)    },
				{ nb(0),  nb(10), nb(16),     nb(16), nb(16), nb(16-5) },

				{ nb(0),  nb(11), nb(16),     nb(6),  nb(16), nb(0)    },
				{ nb(0),  nb(11), nb(16),     nb(16), nb(16), nb(16-6) },

				{ nb(0),  nb(12), nb(16),     nb(8),  nb(16), nb(0)    },
				{ nb(0),  nb(12), nb(16),     nb(16), nb(16), nb(16-8) },

				{ nb(0),  nb(13), nb(16),     nb(9),  nb(16), nb(0)    },
				{ nb(0),  nb(13), nb(16),     nb(16), nb(16), nb(16-9) },

				{ nb(0),  nb(14), nb(16),     nb(12), nb(16), nb(0)     },
				{ nb(0),  nb(14), nb(16),     nb(16), nb(16), nb(16-12) },

				{ nb(0),  nb(15), nb(16),     nb(16), nb(16), nb(16-16) },
			}
		},
		tiles = {"color_white.png^[colorize:#"..colour..":70"},
		is_ground_content = true,
		groups = {snappy = 2, choppy = 2, wool = 2},
		sounds = default.node_sound_defaults(),
	 oddly_breakable_by_hand = 1,
	 dig_immediate = 3,
  wield_image = "color_handwhite.png^(color_handwhite2.png^[colorize:#"..colour..":70)",
		 wield_scale = {x=1,y=1,z=0.5},
  inventory_image = "arcin.png^[colorize:#"..colour..":70",

		on_place = function(itemstack, placer, pointed_thing)
			if pointed_thing.type ~= "node" then
				return itemstack
			end

			local p1 = pointed_thing.under
			local p0 = pointed_thing.above
			local param2 = 0

			local placer_pos = placer:getpos()
			if placer_pos then
				local dir = {
					x = p1.x - placer_pos.x,
					y = p1.y - placer_pos.y,
					z = p1.z - placer_pos.z
				}
				param2 = minetest.dir_to_facedir(dir)
			end

			if p0.y-1 == p1.y then
				param2 = param2 + 20
				if param2 == 21 then
					param2 = 23
				elseif param2 == 23 then
					param2 = 21
				end
			end

			local NROT = 4 -- Number of possible "rotations" (4 Up down left right)
			local rot = param2 % NROT
			local wall = math.floor(param2/NROT)
			if rot >=3 then
				rot = 0
			else 
				rot = rot +1
			end
			param2 = wall*NROT+rot

			return minetest.item_place(itemstack, placer, pointed_thing, param2)
		end,

	})

	
end
