Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Button API: JKjUZpfN
- Bar API: HXXY5T0Q
- ]]--
- os.loadAPI("button")
- os.loadAPI("bar")
- local monWidth, monheight
- --Color shortforms
- local lblue = colors.lightBlue
- local cyan = colors.cyan
- local lime = colors.lime
- local yellow = colors.yellow
- local orange = colors.orange
- local red = colors.red
- local white = colors.white
- local black = colors.black
- local gray = colors.gray
- local bgColor = black
- local textColor = white
- --Default settings
- local reactorState = "off"
- local fuelRodState = 0
- local currentPage = 1
- local fuel
- local burnRate
- local waste
- local capacity
- local temp
- local reactivity
- local steamLevel
- local steamOut
- local coolantLevel
- local status
- local controlRodLevel
- local serverChannel
- args = {...}
- function detect()
- for per, side in pairs(rs.getSides()) do
- if peripheral.isPresent(side) then
- if peripheral.getType(side) == "monitor" then
- mon = peripheral.wrap(side)
- elseif peripheral.getType(side) == "modem" then
- modem = side
- end
- end
- end
- return mon, modem
- end
- --[Misc functions]-------------------------------
- function round(num, places)
- local multi = 10 ^ (places or 0)
- return math.floor(num * multi + 0.5) / multi
- end
- function toPercent(val, maxval)
- return (val / maxval) * 100
- end
- function readSettingsFile()
- end
- function writeSettingsFile()
- end
- function updateInfo()
- mon.clear()
- local sender, message, dist = rednet.receive("FSRC-S>C")
- serverChannel = sender
- local data = textutils.unserialize(message)
- reactorState = data._reactorState
- fuel = data._fuel
- burnRate = data._burnRate
- waste = data._waste
- capacity = data._capacity
- temp = data._temp
- reactivity = data._reactivity
- steamLevel = data._steamLevel
- coolantLevel = data._coolantLevel
- steamOut = data._steamOut
- controlRodLevel = data._controlRodLevel
- fuelMsg = tostring(fuel) .. " mB (" .. round(toPercent(fuel, capacity), 1) .. "%)"
- wasteMsg = tostring(waste) .. " mB (" .. round(toPercent(waste, capacity), 1) .. "%)"
- end
- function sendData(command)
- rednet.send(serverChannel, command, "FSRC-C>S")
- end
- --[End]------------------------------------------
- --[Non-API graphical functions]------------------
- function initDisplay(_textColor, _bgColor)
- mon.setTextScale(1)
- bgColor = _bgColor
- textColor = _textColor
- mon.setTextColor(textColor)
- mon.setBackgroundColor(bgColor)
- end
- function header()
- label("Reactor Status:", 1, 1, white)
- drawActiveState(reactorState)
- hLine(2)
- end
- function hLine(row)
- for i = 1, monWidth do
- mon.setCursorPos(i, row)
- mon.write("-")
- end
- end
- function label(text, x, y, color)
- mon.setCursorPos(x, y)
- mon.setTextColor(color)
- mon.write(text)
- mon.setTextColor(textColor)
- end
- --[End]------------------------------------------
- function pageOneButtons()
- button.new("NEXT >", changePage, false, monWidth - 9, monWidth - 1, monHeight, monHeight)
- button.new("Power", toggleReactor, false, 2, 8, monHeight, monHeight)
- end
- function pageTwoButtons()
- button.new("< BACK", changePage, false, 2, 9, monHeight, monHeight)
- --All rods
- button.new("-", raiseRods, false, monWidth - 12, monWidth - 10, 3, 3)
- button.new("+", lowerRods, false, monWidth - 3, monWidth - 1, 3, 3)
- end
- --[Button functions]-----------------------------
- function toggleReactor()
- button.flash("Power")
- if reactorState == "off" then
- reactorState = "on"
- sendData("turnon")
- else
- reactorState = "off"
- sendData("shutdown")
- end
- end
- function raiseRods()
- if fuelRodState > 0 then
- fuelRodState = fuelRodState - 10
- else
- fuelRodState = 0
- end
- end
- function lowerRods()
- if fuelRodState < 100 then
- fuelRodState = fuelRodState + 10
- else
- fuelRodState = 100
- end
- end
- --[End]------------------------------------------
- function getClick()
- event, side, x, y = os.pullEvent()
- if event == "monitor_touch" then
- button.getButtonClickEvent(x, y)
- end
- end
- function drawActiveState(state)
- if state == "on" then
- mon.setCursorPos(monWidth - 1, 1)
- mon.setTextColor(lime)
- mon.write("ON")
- elseif state == "off" then
- mon.setCursorPos(monWidth - 2, 1)
- mon.setTextColor(red)
- mon.write("OFF")
- elseif state == "auto" then
- mon.setCursorPos(monWidth - 3, 1)
- mon.setTextColor(orange)
- mon.write("AUTO")
- end
- mon.setTextColor(textColor)
- end
- function page1()
- button.update()
- header()
- label("Fuel : ", 1, 3, lblue)
- mon.write(fuelMsg)
- label("Waste : ", 1, 4, lblue)
- mon.write(wasteMsg)
- --Fuel bar is always at 100% because waste bar will be
- --printed on top to notify user of fuel/waste ratio
- bar.singleColor(100, monWidth / 2 - 10, 5, yellow)
- bar.singleColor(round(toPercent(waste, capacity), 0), monWidth / 2 - 10, 5, cyan)
- hLine(6)
- label(round(temp, 0) .. " C", 1, 7, red)
- label(":", 9, 7, lblue)
- label(round(burnRate, 2).. " mB/t", 11, 7, white)
- label("Steam : ", 1, 8, lblue)
- mon.write(steamLevel .. " mB")
- label("Coolant : ", 1, 9, lblue)
- mon.write(coolantLevel .. " mB")
- label("Output : ", 1, 10, lblue)
- mon.write(steamOut .. " mB/t")
- hLine(monHeight - 1)
- end
- function page2()
- button.update()
- header()
- label("Control Rods :", 1, 3, lblue)
- label(fuelRodState .. "%", (monWidth - 6) - string.len(fuelRodState) / 2, 3, white)
- end
- function changePage()
- mon.clear()
- if currentPage == 1 then
- currentPage = 2
- button.clear()
- pageTwoButtons()
- elseif currentPage == 2 then
- currentPage = 1
- button.clear()
- pageOneButtons()
- end
- end
- mon, modem = detect()
- initDisplay(white, black)
- monWidth, monHeight = mon.getSize()
- rednet.open(modem)
- button.setBGColor(colors.black)
- pageOneButtons()
- while true do
- updateInfo()
- if currentPage == 1 then
- page1()
- elseif currentPage == 2 then
- page2()
- end
- getClick()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement