Advertisement
Guest User

reactor.lua

a guest
Jun 18th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.53 KB | None | 0 0
  1. function deactivate()
  2. local reactor=component.nc_fission_reactor
  3. reactor.deactivate()
  4. end
  5.  
  6. function app()
  7. local component = require('component')
  8. local computer = require('computer')
  9. local term = require('term')
  10. local event = require('event')
  11. local keyboard = require('keyboard')
  12. local os = require('os')
  13. local gpu = component.gpu
  14. local reactor = component.nc_fission_reactor
  15.  
  16. -- dynamic components
  17. function getGeiger()
  18.   local geiger = nil
  19.   if component.isAvailable("nc_geiger_counter") then geiger = component.nc_geiger_counter end
  20.   return geiger
  21. end
  22.  
  23. local geiger = getGeiger()
  24.  
  25. local activeTickrate = 0.1
  26. local inactiveTickrate = 1.0
  27. local waitTime = 0.0
  28. local waitTimeReactorWasActive = 30.0
  29. local tickrate = inactiveTickrate
  30. local predictFuelTime = 180.0
  31.  
  32. io.write("Starting in 3 seconds..")
  33. reactor.deactivate()
  34. os.sleep(3)
  35.  
  36. local lastEnergy = reactor.getEnergyStored()
  37. local lastFuelTime = reactor.getCurrentProcessTime()
  38. local lastFuelTimeT = computer.uptime()
  39. local lastFuelTimePrediction = "N/A"
  40.  
  41. while true do
  42.   term.clear()
  43.   local energy = reactor.getEnergyStored()
  44.   local time = computer.uptime()
  45.  
  46.   local fuelTime = reactor.getCurrentProcessTime()
  47.   local fuelTimeTotal = reactor.getFissionFuelTime()
  48.  
  49.   if reactor.isProcessing() then reactorStatus = "ON" else reactorStatus = "Off" end
  50.   if time > lastFuelTimeT + predictFuelTime then
  51.     local delta = fuelTime - lastFuelTime
  52.     local deltaSec = delta / predictFuelTime
  53.     local remain = fuelTimeTotal - fuelTime
  54.     lastFuelTimePrediction = remain / deltaSec .. " seconds"
  55.     lastFuelTimeT = time
  56.     lastFuelTime = fuelTime
  57.   end
  58.  
  59.   io.write("Reactor - Press CTRL+ALT+C to exit.\n")
  60.   io.write("-----------------------------------\n")
  61.   io.write("Free memory: " .. computer.freeMemory() .. "\n")
  62.   io.write("Active: " .. reactorStatus .. "\n")
  63.   if reactor.getEnergyStored() > 0 then io.write("Energy: " .. reactor.getEnergyStored() / 1000.0 .. "kRF\n") end
  64.   if (energy-lastEnergy) ~= 0.0 then io.write("Energy delta: " .. ((energy-lastEnergy) / tickrate) / 20.0 .. "RF/t \n") end
  65.   io.write("Fuel name: " .. reactor.getFissionFuelName() .. "\n")
  66.   io.write("Fuel time: " .. fuelTime .. "/" .. fuelTimeTotal .. " (" .. (fuelTime/fuelTimeTotal) * 100.0 .. " %)" .. "\n")
  67.   io.write("Estimated fuel time left: " .. lastFuelTimePrediction .. "\n")
  68.   if geiger ~= nil then
  69.     io.write("Radiation: " .. geiger.getChunkRadiationLevel() .. "\n")
  70.   end
  71.  
  72.   if waitTime > 0.0 then
  73.     io.write("Wait time: " .. waitTime)
  74.   end
  75.  
  76.   function activateReactor()
  77.     if reactor.getEnergyStored() > 0 and reactor.isProcessing() == true then
  78.       reactor.deactivate()
  79.       tickrate = inactiveTickrate
  80.       waitTime = waitTimeReactorWasActive
  81.     elseif reactor.getEnergyStored() == 0 and reactor.isProcessing() == false then
  82.       tickrate = activeTickrate
  83.       reactor.activate()
  84.       -- high performance loop for micro bursts
  85.       for i=1,40 do
  86.         if(reactor.getEnergyStored() > 0) then
  87.            reactor.deactivate()
  88.            tickrate = inactiveTickrate
  89.            waitTime = waitTimeReactorWasActive
  90.            break
  91.         else
  92.            io.write(".")
  93.         end
  94.       end
  95.     end
  96.   end
  97.  
  98.   if waitTime > 0.0 then
  99.     reactor.deactivate()
  100.     if reactor.getEnergyStored() == 0 then
  101.        waitTime = waitTime - tickrate
  102.     end
  103.   else
  104.     waitTime = 0.0
  105.     activateReactor()
  106.   end
  107.  
  108.   lastEnergy = energy
  109.   os.sleep(tickrate)
  110. end
  111. end
  112.  
  113. -- force active even if crash
  114. while true do
  115.   local a,b = pcall(app)
  116.   pcall(deactivate)
  117.  
  118.   if b == "interrupted" then
  119.     os.exit(0)
  120.   else
  121.     print("Error", a, b)
  122.     os.sleep(1.0)
  123.   end
  124. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement