cc/orders.lua

99 lines
2.9 KiB
Lua

local config = require "config"
local winhlp = require "winhlp"
local colony = peripheral.wrap(config.colony_interface_side)
local function drawEntry(win, obj)
winhlp.setHeight(win, 2)
win.setBackgroundColor(colors.black)
win.setTextColor(colors.lightGray)
win.write(obj.id)
win.write(" ")
win.setTextColor(colors.yellow)
if obj.pos then
win.write(obj.pos.x .. "," .. obj.pos.y .. "," .. obj.pos.z)
win.write(" ")
end
win.setTextColor(colors.white)
local padding
if obj.status then
padding = winhlp.alignRightPadding(win, #obj.status + 4)
win.write(string.format("%" .. padding+1 .. "s", " "))
win.write(obj.status .. " ")
else
padding = winhlp.alignRightPadding(win, 3)
win.write(string.format("%" .. padding+1 .. "s", " "))
end
if obj.claimed then
win.setTextColor(colors.green)
win.write("C")
else
win.write(" ")
end
win.write(" ")
win.setTextColor(colors.gray)
win.setCursorPos(1, 2)
if obj.target then
padding = winhlp.alignRightPadding(win, #obj.target + 1)
win.write(string.format("%" .. padding+1 .. "s", " "))
win.write(obj.target)
end
win.setTextColor(colors.white)
win.setCursorPos(1, 2)
if obj.type then
win.write(obj.type)
end
end
local listframes = (require "listframes"):new{drawEntry=drawEntry}
local function setTerm(termlike)
listframes.frame = termlike
end
local function fetch(wait_for)
local currentIdx = 1
if colony.isInColony() then
for i, wo in pairs(colony.getWorkOrders()) do
local resources = colony.getWorkOrderResources(wo.id)
local resStatus = "?/?/0"
if resources ~= nil then
local unavailable_count = 0
local deliver_count = 0
for j, res in pairs(resources) do
if not res.available then
unavailable_count = unavailable_count + 1
end
if res.delivering then
deliver_count = deliver_count + 1
end
end
resStatus = unavailable_count .. "/" .. deliver_count .. "/" .. #resources
end
listframes:updateItemAt(currentIdx, {id=wo.id, type=wo.workOrderType, target=wo.type, pos=wo.builder, status=resStatus, claimed=wo.isClaimed})
currentIdx = currentIdx + 1
wait_for(config.step_sleep_time)
if not colony.isInColony() then
break
end
end
end
listframes:clearFrom(currentIdx)
end
local function displayTab(self)
listframes:updatePage(self.scrollPos)
end
local function estimatedHeight()
return listframes:estimatedHeight()
end
return {
name="orders",
setTerm=setTerm,
fetch=fetch,
displayTab=displayTab,
estimatedHeight=estimatedHeight,
}