Advertisement
andrewminer

reactor-control.lua

Apr 30th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.84 KB | None | 0 0
  1. local component = require("component")
  2. local os = require("os")
  3. local term = require("term")
  4.  
  5. if not component.isAvailable("br_reactor") then
  6.   print("Not connected to a reactor.")
  7.   return nil
  8. end
  9.  
  10. local reactor = component.br_reactor
  11.  
  12. local MAX_ENERGY = 10000000
  13. local MIN_ENERGY = MAX_ENERGY * 0.05
  14. local DESIRED_ENERGY = MAX_ENERGY * 0.95
  15. local percent = nil
  16. local mode = "inactive"
  17.  
  18. while true do
  19.   local storedEnergy = reactor.getEnergyStored()
  20.  
  21.   if mode == "inactive" and storedEnergy < MIN_ENERGY then
  22.     mode = "active"
  23.   elseif mode == "active" and storedEnergy > MAX_ENERGY then
  24.     mode = "inactive"
  25.   end
  26.  
  27.   if mode == "active" then
  28.     if storedEnergy == 0 then
  29.       percent = 0.0
  30.     else
  31.       percent = storedEnergy / DESIRED_ENERGY
  32.     end
  33.   else
  34.     percent = 1.0
  35.   end
  36.  
  37.   local controlRodCount = reactor.getNumberOfControlRods()
  38.   local controlValue = percent * controlRodCount
  39.  
  40.   term.clear()
  41.  
  42.   local energyPercent = math.floor(reactor.getEnergyStored() / MAX_ENERGY)
  43.   local percentText = string.format("%0.1f", energyPercent * 100)
  44.   local productionText = string.format("%0.1f", reactor.getEnergyProducedLastTick())
  45.  
  46.   print("Mode: "..mode)
  47.   print("Power: "..reactor.getEnergyStored().." RF ("..percentText.."%)")
  48.   print("Production: "..productionText.." RF/t")
  49.   print("Fuel: "..reactor.getFuelAmount().." mB")
  50.   print()
  51.  
  52.   for i = 0, controlRodCount-1 do
  53.     local rodPercent = 0.0
  54.     if controlValue > 1.0 then
  55.       rodPercent = 1.0
  56.     elseif controlValue == 0.0 then
  57.       rodPercent = 0.0
  58.     else
  59.       rodPercent = controlValue
  60.     end
  61.  
  62.     controlValue = controlValue - rodPercent
  63.     reactor.setControlRodLevel(i, rodPercent * 100)
  64.     print("Control Rod "..(i + 1)..": "..string.format("%0.1f%%", rodPercent * 100))
  65.   end  
  66.  
  67.   os.sleep(10)
  68. end
  69.  
  70. return nil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement