mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-20 11:09:21 +01:00
104 lines
2.8 KiB
Lua
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()
|