diff --git a/Applications/Configurator/Configurator.lua b/Applications/Configurator/Configurator.lua new file mode 100644 index 00000000..ca55dee7 --- /dev/null +++ b/Applications/Configurator/Configurator.lua @@ -0,0 +1,201 @@ + +local component = require("component") +local gpu = component.gpu +local ecs = require("ECSAPI") +local image = require("image") +local unicode = require("unicode") +local event = require("event") +local palette = require("palette") + +------------------------------------------------------------------------------------------------ + +local xSize, ySize = gpu.getResolution() + +local width, height = 80, 25 +local x, y = math.floor(xSize /2 - width / 2), math.floor(ySize / 2 - height / 2) +local xCenter, yCenter = math.floor(xSize / 2), math.floor(ySize / 2) + +local oldPixels = ecs.rememberOldPixels(x, y, x + width + 1, y + height) + +local OS_Logo = image.load("System/OS/Installer/OS_Logo.png") + +local offset = 3 + +local buttonColor = 0x888888 +local buttonPressColor = ecs.colors.blue + +------------------------------------------------------------------------------------------------ + +--СОЗДАНИЕ ОБЪЕКТОВ +local obj = {} +local function newObj(class, name, ...) + obj[class] = obj[class] or {} + obj[class][name] = {...} +end + +local function clear() + obj = {} + ecs.blankWindow(x, y, width, height) +end + +local function drawTablicu(y, users) + local width = 40 + local limit = 7 + + local x = math.ceil(xCenter - width / 2) + + local yPos = y + ecs.square(x, yPos, width, 1, ecs.colors.blue) + ecs.colorText(x + 1, yPos, 0xffffff, "Пользователи ("..#users.." из "..limit..")") + + yPos = yPos + 1 + ecs.square(x, yPos, width, limit * 2 - 1, 0xffffff) + + for i = 1, limit do + if users[i] then + ecs.colorText(x + 1, yPos, 0x000000, ecs.stringLimit("end", users[i], width - 2)) + end + if i < limit then + ecs.colorText(x, yPos + 1, 0xaaaaaa, string.rep("─", width)) + end + + yPos = yPos + 2 + end +end + +------------------------------------------------------------------------------------------------ + +local function stage1() + clear() + image.draw(math.ceil(xSize / 2 - 15), y + 2, OS_Logo) + + local yPos = y + height - 6 + gpu.setForeground(ecs.windowColors.usualText); gpu.setBackground(ecs.windowColors.background); ecs.centerText("x", yPos, "Добро пожаловать в программу настройки MineOS!") + yPos = yPos + 2 + + local name + name = "Далее"; newObj("Buttons", name, ecs.drawAdaptiveButton("auto", yPos, offset, 1, name, buttonColor, 0xffffff)) + + while true do + local e = {event.pull()} + if e[1] == "touch" then + if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][name][1], obj["Buttons"][name][2], obj["Buttons"][name][3], obj["Buttons"][name][4] ) then + ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff) + os.sleep(0.3) + return + end + elseif e[1] == "key_down" then + if e[4] == 28 then + ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff) + os.sleep(0.3) + return + end + end + end +end + +local function stage2() + clear() + local users = {} + drawTablicu(y + 2, users) + + local yPos = y + height - 7 + gpu.setForeground(ecs.windowColors.usualText); gpu.setBackground(ecs.windowColors.background) + ecs.centerText("x", yPos, "Это биометрическая защита компьютера."); yPos = yPos + 1 + ecs.centerText("x", yPos, "Прикоснитесь к экрану - и система зарегистрирует вас."); yPos = yPos + 1 + + local yPos = yPos + 1 + local name = "Далее"; newObj("Buttons", name, ecs.drawAdaptiveButton("auto", yPos, offset, 1, name, buttonColor, 0xffffff)) + + while true do + local e = {event.pull()} + if e[1] == "touch" then + if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][name][1], obj["Buttons"][name][2], obj["Buttons"][name][3], obj["Buttons"][name][4] ) then + ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff) + if #users == 0 then table.insert(users, e[6]) end + drawTablicu(y + 2, users) + os.sleep(0.3) + return users + else + if #users < 7 then + local exists + for key, val in pairs(users) do + if e[6] == val then exists = true; break end + end + if not exists then + table.insert(users, e[6]) + drawTablicu(y + 2, users) + end + end + end + end + end +end + +local function drawSampleCode(y, background, foreground) + local shirina = width - 10 + local visota = 14 + local x = math.floor(xCenter - shirina / 2) + ecs.square(x, y, shirina, visota, background) + ecs.colorText(x + 1, y + 1, 0xff0000, "/#") + ecs.colorText(x + 4, y + 1, foreground, "Hello world!") +end + +local function stage3() + + local background, foreground = 0x262626, 0xffffff + + clear() + + while true do + drawSampleCode(y + 2, background, foreground) + + local yPos = y + height - 7 + gpu.setForeground(ecs.windowColors.usualText); gpu.setBackground(ecs.windowColors.background) + ecs.centerText("x", yPos, "Вы можете выбрать цвет текста и фона консоли."); yPos = yPos + 1 + ecs.centerText("x", yPos, "Пример кода выше."); yPos = yPos + 1 + yPos = yPos + 1 + + obj = {} + local xPos = xCenter - 28 + local name = "Изменить текст"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, offset, 1, name, foreground, 0xffffff - foreground)); xPos = xPos + unicode.len(name) + offset * 3 + name = "Изменить фон"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, offset, 1, name, background, 0xffffff - background)); xPos = xPos + unicode.len(name) + offset * 3 + name = "Далее"; newObj("Buttons", name, ecs.drawAdaptiveButton(xPos, yPos, offset, 1, name, buttonColor, 0xffffff)); xPos = xPos + unicode.len(name) + offset * 3 + + local exit + while true do + if exit then break end + local e = {event.pull()} + if e[1] == "touch" then + for name, val in pairs(obj["Buttons"]) do + if ecs.clickedAtArea(e[3], e[4], obj["Buttons"][name][1], obj["Buttons"][name][2], obj["Buttons"][name][3], obj["Buttons"][name][4] ) then + ecs.drawAdaptiveButton(obj["Buttons"][name][1], obj["Buttons"][name][2], offset, 1, name, buttonPressColor, 0xffffff) + os.sleep(0.3) + + if name == "Изменить текст" then + local color = palette.draw("auto", "auto", foreground) + if color then foreground = color end + exit = true + break + elseif name == "Изменить фон" then + local color = palette.draw("auto", "auto", background) + if color then background = color end + exit = true + break + else + return background, foreground + end + end + end + end + end + end +end + +------------------------------------------------------------------------------------------------ + +stage1() +stage2() +stage3() + +