Create Nano.lua

This commit is contained in:
Igor Timofeev 2015-10-22 06:18:12 +03:00
parent f6269a3c19
commit 066f8a1704

150
Applications/Nano/Nano.lua Normal file
View File

@ -0,0 +1,150 @@
local component = require("component")
local event = require("event")
local image = require("image")
local ecs = require("ECSAPI")
local modem = component.modem
local port1 = 512
modem.open(port1)
modem.broadcast(port1, "nanomachines", "setResponseport1", port1)
local oldX, oldY = gpu.getResolution()
gpu.setResolution(80, 25)
ecs.prepareToExit(0xFFFFFF)
local name, minHealth, maxHealth, minHunger, maxHunger, minPower, maxPower, experience
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]
end
end
event.listen("modem_message", listener)
local xFace, yFace = 14, 2
local xInfo, yInfo = xFace + 16 + 2, yFace
local imageCyka = image.load("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)
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
gpu.setForeground(0x000000)
ecs.centerText("x", yPos, "Контакты нанороботов")
yPos = yPos + 2
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()
redraw(xInfo, yInfo)
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)