
local GUI = require("GUI")
local system = require("System")
local screen = require("Screen")
local color = require("Color")
local bigLetters = require("BigLetters")
local color = require("Color")
local system = require("System")

---------------------------------------------------------------------------------

local function drawcircle(x0, y0, radius, color)
	local x = radius - 1
	local y = 0
	local dx = 1
	local dy = 1
	local err = dx - bit32.lshift(radius, 1)

	while x >= y do
		screen.drawSemiPixelLine(x0 - x, y0 + y, x0 + x, y0 + y, color)
		screen.drawSemiPixelLine(x0 - y, y0 + x, x0 + y, y0 + x, color)
		screen.drawSemiPixelLine(x0 - x, y0 - y, x0 + x, y0 - y, color)
		screen.drawSemiPixelLine(x0 - y, y0 - x, x0 + y, y0 - x, color)

		if err <= 0 then
			y = y + 1
			err = err + dy
			dy = dy + 2
		end

		if err > 0 then
			x = x - 1
			dx = dx + 2
			err = err + dx - bit32.lshift(radius, 1)
		end
	end
end

local radius = 30
local size = radius * 2
local points = {}
local players = {}
local lastPlayer

local workspace, window = system.addWindow(GUI.filledWindow(1, 1, 104, 34, 0x1E1E1E))

local layout = window:addChild(GUI.layout(1, 1, window.width, window.height, 1, 1))
layout:setDirection(1, 1, GUI.DIRECTION_HORIZONTAL)
layout:setSpacing(1, 1, 8)

local circle = layout:addChild(GUI.object(1, 1, size, math.floor(size / 2)))

local function getColor()
	return lastPlayer and players[lastPlayer].color or 0x0092FF
end

circle.draw = function()
	local r, limit = radius, 6
	for i = 1, limit do
		drawcircle(circle.x + radius - 1, circle.y * 2 + radius - 2, r, i == limit and 0xFF4940 or i % 2 == 0 and 0x0 or 0xE1E1E1)
		r = r - 5
	end

	for i = 1, #points do
		screen.drawText(circle.x + points[i][1], circle.y + points[i][2], getColor(), "●")
	end
end

local counter = layout:addChild(GUI.object(1, 1, 24, 5))
counter.draw = function()
	local radius = 4
	drawcircle(counter.x + radius, counter.y * 2 + radius, radius, getColor())
	bigLetters.drawText(counter.x + radius * 2 + 4, counter.y, 0xE1E1E1, lastPlayer and tostring(players[lastPlayer].score) or "0")
end

circle.eventHandler = function(workspace, circle, e1, e2, e3, e4, e5, e6)
	if e1 == "touch" then
		e3, e4 = math.ceil(e3), math.ceil(e4)
		
		lastPlayer = e6
		players[lastPlayer] = players[lastPlayer] or {
			color = color.HSBToInteger(math.random(360), 1, 1),
			score = 0
		}

		players[lastPlayer].score = math.max(0, radius - math.floor(math.sqrt((e3 - (circle.x + radius)) ^ 2 + (e4 * 2 - (circle.y * 2 + radius)) ^ 2)))

		table.insert(points, {e3 - circle.x, e4 - circle.y})
		workspace:draw()
	end
end

window.onResize = function(width, height)
	window.backgroundPanel.width = width
	window.backgroundPanel.height = height

	layout.width = width
	layout.height = height
end

---------------------------------------------------------------------------------

workspace:draw()
