Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local running = true
- local term = require("term")
- local gpu = term.gpu()
- local component = require("component")
- local reactor = component.nc_fission_reactor
- local thread = require("thread")
- if not reactor then
- io.write("No fission reactor found!")
- return
- elseif not reactor.isComplete() then
- io.write("Reactor is incomplete!")
- return
- end
- local x,y = term.gpu().getResolution()
- term.clear()
- gpu.set(2,2," ------ REACTOR CONTROL")
- term.setCursor(1,y)
- local auto = false
- local function update()
- local heatlevel = reactor.getHeatLevel()
- local maxheat = reactor.getMaxHeatLevel()
- if heatlevel > maxheat then
- status = "MELTDOWN!!!"
- elseif heatlevel > 0 then
- local percent = math.floor((heatlevel / maxheat)*100)
- if percent > 75 then
- status = "HEAT!!"
- reactor.deactivate()
- elseif percent > 50 then
- status = "HEAT! "
- else
- status = "HEAT "
- end
- status = status .. (" (%d)"):format(percent)
- elseif reactor.getReactorProcessPower() < 0 then
- status = "ENERGY PRODUCTION NEGATIVE"
- elseif (reactor.getEnergyStored()/reactor.getMaxEnergyStored()) >= .9 then
- status = "CAPACITOR FULL"
- if auto then
- reactor.deactivate()
- end
- elseif reactor.isProcessing() then
- status = "OK"
- elseif (reactor.getEnergyStored()/reactor.getMaxEnergyStored()) <= .1 then
- status = "CAPACITOR LOW/EMPTY"
- if auto then
- reactor.activate()
- end
- else
- status = "OFFLINE"
- end
- if auto then
- gpu.set(2,3, "AUTO CONTROL ON ")
- else
- gpu.set(2,3, "AUTO CONTROL OFF")
- end
- local spaces = string.rep(" ",x - 10)
- local problem = reactor.getProblem()
- if problem ~= "No Problem" then
- gpu.set(2,5," " .. string.upper(problem) .. spaces)
- end
- gpu.set(2,4," Status: " .. status .. spaces)
- gpu.set(2,6," Heat : " .. math.floor(reactor.getHeatLevel()) .. "/" .. reactor.getMaxHeatLevel() .. " (Delta: " .. math.floor(reactor.getReactorProcessHeat()) .. ")" .. spaces)
- gpu.set(2,7," Energy: " .. reactor.getEnergyStored() .. "/" .. reactor.getMaxEnergyStored() .. " RF (Delta: " .. reactor.getEnergyChange() .. ")" .. spaces)
- end
- local th = thread.create(function()
- while true do
- update()
- os.sleep(2)
- end
- end)
- local commands = {}
- commands.start = function()
- if reactor.getReactorProcessHeat() > 0 then
- if (reactor.getMaxHeatLevel()/reactor.getReactorProcessHeat())/20 < 60 then
- gpu.set(2,y-4,"Error: Heat delta too high!")
- return
- else
- gpu.set(2,y-4,"Warn: Reactor heat delta > 0")
- end
- end
- gpu.set(2,y-3,"STARTING FISSION REACTOR")
- reactor.activate()
- end
- commands.stop = function()
- gpu.set(2,y-3,"SHUTTING DOWN REACTOR")
- reactor.deactivate()
- end
- commands.auto = function(state)
- if state == "on" then
- auto = true
- elseif state == "off" then
- auto = false
- elseif state ~= nil then
- gpu.set(2,y-5,"Argument must be 'on' or 'off'")
- else
- gpu.set(2,y-5,"Missing argument")
- end
- end
- while true do
- gpu.set(1,y-1,"Enter command:")
- read = term.read({nowrap = true, dobreak = false, hint = {"start","stop","auto","quit"}})
- term.clearLine()
- gpu.fill(2,y-4,x-2,2," ")
- cmd,arg = read:match("^(%g+) (%g+)%G?")
- if not cmd then
- cmd = read:match("^(%g+)")
- end
- cmd = string.lower(cmd)
- local f = commands[cmd]
- if f then
- f(arg)
- end
- if cmd == "quit" or cmd == "exit" then
- reactor.deactivate()
- th:kill()
- term.clear()
- io.write("Reactor deactivated; program closed. Goodbye.")
- break
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement