Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local gpu = component.gpu
- -- gpu.setResolution(160,50)
- local gui = require("gui")
- local charts = require("charts")
- local event = require("event")
- local serialization = require("serialization")
- local modem = component.modem
- -- Begin GUI stuff
- gui.checkVersion(2,5)
- local prgName = "reactor1"
- local version = "v1.0"
- local w, h = gpu.getResolution()
- -- Begin: Callbacks
- local function exitButtonCallback(guiID, id)
- local result = gui.getYesNo("", "Do you really want to exit?", "")
- if result == true then
- gui.exit()
- end
- gui.displayGui(mainGui)
- refresh()
- end
- -- End: Callbacks
- -- Begin: Menu definitions
- mainGui = gui.newGui(1, 1, 159, 49, true, nil, 0xcccccc, 0x22ff22)
- reactor1_label_title = gui.newLabel(mainGui, 1, 1, "Reactor 1", 0xc0c0c0, 0x0, 7)
- reactor1_label_status = gui.newLabel(mainGui, 52, 1, "Disabled", 0xc0c0c0, 0x0, 7)
- reactor1_label_energy = gui.newLabel(mainGui, 1, 3, "Energy", 0xc0c0c0, 0x0, 7)
- reactor1_text_energy = gui.newLabel(mainGui, 52, 4, "0.0", 0xc0c0c0, 0x0, 7)
- reactor1_bar_energy = gui.newProgress(mainGui, 1, 4, 50, 100, 1, nil, false)
- reactor1_label_heat = gui.newLabel(mainGui, 1, 6, "Heat", 0xc0c0c0, 0x0, 7)
- reactor1_text_heat = gui.newLabel(mainGui, 52, 7, "0.0", 0xc0c0c0, 0x0, 7)
- reactor1_bar_heat = gui.newProgress(mainGui, 1, 7, 50, 100, 1, nil, false)
- reactor2_label_title = gui.newLabel(mainGui, 81, 1, "Reactor 2", 0xc0c0c0, 0x0, 7)
- reactor2_label_status = gui.newLabel(mainGui, 132, 1, "Disabled", 0xc0c0c0, 0x0, 7)
- reactor2_label_energy = gui.newLabel(mainGui, 81, 3, "Energy", 0xc0c0c0, 0x0, 7)
- reactor2_text_energy = gui.newLabel(mainGui, 132, 4, "0.0", 0xc0c0c0, 0x0, 7)
- reactor2_bar_energy = gui.newProgress(mainGui, 81, 4, 50, 100, 1, nil, false)
- reactor2_label_heat = gui.newLabel(mainGui, 81, 6, "Heat", 0xc0c0c0, 0x0, 7)
- reactor2_text_heat = gui.newLabel(mainGui, 132, 7, "0.0", 0xc0c0c0, 0x0, 7)
- reactor2_bar_heat = gui.newProgress(mainGui, 81, 7, 50, 100, 1, nil, false)
- battery1_label_title = gui.newLabel(mainGui, 1, 20, "Battery Bank 1", 0xc0c0c0, 0)
- battery1_label_max = gui.newLabel(mainGui, 1, 22, "Capacity: ", 0xc0c0c0, 0)
- battery1_text_max = gui.newLabel(mainGui, 14, 22, "0.0 RF", 0xc0c0c0, 0)
- battery1_label_current = gui.newLabel(mainGui, 30, 22, "Current: ", 0xc0c0c0, 0)
- battery1_text_current = gui.newLabel(mainGui, 45, 22, "0.0 RF", 0xc0c0c0, 0)
- battery1_label_percent = gui.newLabel(mainGui, 60, 22, "Usage: ", 0xc0c0c0, 0)
- battery1_text_percent = gui.newLabel(mainGui, 70, 22, "0.0 %", 0xc0c0c0, 0)
- battery1_bar_energy = gui.newProgress(mainGui, 1, 24, 100, 100, 1, nil, false)
- --battery histogram
- battery1_hist = charts.Histogram {
- max = 100,
- align = charts.sides.RIGHT,
- colorFunc = function(index, norm, value, self, container)
- return 0x20ff20
- end
- }
- battery1_container = charts.Container {
- x=4,
- y=28,
- width=140,
- height=20,
- payload = battery1_hist,
- }
- exitButton = gui.newButton(mainGui, 143, 47, "exit", exitButtonCallback)
- -- End: Menu definitions
- gui.clearScreen()
- gui.setTop("Reactor Management Program")
- gui.setBottom("")
- local stat = 0
- -- Begin Reactor Handling
- local function reactor1_update(msg)
- local update = msg.data
- --Update gui
- if update.active then
- gui.setText(mainGui, reactor1_label_status, "Enabled ")
- else
- gui.setText(mainGui, reactor1_label_status, "Disabled")
- end
- gui.setText(mainGui, reactor1_text_energy, string.format("%.2f", update.energy))
- gui.setValue(mainGui, reactor1_bar_energy, update.energy)
- gui.setText(mainGui, reactor1_text_heat, string.format("%.2f", update.heat))
- gui.setValue(mainGui, reactor1_bar_heat, update.heat)
- end
- local function reactor2_update(msg)
- local update = msg.data
- --Update gui
- if update.active then
- gui.setText(mainGui, reactor2_label_status, "Enabled ")
- else
- gui.setText(mainGui, reactor2_label_status, "Disabled")
- end
- gui.setText(mainGui, reactor2_text_energy, string.format("%.2f", update.energy))
- gui.setValue(mainGui, reactor2_bar_energy, update.energy)
- gui.setText(mainGui, reactor2_text_heat, string.format("%.2f", update.heat))
- gui.setValue(mainGui, reactor2_bar_heat, update.heat)
- end
- local function battery1_update(msg)
- local update = msg.data
- if update == nil then
- return
- end
- gui.setText(mainGui, battery1_text_max, string.format("%.2f kRF", update.energy_max/1000))
- gui.setText(mainGui, battery1_text_current, string.format("%.2f kRF", update.energy/1000))
- gui.setText(mainGui, battery1_text_percent, string.format("%.2f ", (update.energy/update.energy_max)*100))
- gui.setValue(mainGui, battery1_bar_energy, (update.energy/update.energy_max)*100)
- table.insert(battery1_hist.values, (update.energy/update.energy_max)*100)
- battery1_container:draw()
- end
- --Begin Event Handling
- ems_handlers = {}
- ems_handlers['reactor1'] = reactor1_update
- ems_handlers['reactor2'] = reactor2_update
- ems_handlers['battery1'] = battery1_update
- local function handleModem(dst, src, port, dist, frame, ...)
- msg = serialization.unserialize(frame)
- --TODO validation, error checking, etc
- ems_handlers[msg.id](msg)
- end
- local function handleEvent(eventID, ...)
- if eventID == "modem_message" then
- handleModem(...)
- end
- end
- -- Main loop
- modem.open(10)
- local stat = 0
- while true do
- stat = stat + 1
- gui.runGui(mainGui)
- handleEvent(event.pull())
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement