2023-09-18 21:58:40 +03:00

104 lines
2.8 KiB
Lua

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()