I've been trying to implement an application to MineOS, an awesome Mac OS X Copy for OC.
This application is a clone of the Geoscan app that comes with the OS
I don't know why only one button of five in the GUI is responsive, but I do know that the responsive button is random, and changes each time the world is loaded.
All apps in MineOS use the ESCAPI API
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("This app needs a geolyzer and a Tier 2 Hologram Projector")
return
else
geo = c.geolyzer
holo = c.hologram
end
-------------------------
local sx, sz = 64, 64
local ox, oz = -32, -32
local starty, stopy = -10,10
local xSize, ySize = gpu.getResolution()
local yCenter = math.floor(ySize / 2)
---------------------------------------
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()
ecs.clearScreen(0x33DBFF)
component.hologram.clear()
local barWidth = math.floor(xSize / 3 * 2)
local xBar, yBar = math.floor(xSize/2 - barWidth / 2), yCenter
local percent = 0
local countOfAll = (math.abs(sx) + math.abs(ox * 2) + 1) ^ 2
local counter = 0
for x=ox,sx+ox do
for z=oz,sz+oz do
local hx, hz = 1 + x - ox, 1 + z - oz
local column = component.geolyzer.scan(x, z, false)
for y=1,1+stopy-starty do
local color = 0
if column then
local hardness = column[y + starty + 32]
if hardness == 0 or not hardness then
color = 0
elseif hardness < 3 then
color = 1
elseif hardness < 100 then
color = 2
else
color = 3
end
end
if component.hologram.maxDepth() > 1 then
component.hologram.set(hx, y, hz, color)
else
component.hologram.set(hx, y, hz, math.min(color, 1))
end
end
percent = counter / countOfAll * 100
ecs.progressBar(xBar, yBar, barWidth, 1, 0xcccccc, ecs.colors.blue, percent)
gpu.setForeground(0x444444)
gpu.setBackground(0x33DBFF)
ecs.centerText("x", yBar + 3, " "..math.floor(percent).."% Completed ")
ecs.centerText("x", yBar + 2, " "..getMemory().." RAM ")
counter = counter + 1
os.sleep(0)
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(0x33DBFF)
local yPos = yCenter - 14
ecs.clearScreen(0x33DBFF)
newObj("buttons", " Start Scan ", ecs.drawAdaptiveButton("auto", yPos, 3, 1, " Start Scan ", 0x444444, 0xffffff)); yPos = yPos + 4
newObj("buttons", " Clear Scan ", ecs.drawAdaptiveButton("auto", yPos, 3, 1, " Clear Scan ", 0x444444, 0xffffff)); yPos = yPos + 4
newObj("buttons", " Y + 5 ", ecs.drawAdaptiveButton("auto", yPos, 3, 1, " Y + 5 ", 0x444444, 0xffffff)); yPos = yPos + 4
newObj("buttons", " Y - 5 ", ecs.drawAdaptiveButton("auto", yPos, 3, 1, " Y - 5 ", 0x444444, 0xffffff)); yPos = yPos + 4
newObj("buttons", " Button ", ecs.drawAdaptiveButton("auto", yPos, 3, 1, " Button ", 0x444444, 0xffffff)); yPos = yPos + 4
newObj("buttons", " Button ", ecs.drawAdaptiveButton("auto", yPos, 3, 1, " Button ", 0x444444, 0xffffff)); yPos = yPos + 4
newObj("buttons", " Exit ", ecs.drawAdaptiveButton("auto", yPos, 3, 1, " Exit ", 0x444444, 0xffffff)); yPos = yPos + 4
gpu.setBackground(0x33DBFF)
gpu.setForeground(0x444444)
ecs.centerText("x", yPos, "Y Range: "..stopy)
end
----------------------------
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 == " Start Scan " then
scan()
end
if key == " Clear Scan " then
holo.clear()
end
if key == " Y + 5 " then
stopy = stopy + 5
starty = starty - 5
end
if key == " Y - 5 " then
stopy = stopy - 5
starty = starty + 5
end
if key == " Exit " then
ecs.prepareToExit()
return 0
end
end
main()
break
end
end
end
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
I've been trying to implement an application to MineOS, an awesome Mac OS X Copy for OC.
This application is a clone of the Geoscan app that comes with the OS
I don't know why only one button of five in the GUI is responsive, but I do know that the responsive button is random, and changes each time the world is loaded.
All apps in MineOS use the ESCAPI API
Link to post
Share on other sites