Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function deactivate()
- local reactor=component.nc_fission_reactor
- reactor.deactivate()
- end
- function app()
- local component = require('component')
- local computer = require('computer')
- local term = require('term')
- local event = require('event')
- local keyboard = require('keyboard')
- local os = require('os')
- local gpu = component.gpu
- local reactor = component.nc_fission_reactor
- -- dynamic components
- function getGeiger()
- local geiger = nil
- if component.isAvailable("nc_geiger_counter") then geiger = component.nc_geiger_counter end
- return geiger
- end
- local geiger = getGeiger()
- local activeTickrate = 0.1
- local inactiveTickrate = 1.0
- local waitTime = 0.0
- local waitTimeReactorWasActive = 30.0
- local tickrate = inactiveTickrate
- local predictFuelTime = 180.0
- io.write("Starting in 3 seconds..")
- reactor.deactivate()
- os.sleep(3)
- local lastEnergy = reactor.getEnergyStored()
- local lastFuelTime = reactor.getCurrentProcessTime()
- local lastFuelTimeT = computer.uptime()
- local lastFuelTimePrediction = "N/A"
- while true do
- term.clear()
- local energy = reactor.getEnergyStored()
- local time = computer.uptime()
- local fuelTime = reactor.getCurrentProcessTime()
- local fuelTimeTotal = reactor.getFissionFuelTime()
- if reactor.isProcessing() then reactorStatus = "ON" else reactorStatus = "Off" end
- if time > lastFuelTimeT + predictFuelTime then
- local delta = fuelTime - lastFuelTime
- local deltaSec = delta / predictFuelTime
- local remain = fuelTimeTotal - fuelTime
- lastFuelTimePrediction = remain / deltaSec .. " seconds"
- lastFuelTimeT = time
- lastFuelTime = fuelTime
- end
- io.write("Reactor - Press CTRL+ALT+C to exit.\n")
- io.write("-----------------------------------\n")
- io.write("Free memory: " .. computer.freeMemory() .. "\n")
- io.write("Active: " .. reactorStatus .. "\n")
- if reactor.getEnergyStored() > 0 then io.write("Energy: " .. reactor.getEnergyStored() / 1000.0 .. "kRF\n") end
- if (energy-lastEnergy) ~= 0.0 then io.write("Energy delta: " .. ((energy-lastEnergy) / tickrate) / 20.0 .. "RF/t \n") end
- io.write("Fuel name: " .. reactor.getFissionFuelName() .. "\n")
- io.write("Fuel time: " .. fuelTime .. "/" .. fuelTimeTotal .. " (" .. (fuelTime/fuelTimeTotal) * 100.0 .. " %)" .. "\n")
- io.write("Estimated fuel time left: " .. lastFuelTimePrediction .. "\n")
- if geiger ~= nil then
- io.write("Radiation: " .. geiger.getChunkRadiationLevel() .. "\n")
- end
- if waitTime > 0.0 then
- io.write("Wait time: " .. waitTime)
- end
- function activateReactor()
- if reactor.getEnergyStored() > 0 and reactor.isProcessing() == true then
- reactor.deactivate()
- tickrate = inactiveTickrate
- waitTime = waitTimeReactorWasActive
- elseif reactor.getEnergyStored() == 0 and reactor.isProcessing() == false then
- tickrate = activeTickrate
- reactor.activate()
- -- high performance loop for micro bursts
- for i=1,40 do
- if(reactor.getEnergyStored() > 0) then
- reactor.deactivate()
- tickrate = inactiveTickrate
- waitTime = waitTimeReactorWasActive
- break
- else
- io.write(".")
- end
- end
- end
- end
- if waitTime > 0.0 then
- reactor.deactivate()
- if reactor.getEnergyStored() == 0 then
- waitTime = waitTime - tickrate
- end
- else
- waitTime = 0.0
- activateReactor()
- end
- lastEnergy = energy
- os.sleep(tickrate)
- end
- end
- -- force active even if crash
- while true do
- local a,b = pcall(app)
- pcall(deactivate)
- if b == "interrupted" then
- os.exit(0)
- else
- print("Error", a, b)
- os.sleep(1.0)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement