Advertisement
Yorinar

Yorinar's version of DW20's reactor

Jan 25th, 2015
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.63 KB | None | 0 0
  1. -- Yorinar's Refactoring of DW20's reactor code
  2.  
  3. p = peripheral.find("tile_blockcapacitorbank_name")
  4. m = peripheral.find("monitor")
  5. r = peripheral.find("BigReactors-Reactor")
  6.  
  7. local menuType = "Reactor"
  8.  
  9. local numCapacitors = 11
  10. local turnOnAt = 50
  11. local turnOffAt = 90
  12.  
  13. local energy = 0
  14. local energyStored = 0
  15. local energyMax = 0
  16. local energyStoredPercent = 0
  17. local timerCode
  18. local mode = "Manual"
  19. local RFProduction = 0
  20. local fuelUse = 0
  21. local coreTemp = 0
  22. local reactorOnline = true
  23. local rodLevel = 37
  24.  
  25. function autoMenu()
  26.   m.setTextScale(1)
  27.   button.clearTable()
  28.   button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
  29.   button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
  30.  
  31.   button.screen()
  32.   checkMode()
  33. end
  34.  
  35. function manualMenu()
  36.   m.setTextScale(1)
  37.   button.clearTable()
  38.   button.setTable("Automatic", autoMode, "", 3, 13, 6, 6)
  39.   button.setTable("Manual", manualMode, "", 15, 25, 6, 6)
  40.   button.setTable("Online", online, "", 3, 13, 8, 8)
  41.   button.setTable("Offline", offline, "", 15, 25, 8, 8)
  42.   button.setTable("0", setRods, 0, 11,14, 10, 10)
  43.   button.setTable("10", setRods, 10, 5,8, 12, 12)
  44.   button.setTable("20", setRods, 20, 11,14, 12, 12)
  45.   button.setTable("30", setRods, 30, 17,20, 12, 12)
  46.   button.setTable("40", setRods, 40, 5,8, 14, 14)
  47.   button.setTable("50", setRods, 50, 11,14, 14, 14)
  48.   button.setTable("60", setRods, 60, 17,20, 14, 14)
  49.   button.setTable("70", setRods, 70, 5,8, 16, 16)
  50.   button.setTable("80", setRods, 80, 11,14, 16, 16)
  51.   button.setTable("90", setRods, 90, 17,20, 16, 16)
  52.   button.setTable("+", rodPlus, "", 23, 25, 12, 12)
  53.   button.setTable("-", rodMinus, "", 23, 25, 16, 16)
  54.  
  55.   button.screen()
  56.   checkMode()
  57.   reactorOnOff()
  58. end
  59.  
  60. function reactorMenu()
  61.   menuType = "Reactor"
  62.   displayScreen()
  63. end
  64.  
  65. function online()
  66.   r.setActive(true)
  67. end
  68.  
  69. function offline()
  70.   r.setActive(false)
  71. end
  72.  
  73. function reactorOnOff()
  74.   button.setButton("Online", r.getActive())
  75.   button.setButton("Offline", not r.getActive())
  76. end
  77.  
  78. function setRods(setLevel)
  79.   print("Setting Rod Level: "..setLevel)
  80.   button.flash(tostring(setLevel))
  81.   r.setAllControlRodLevels(setLevel)
  82.   fuelRodLevel()
  83. end
  84.  
  85. function rodPlus()
  86.   button.flash("+")
  87.   r.setAllControlRodLevels(rodLevel + 1)
  88.   fuelRodLevel()
  89. end
  90.  
  91. function rodMinus()
  92.   button.flash("-")
  93.   r.setAllControlRodLevels(rodLevel - 1)
  94.   fuelRodLevel()
  95. end
  96.  
  97. function checkMode()
  98.   button.toggleButton(mode)
  99. end
  100.  
  101. function manualMode()
  102.   mode = "Manual"
  103.   manualMenu()
  104. end
  105.  
  106. function autoMode()
  107.   mode = "Automatic"
  108.   displayScreen()
  109. end
  110.  
  111. function comma_value(amount)
  112.   local formatted = amount
  113.   local swap = false
  114.   if formatted < 0 then
  115.     formatted = formatted*-1
  116.     swap = true
  117.   end
  118.   while true do
  119.     formatted, k = string.gsub(formatted, "^(%d+)(%d%d%d)", '%1,%2')
  120.     if k == 0 then
  121.       break
  122.     end
  123.   end
  124.   if swap then
  125.     formatted = "-"..formatted
  126.   end
  127.   return formatted
  128. end
  129.  
  130. function checkEn()
  131.   local tempEnergy = 0
  132.  
  133.   energyStored = p.getEnergyStored()
  134.   energyMax = p.getMaxEnergyStored()
  135.   energyStoredPercent = math.floor((energyStored / energyMax) * 100)
  136.   RFProduction = r.getEnergyProducedLastTick()
  137.   fuelUse = r.getFuelConsumedLastTick()
  138.   fuelUse = math.floor(fuelUse * 100)
  139.   fuelUse = fuelUse / 100
  140.   coreTemp = r.getFuelTemperature()
  141.   reactorOnline = r.getActive()
  142.   tempEnergy = p.getEnergyStored()
  143.  
  144.   sleep(0.1)
  145.  
  146.   energy = (p.getEnergyStored() - tempEnergy) / 2
  147.   energy = energy * numCapacitors
  148. end
  149.  
  150. function displayEn()
  151.   m.clear()
  152.   m.setCursorPos(1, 1)
  153.   m.write("Energy Use: ")
  154.  
  155.   if energy < 0 then
  156.     m.setTextColor(colors.red)
  157.   else
  158.     m.setTextColor(colors.green)
  159.   end
  160.  
  161.   m.write(comma_value(math.floor(energy)).. "RF/t")
  162.   m.setTextColor(colors.white)
  163.   m.setCursorPos(1,2)
  164.   m.write("Energy Stored: "..energyStoredPercent.."%")
  165.  
  166.   m.setCursorPos(1,3)
  167.   m.write("Reactor is: ")
  168.   if reactorOnline then
  169.     m.setTextColor(colors.green)
  170.     m.write("Online")
  171.   else
  172.     m.setTextColor(colors.red)
  173.     m.write("Offline")
  174.   end
  175.   m.setTextColor(colors.white)
  176.   m.setCursorPos(22,1)
  177.  
  178.   m.write("RF Gen: ")
  179.   m.setTextColor(colors.green)
  180.   m.write(comma_value(math.floor(RFProduction)).."RF/t")
  181.  
  182.   m.setTextColor(colors.white)
  183.   m.setCursorPos(22,2)
  184.   m.write("Core Temp: "..math.floor(coreTemp).."c")
  185.   m.setCursorPos(22,3)
  186.   m.write("Fuel Use: "..fuelUse.."MB/t")
  187. end
  188.  
  189. function fuelRodLevel()
  190.   rodLevel = r.getControlRodLevel(0)
  191.   m.setCursorPos(30, 5)
  192.   m.write(tostring(rodLevel).."%")
  193.   m.setBackgroundColor(colors.white)
  194.   m.setCursorPos(28, 6)
  195.   m.write("       ")
  196.   for i = 1, 16 do
  197.     m.setCursorPos(28, i + 6)
  198.     m.setBackgroundColor(colors.white)
  199.     m.write(" ")
  200.     m.setBackgroundColor(colors.yellow)
  201.     m.write(" ")
  202.     if rodLevel / 6.25 >= i then
  203.       m.setBackgroundColor(colors.red)
  204.     else
  205.       m.setBackgroundColor(colors.yellow)
  206.     end
  207.     m.write("   ")
  208.     m.setBackgroundColor(colors.yellow)
  209.     m.write(" ")
  210.     m.setBackgroundColor(colors.white)
  211.     m.write(" ")
  212.   end
  213.   m.setCursorPos(28, 23)
  214.   m.write("       ")
  215.   m.setBackgroundColor(colors.black)
  216. end
  217.  
  218. function autoReactor()
  219.   r.setAllControlRodLevels(0)
  220.   if energyStoredPercent < turnOnAt then
  221.     if not reactorOnline then
  222.       online()
  223.     end
  224.   end
  225.   if energyStoredPercent > turnOffAt then
  226.     if reactorOnline then
  227.       offline()
  228.     end
  229.   end
  230. end
  231.  
  232. function displayScreen(...)
  233.   checkEn()
  234.   displayEn()
  235.  
  236.   fuelRodLevel()
  237.   if mode == "Automatic" then
  238.     autoMenu()
  239.     autoReactor()
  240.   else
  241.     manualMenu()
  242.   end
  243. end
  244.  
  245. button.addEvent('redstone', displayScreen)
  246. displayScreen()
  247. button.screenEventLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement