Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local c = require("component")
- local event = require("event")
- local geo, holo
- local gpu = c.gpu
- local ecs = require("ECSAPI")
- local palette = require("palette")
- local computer = require("computer")
- local args = {...}
- --Проверка на наличие нужных устройств
- if not c.isAvailable("geolyzer") or not c.isAvailable("hologram") then
- ecs.error("Подключите геоанализатор и голографический проектор 2-ого уровня")
- return
- else
- geo = c.geolyzer
- holo = c.hologram
- end
- -------------------------
- local massiv = {}
- local yModifyer = -20
- local scales = {0.33, 0.75, 1, 1.5, 2, 2.5, 3}
- local currentScale = 1
- local countOfScales = #scales
- local xScanFrom = tonumber(args[1]) or -24
- local xScanTo = tonumber(args[2]) or 23
- local zScanFrom, zScanTo = xScanFrom, xScanTo
- local xSize, ySize = gpu.getResolution()
- local yCenter = math.floor(ySize / 2)
- ---------------------------------------
- local function clear()
- holo.clear()
- end
- local function getMemory()
- local totalMemory = computer.totalMemory() / 1024
- local freeMemory = computer.freeMemory() / 1024
- local usedMemory = totalMemory - freeMemory
- local stro4ka = math.ceil(usedMemory).."/"..math.floor(totalMemory).."KB"
- totalMemory, freeMemory, usedMemory = nil, nil, nil
- return stro4ka
- end
- local function changeScale()
- if currentScale < countOfScales then
- currentScale = currentScale + 1
- else
- currentScale = 1
- end
- holo.setScale(scales[currentScale])
- end
- local function displayRow(x, yModifyer, z, tablica)
- local color
- for i = 1, #tablica do
- massiv[x][z][i] = math.ceil(massiv[x][z][i])
- if tablica[i] > 0 then
- color = 1
- if tablica[i] > 4 then
- color = 2
- end
- if tablica[i + yModifyer] then
- holo.set(xScanTo - x + 1, i + yModifyer, zScanTo - z + 1, color)
- end
- end
- end
- color = nil
- tablica = nil
- end
- local function displayAllRows()
- clear()
- for x, val in pairs(massiv) do
- for z, val2 in pairs(massiv[x]) do
- displayRow(x, yModifyer, z, val2)
- end
- end
- end
- local function scan()
- clear()
- ecs.clearScreen(0xffffff)
- local barWidth = math.floor(xSize / 3 * 2)
- local percent = 0
- local xBar, yBar = math.floor(xSize/2 - barWidth / 2), yCenter
- local countOfAll = (math.abs(xScanFrom) + math.abs(xScanTo) + 1) ^ 2
- local counter = 0
- for x = xScanFrom, xScanTo do
- massiv[x] = {}
- for z = zScanFrom, zScanTo do
- massiv[x][z] = geo.scan(x, z, true)
- for i = 1, #massiv[x][z] do
- displayRow(x, yModifyer, z, massiv[x][z])
- end
- percent = counter / countOfAll * 100
- ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, percent)
- gpu.setForeground(0x444444)
- gpu.setBackground(0xffffff)
- ecs.centerText("x", yBar + 1, " Сканирование стека на x = "..x..", z = "..z.." ")
- ecs.centerText("x", yBar + 3, " "..math.floor(percent).."% завершено ")
- ecs.centerText("x", yBar + 2, " "..getMemory().." RAM ")
- counter = counter + 1
- end
- end
- end
- local obj = {}
- local function newObj(class, name, ...)
- obj[class] = obj[class] or {}
- obj[class][name] = {...}
- end
- local currentHoloColor = ecs.colors.lime
- local function changeColorTo(color)
- currentHoloColor = color
- holo.setPaletteColor(1, color)
- holo.setPaletteColor(2, 0xffffff - color)
- end
- local function main()
- ecs.clearScreen(0xffffff)
- local yPos = yCenter - 14
- newObj("buttons", "Сканировать местность", ecs.drawAdaptiveButton("auto", yPos, 3, 1, "Сканировать местность", 0x444444, 0xffffff)); yPos = yPos + 4
- newObj("buttons", "Масштаб", ecs.drawAdaptiveButton("auto", yPos, 3, 1, "Масштаб", 0x444444, 0xffffff)); yPos = yPos + 4
- newObj("buttons", "Перерисовать голограмму", ecs.drawAdaptiveButton("auto", yPos, 3, 1, "Перерисовать голограмму", 0x444444, 0xffffff)); yPos = yPos + 4
- newObj("buttons", "+ 10 блоков", ecs.drawAdaptiveButton("auto", yPos, 3, 1, "+ 10 блоков", 0x444444, 0xffffff)); yPos = yPos + 4
- newObj("buttons", "- 10 блоков", ecs.drawAdaptiveButton("auto", yPos, 3, 1, "- 10 блоков", 0x444444, 0xffffff)); yPos = yPos + 4
- newObj("buttons", "Изменить цвет", ecs.drawAdaptiveButton("auto", yPos, 3, 1, "Изменить цвет", currentHoloColor, 0xffffff)); yPos = yPos + 4
- newObj("buttons", "Выйти", ecs.drawAdaptiveButton("auto", yPos, 3, 1, "Выйти", 0x666666, 0xffffff)); yPos = yPos + 4
- gpu.setBackground(0xffffff)
- gpu.setForeground(0x444444)
- ecs.centerText("x", yPos, "Модификатор высоты: "..yModifyer)
- end
- ----------------------------
- changeColorTo(0x009900)
- changeScale()
- main()
- while true do
- local e = {event.pull()}
- if e[1] == "touch" then
- for key, val in pairs(obj["buttons"]) do
- if ecs.clickedAtArea(e[3], e[4], obj["buttons"][key][1], obj["buttons"][key][2], obj["buttons"][key][3], obj["buttons"][key][4]) then
- ecs.drawAdaptiveButton(obj["buttons"][key][1], obj["buttons"][key][2], 3, 1, key, ecs.colors.green, 0xffffff)
- os.sleep(0.3)
- if key == "Сканировать местность" then
- scan()
- elseif key == "Масштаб" then
- changeScale()
- elseif key == "Перерисовать голограмму" then
- displayAllRows()
- elseif key == "+ 10 блоков" then
- yModifyer = yModifyer - 10
- elseif key == "- 10 блоков" then
- yModifyer = yModifyer + 10
- elseif key == "Выйти" then
- ecs.prepareToExit()
- return 0
- elseif key == "Изменить цвет" then
- local color = palette.draw("auto", "auto", currentHoloColor)
- if color ~= nil then
- changeColorTo(color)
- end
- end
- main()
- break
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement