collision = {}
collision.colliders = {}

collision.debug = false

function collision.draw()
	for _, v in pairs(collision.colliders) do
		gfx.rect(v.x, v.y, v.w, v.h, gfx.COLOR_BLUE)
	end
end

function collision.add(tbl)
	table.insert(collision.colliders, tbl)
end

function collision.remove(index)
	table.remove(collision.colliders, index)
end

function collision.move(aabb, dx, dy)
	local normal = { x = 0, y = 0 }
	if aabb.normal ~= nil then
		aabb.normal = normal
	end

	-- move x
	aabb.x = aabb.x + dx

	for _, v in pairs(collision.colliders) do
		if aabb ~= v and collision.aabb_check(aabb, v) then
			if dx > 0 then
				aabb.x = v.x - aabb.w
				normal.x = -1
			elseif dx < 0 then
				aabb.x = v.x + v.w
				normal.x = 1
			end
		end
	end

	-- move y
	aabb.y = aabb.y + dy

	for _, v in pairs(collision.colliders) do
		if aabb ~= v and collision.aabb_check(aabb, v) then
			if dy > 0 then
				aabb.y = v.y - aabb.h
				normal.y = -1
			elseif dy < 0 then
				aabb.y = v.y + v.h
				normal.y = 1
			end
		end
	end

	return normal
end

function collision.aabb_check(a, b)
	return a.x < b.x + b.w and b.x < a.x + a.w and a.y < b.y + b.h and b.y < a.y + a.h
end
