mirror of
https://github.com/S4mpsa/InfOS.git
synced 2025-08-04 02:16:05 -04:00

Add GUI related stuff to graphics.lua Implement autostocker code First prototype of fetching files from github
222 lines
9.1 KiB
Lua
222 lines
9.1 KiB
Lua
comp=require("component");screen=require("term");computer=require("computer");event=require("event"); thread = require("thread"); sides = require("sides")
|
|
get=require("utility"); ARG=require("ARGraphics"); G = require("graphics")
|
|
S = require("stockerUtil")
|
|
local uc = require("unicode"); tx = require("transforms")
|
|
config = require("config")
|
|
local GPU = comp.gpu
|
|
interface = comp.me_interface
|
|
transposer = comp.transposer
|
|
itemsToStock = {}
|
|
craftables = {}
|
|
local currentlyCrafting = {}
|
|
local drawerItem
|
|
local number = ""
|
|
function mouseListener()
|
|
function processClick(event, address, x, y, key, player)
|
|
local activeWindow = G.checkCollision(nil, x, y)
|
|
if activeWindow ~= nil then
|
|
if activeWindow == "Button" then
|
|
GPU.setActiveBuffer(0)
|
|
if drawerItem == nil or number == "" then
|
|
G.rect(GPU, currentWindows["Button"].x+2, currentWindows["Button"].y*2+1, 6, 6, negativeEUColour)
|
|
else
|
|
G.rect(GPU, currentWindows["Button"].x+2, currentWindows["Button"].y*2+1, 6, 6, positiveEUColour)
|
|
if itemsToStock[drawerItem] ~= nil then
|
|
S.update(drawerItem, itemsToStock[drawerItem], number)
|
|
itemsToStock[drawerItem] = number
|
|
elseif number+0.0 > 0 then
|
|
S.addPattern(drawerItem, number)
|
|
itemsToStock[drawerItem] = number
|
|
else
|
|
itemsToStock[drawerItem] = nil
|
|
end
|
|
end
|
|
number = ""
|
|
os.sleep(0.3)
|
|
G.refresh(GPU)
|
|
elseif activeWindow == "Number" then
|
|
GPU.setActiveBuffer(0)
|
|
if drawerItem == nil then
|
|
G.centeredText(GPU, currentWindows["Number"].x+25, currentWindows["Number"].y*2+3, 0xFFFFFF, "Pattern refresh requested...")
|
|
S.refreshCraftables()
|
|
end
|
|
inNumberBox = true
|
|
G.rect(GPU, currentWindows["Number"].x+2, currentWindows["Number"].y*2+1, 46, 6, 0x333333)
|
|
else
|
|
inNumberBox = false
|
|
number = ""
|
|
G.refresh(GPU)
|
|
end
|
|
else
|
|
inNumberBox = false
|
|
number = ""
|
|
G.refresh(GPU)
|
|
end
|
|
end
|
|
return event.listen("touch", processClick)
|
|
end
|
|
function keyboardListener()
|
|
function processKey(event, address, key, code, player)
|
|
if inNumberBox then
|
|
local value = uc.char(key)
|
|
if key == 10 then
|
|
inNumberBox = false
|
|
G.refresh(GPU)
|
|
end
|
|
if key == 8 then number = string.sub(number, 1, #number-1) elseif (key >= 48 and key <= 57) then
|
|
number = number..value
|
|
end
|
|
G.rect(GPU, currentWindows["Number"].x+2, currentWindows["Number"].y*2+1, 46, 6, 0x333333)
|
|
G.text(GPU, currentWindows["Number"].x+4, currentWindows["Number"].y*2+3, workingColour, number)
|
|
end
|
|
end
|
|
return event.listen("key_down", processKey)
|
|
end
|
|
function getNewItem(GPU, x, y)
|
|
if currentWindows["Item"] == nil then
|
|
local itemWindow = G.createWindow(GPU, 60, 6, "Item")
|
|
currentWindows["Item"].x = x
|
|
currentWindows["Item"].y = y
|
|
GPU.setActiveBuffer(itemWindow)
|
|
G.rect(GPU, 2, 2, 58, 4, hudColour)
|
|
G.rect(GPU, 3, 3, 56, 2, 0x000000)
|
|
GPU.setActiveBuffer(0)
|
|
end
|
|
local newDrawerItem = transposer.getStackInSlot(sides.top, 2)
|
|
if newDrawerItem ~= nil then
|
|
if craftables[newDrawerItem] ~= nil then
|
|
GPU.setForeground(workingColour)
|
|
else
|
|
GPU.setActiveBuffer(negativeEUColour)
|
|
end
|
|
if drawerItem == nil then
|
|
drawerItem = newDrawerItem.label
|
|
GPU.setActiveBuffer(currentWindows["Item"].page)
|
|
G.rect(GPU, 3, 3, 56, 2, 0x000000)
|
|
if craftables[drawerItem] ~= nil then
|
|
G.centeredText(GPU, 30, 3, positiveEUColour, drawerItem)
|
|
else
|
|
G.centeredText(GPU, 30, 3, negativeEUColour, drawerItem)
|
|
end
|
|
GPU.setActiveBuffer(0)
|
|
if itemsToStock[drawerItem] ~= nil then
|
|
G.rect(GPU, currentWindows["Item"].x, currentWindows["Item"].y*2-3, 60, 2, 0x000000)
|
|
G.centeredText(GPU, currentWindows["Item"].x+30, currentWindows["Item"].y*2-3, 0xFFFFFF, "Configured: "..itemsToStock[drawerItem])
|
|
end
|
|
G.refresh(GPU)
|
|
else
|
|
if drawerItem ~= newDrawerItem.label then
|
|
drawerItem = newDrawerItem.label
|
|
GPU.setActiveBuffer(currentWindows["Item"].page)
|
|
G.rect(GPU, 3, 3, 56, 2, 0x000000)
|
|
if craftables[drawerItem] ~= nil then
|
|
G.centeredText(GPU, 30, 3, positiveEUColour, drawerItem)
|
|
else
|
|
G.centeredText(GPU, 30, 3, negativeEUColour, drawerItem)
|
|
end
|
|
GPU.setActiveBuffer(0)
|
|
if itemsToStock[drawerItem] ~= nil then
|
|
G.rect(GPU, currentWindows["Item"].x, currentWindows["Item"].y*2-3, 60, 2, 0x000000)
|
|
G.centeredText(GPU, currentWindows["Item"].x+30, currentWindows["Item"].y*2-3, 0xFFFFFF, "Configured: "..itemsToStock[drawerItem])
|
|
end
|
|
G.refresh(GPU)
|
|
end
|
|
end
|
|
else
|
|
if drawerItem ~= nil then
|
|
drawerItem = nil
|
|
GPU.setActiveBuffer(currentWindows["Item"].page)
|
|
G.rect(GPU, 3, 3, 56, 2, 0x000000)
|
|
G.centeredText(GPU, 30, 3, 0xFFFFFF, "")
|
|
GPU.setActiveBuffer(0)
|
|
G.rect(GPU, currentWindows["Item"].x, currentWindows["Item"].y*2-3, 60, 2, 0x000000)
|
|
G.refresh(GPU)
|
|
end
|
|
end
|
|
end
|
|
function numberBox(GPU, x, y)
|
|
if currentWindows["Number"] == nil then
|
|
local itemWindow = G.createWindow(GPU, 50, 10, "Number")
|
|
currentWindows["Number"].x = x
|
|
currentWindows["Number"].y = y
|
|
GPU.setActiveBuffer(itemWindow)
|
|
G.rect(GPU, 2, 2, 48, 8, hudColour)
|
|
G.rect(GPU, 3, 3, 46, 6, 0x000000)
|
|
GPU.setActiveBuffer(0)
|
|
end
|
|
end
|
|
function button(GPU, x, y)
|
|
if currentWindows["Button"] == nil then
|
|
local button = G.createWindow(GPU, 10, 10, "Button")
|
|
currentWindows["Button"].x = x
|
|
currentWindows["Button"].y = y
|
|
GPU.setActiveBuffer(button)
|
|
G.rect(GPU, 2, 2, 8, 8, hudColour)
|
|
G.rect(GPU, 3, 3, 6, 6, workingColour)
|
|
GPU.setActiveBuffer(0)
|
|
end
|
|
end
|
|
function craftableBox(GPU, x, y)
|
|
if currentWindows["Craft"] == nil then
|
|
local crafts = G.createWindow(GPU, 72, 100, "Craft")
|
|
currentWindows["Craft"].x = x
|
|
currentWindows["Craft"].y = y
|
|
GPU.setActiveBuffer(crafts)
|
|
G.rect(GPU, 2, 2, 70, 94, hudColour)
|
|
GPU.setActiveBuffer(0)
|
|
end
|
|
GPU.setActiveBuffer(currentWindows["Craft"].page)
|
|
G.rect(GPU, 3, 4, 68, 90, 0x000000)
|
|
G.rect(GPU, 48, 2, 1, 94, hudColour)
|
|
local i = 1
|
|
S.updateCache()
|
|
for label, amount in pairs(itemsToStock) do
|
|
local stockedAmount = S.getAmount(label)
|
|
local stockedString = string.sub(stockedAmount.."", 1, #(stockedAmount.."")-2)
|
|
local toStock = amount+0.0
|
|
if toStock > 0 then
|
|
if drawerItem == label then
|
|
G.text(GPU, 4, 3+2*i, workingColour, label);
|
|
elseif craftables[label] == nil then
|
|
G.text(GPU, 4, 3+2*i, negativeEUColour, label);
|
|
else
|
|
G.text(GPU, 4, 3+2*i, 0xFFFFFF, label);
|
|
end
|
|
if stockedAmount >= toStock then --In stock
|
|
G.text(GPU, 59 - (#stockedString + 1), 3+2*i, 0xFFFFFF, stockedString)
|
|
elseif stockedAmount >= toStock * 0.85 then --Edit hysteresis here, slightly below stock
|
|
G.text(GPU, 59 - (#stockedString + 1), 3+2*i, workingColour, stockedString)
|
|
else --Needs to be ordered
|
|
--Add crafting request loop here
|
|
if craftables[label] ~= nil then
|
|
if currentlyCrafting[label] == nil then
|
|
currentlyCrafting[label] = craftables[label](toStock - stockedAmount)
|
|
elseif currentlyCrafting[label].isDone() or currentlyCrafting[label].isCanceled() then
|
|
currentlyCrafting[label] = nil
|
|
end
|
|
end
|
|
G.text(GPU, 59 - (#stockedString + 1), 3+2*i, negativeEUColour, stockedString)
|
|
end
|
|
G.text(GPU, 59, 3+2*i, 0xFFFFFF, "| "..amount)
|
|
i = math.min(i + 1, 43)
|
|
end
|
|
end
|
|
GPU.setActiveBuffer(0)
|
|
G.refresh(GPU)
|
|
end
|
|
|
|
mouseListener(); keyboardListener(); GPU.setResolution(160, 46); screen.clear()
|
|
G.clear()
|
|
numberBox(GPU, 100, 41); button(GPU, 150, 41); craftableBox(GPU, 0, 0)
|
|
G.refresh(GPU)
|
|
S.refreshCraftables(); S.loadPatterns()
|
|
local timeSinceRefresh = computer.uptime()
|
|
while true do
|
|
getNewItem(GPU, 100, 38)
|
|
if computer.uptime() - timeSinceRefresh > 900 then
|
|
timeSinceRefresh = computer.uptime()
|
|
craftableBox(GPU, 0, 0)
|
|
end
|
|
os.sleep(0.5)
|
|
end
|