mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-21 19:49:23 +01:00
167 lines
5.7 KiB
Lua
167 lines
5.7 KiB
Lua
local component = require("component")
|
||
local event = require("event")
|
||
local image = require("image")
|
||
local ecs = require("ECSAPI")
|
||
|
||
if not component.isAvailable("modem") then error("Этой программе требуется плата беспроводной сети."); return end
|
||
|
||
local modem = component.modem
|
||
local port1 = 1
|
||
modem.open(port1)
|
||
|
||
modem.broadcast(1, "nanomachines", "setResponsePort", 1)
|
||
|
||
local oldX, oldY = gpu.getResolution()
|
||
gpu.setResolution(80, 25)
|
||
ecs.prepareToExit(0xFFFFFF)
|
||
|
||
local name, minHealth, maxHealth, minHunger, maxHunger, minPower, maxPower, experience
|
||
local effects = "Эффекты: недоступно"
|
||
|
||
local timing = 1
|
||
|
||
local contacts = {
|
||
}
|
||
for i = 1, 18 do table.insert(contacts, {false}) end
|
||
local scan = {}
|
||
local toggle = {}
|
||
local exit = {}
|
||
|
||
local function listener(_, _, _, _, _, header, command, ...)
|
||
if header ~= "nanomachines" then return end
|
||
local data = { ... }
|
||
if command == "name" then
|
||
name = data[1]
|
||
elseif command == "age" then
|
||
age = data[1]
|
||
elseif command == "experience" then
|
||
experience = data[1]
|
||
elseif command == "health" then
|
||
minHealth = data[1]
|
||
maxHealth = data[2]
|
||
elseif command == "hunger" then
|
||
minHunger = data[1]
|
||
maxHunger = data[2]
|
||
elseif command == "power" then
|
||
minPower = data[1]
|
||
maxPower = data[2]
|
||
elseif command == "effects" then
|
||
local cyka = data[1]
|
||
effects = "Эффекты: " .. cyka
|
||
end
|
||
end
|
||
event.listen("modem_message", listener)
|
||
|
||
local xFace, yFace = 14, 2
|
||
local xInfo, yInfo = xFace + 16 + 2, yFace
|
||
local imageCyka = image.load("MineOS/System/OS/Icons/Steve.pic")
|
||
image.draw(xFace, yFace, imageCyka)
|
||
|
||
local function request()
|
||
local oldPixels = ecs.info("auto", "auto", " ", "Осуществляется запрос к нанороботам. Ждите.")
|
||
modem.broadcast(port1, "nanomachines", "getName"); os.sleep(timing)
|
||
--modem.broadcast(port1, "nanomachines", "getAge"); os.sleep(timing)
|
||
modem.broadcast(port1, "nanomachines", "getExperience"); os.sleep(timing)
|
||
modem.broadcast(port1, "nanomachines", "getHealth"); os.sleep(timing)
|
||
modem.broadcast(port1, "nanomachines", "getHunger"); os.sleep(timing)
|
||
modem.broadcast(port1, "nanomachines", "getPowerState"); os.sleep(timing)
|
||
modem.broadcast(port1, "nanomachines", "getActiveEffects"); os.sleep(timing)
|
||
ecs.drawOldPixels(oldPixels)
|
||
end
|
||
|
||
local function redraw(x, y)
|
||
local xPos, yPos = x, y
|
||
local width = 35
|
||
ecs.square(xPos, yPos, 80, 8, 0xFFFFFF)
|
||
ecs.smartText(xPos, yPos, "§fИмя: §8" .. (name or "недоступно")); yPos = yPos + 1
|
||
ecs.smartText(xPos, yPos, "§fОпыт: §8" .. (experience or "недоступно")); yPos = yPos + 2
|
||
ecs.progressBar(xPos, yPos, width, 1, 0xCCCCCC, ecs.colors.red, math.floor((minHealth or 0) / (maxHealth or 1) * 100))
|
||
ecs.adaptiveText(xPos + math.floor(width / 2) - 4, yPos, "Здоровье", 0xFFFFFF); yPos = yPos + 2
|
||
|
||
if (maxHunger or 1) < 20 then maxHunger = 20 end
|
||
ecs.progressBar(xPos, yPos, width, 1, 0xCCCCCC, ecs.colors.green, math.floor((minHunger or 0) / (maxHunger or 1) * 100))
|
||
ecs.adaptiveText(xPos + math.floor(width / 2) - 3, yPos, "Голод", 0xFFFFFF); yPos = yPos + 2
|
||
ecs.progressBar(xPos, yPos, width, 1, 0xCCCCCC, ecs.colors.blue, math.floor((minPower or 0) / (maxPower or 1) * 100))
|
||
ecs.adaptiveText(xPos + math.floor(width / 2) - 8, yPos, "Заряд нанороботов", 0xFFFFFF); yPos = yPos + 2
|
||
|
||
xPos, yPos = xFace, yFace + 9
|
||
ecs.separator(1, yPos, 80, 0xFFFFFF, 0xCCCCCC)
|
||
yPos = yPos + 1
|
||
|
||
if effects then
|
||
gpu.setForeground(0x000000)
|
||
ecs.centerText("x", yPos, string.rep(" ", 40) .. effects .. string.rep(" ", 40))
|
||
yPos = yPos + 1
|
||
end
|
||
yPos = yPos + 1
|
||
|
||
xPos = 14
|
||
for i = 1, #contacts do
|
||
contacts[i][2], contacts[i][3], contacts[i][4], contacts[i][5] = ecs.drawButton(xPos, yPos, 5, 3, tostring(i), (function() if contacts[i][1] then return ecs.colors.blue else return 0xBBBBBB end end)(), 0xFFFFFF)
|
||
xPos = contacts[i][4] + 2
|
||
if i == 9 then yPos = yPos + 4; xPos = 14 end
|
||
end
|
||
yPos = yPos + 4
|
||
xPos = 14
|
||
scan = {ecs.drawAdaptiveButton(xPos, yPos, 2, 1, "Сканирование", 0x444444, 0xFFFFFF)}
|
||
toggle = {ecs.drawAdaptiveButton(scan[3] + 3, yPos, 2, 1, "Переключить контакты", 0x444444, 0xFFFFFF)}
|
||
exit = {ecs.drawAdaptiveButton(toggle[3] + 3, yPos, 2, 1, "Выйти", 0x444444, 0xFFFFFF)}
|
||
|
||
end
|
||
|
||
local function switchContacts()
|
||
os.sleep(timing)
|
||
for i = 1, #contacts do
|
||
ecs.info("auto", "auto", " ", "Переключаю "..i.." контакт")
|
||
modem.broadcast(port1, "nanomachines", "setInput", i, contacts[i][1]); os.sleep(timing)
|
||
end
|
||
end
|
||
|
||
redraw(xInfo, yInfo)
|
||
request()
|
||
redraw(xInfo, yInfo)
|
||
|
||
while true do
|
||
local e = {event.pull("touch")}
|
||
for i = 1, #contacts do
|
||
if ecs.clickedAtArea(e[3], e[4], contacts[i][2], contacts[i][3], contacts[i][4], contacts[i][5]) then
|
||
contacts[i][1] = not contacts[i][1]
|
||
redraw(xInfo, yInfo)
|
||
break
|
||
end
|
||
end
|
||
|
||
if ecs.clickedAtArea(e[3], e[4], scan[1], scan[2], scan[3], scan[4]) then
|
||
ecs.drawAdaptiveButton(scan[1], scan[2], 2, 1, "Сканирование", ecs.colors.red, 0xFFFFFF)
|
||
--os.sleep(0.3)
|
||
request()
|
||
ecs.prepareToExit(0xFFFFFF)
|
||
redraw(xInfo, yInfo)
|
||
image.draw(xFace, yFace, imageCyka)
|
||
elseif ecs.clickedAtArea(e[3], e[4], toggle[1], toggle[2], toggle[3], toggle[4]) then
|
||
ecs.drawAdaptiveButton(toggle[1], toggle[2], 2, 1, "Переключить контакты", ecs.colors.red, 0xFFFFFF)
|
||
--os.sleep(0.3)
|
||
switchContacts()
|
||
ecs.prepareToExit(0xFFFFFF)
|
||
redraw(xInfo, yInfo)
|
||
image.draw(xFace, yFace, imageCyka)
|
||
elseif ecs.clickedAtArea(e[3], e[4], exit[1], exit[2], exit[3], exit[4]) then
|
||
ecs.drawAdaptiveButton(exit[1], exit[2], 2, 1, "Выйти", ecs.colors.red, 0xFFFFFF)
|
||
os.sleep(0.3)
|
||
event.ignore("modem_message", listener)
|
||
gpu.setResolution(oldX, oldY)
|
||
ecs.prepareToExit()
|
||
return
|
||
end
|
||
|
||
end
|
||
|
||
event.ignore("modem_message", listener)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|