Advertisement
streqicity

lalala

Jul 30th, 2014
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Basic control for BigReactors-Reactor
  2. -- BSD3 License
  3. -- Emily Backes <lucca@accela.net>
  4.  
  5. -- Uses the first monitor it finds, if any
  6. -- May need 3x3 or larger for that
  7. -- No log output or printer usage yet
  8. -- Will work on adv comps but mouse event handling
  9. -- would need to be added below
  10. -- Suitable for use in /startup
  11. for bullshit=1,60 do
  12. print("Computer is sleeping for"..60-bullshit.."more seconds")
  13. sleep(1)
  14. end
  15.  
  16. -- Max energy in a reactor's internal cell
  17. local emax=10000000
  18.  
  19. -- wrap everything in an exception handler
  20. local ok,msg=pcall(function ()
  21. local r
  22. local m
  23. local redirected=false
  24. local p
  25.  
  26. function findDev (dType)
  27. local d
  28. for _,d in pairs(peripheral.getNames()) do
  29. if (peripheral.getType(d) == dType) then
  30. return peripheral.wrap(d)
  31. end
  32. end
  33. return nil, dType..": not found"
  34. end
  35.  
  36. function setupDevs()
  37. r=assert(findDev("BigReactors-Reactor"))
  38. if (not r.getConnected()) then
  39. return nil, "Computer port not connected to a valid reactor"
  40. end
  41. --if (r.getNumberOfControlRods() <1) then
  42. -- return nil, "Reactor seems invalid"
  43. --end
  44. r.getEnergyPercent = function ()
  45. return math.floor(1000 * r.getEnergyStored() / emax)/10
  46. end
  47. if r.nativeEPLT then
  48. r.getEnergyProducedLastTick = r.nativeEPLT
  49. end
  50. r.nativeEPLT = r.getEnergyProducedLastTick
  51. r.getEnergyProducedLastTick = function ()
  52. return math.floor(r.nativeEPLT()*1000)/1000
  53. end
  54.  
  55. if redirected then
  56. term.restore()
  57. redirected = false
  58. end
  59. m=findDev("monitor")
  60. if m then
  61. m.setTextScale(0.5)
  62. term.clear()
  63. term.setCursorPos(1,1)
  64. print("Redirecting to attached monitor")
  65. term.redirect(m)
  66. redirected = true
  67. end
  68.  
  69. term.setCursorBlink(false)
  70. p=findDev("printer")
  71. end
  72.  
  73. function ft ()
  74. local d=os.day()
  75. local t=os.time()
  76. local h=math.floor(t)
  77. local m=math.floor((t-h)*60)
  78. return string.format("Day %d, %02d:%02d",d,h,m)
  79. end
  80.  
  81. function log (msg)
  82. local stamp=ft()
  83. print (stamp..": "..msg)
  84. end
  85.  
  86. function tableWidth(t)
  87. local width=0
  88. for _,v in pairs(t) do
  89. if #v>width then width=#v end
  90. end
  91. return width
  92. end
  93.  
  94. function ljust(s,w)
  95. local pad=w-#s
  96. return s .. string.rep(" ",pad)
  97. end
  98.  
  99. function rjust(s,w)
  100. local pad=w-#s
  101. return string.rep(" ",pad) .. s
  102. end
  103.  
  104. function display()
  105. term.clear()
  106. term.setCursorPos(1,1)
  107. print("Reactor Status")
  108. print(ft())
  109. print("")
  110. local funcs={"Connected","Active","NumberOfControlRods","EnergyStored","EnergyPercent","CasingTemperature","FuelTemperature","FuelAmount","WasteAmount","FuelAmountMax","EnergyProducedLastTick"}
  111. local units={"","","","RF","%","C","C","mB","mB","mB","RF/t"}
  112. local values={}
  113. for _,v in pairs(funcs) do
  114. values[#values+1] = tostring(r["get"..v]())
  115. end
  116. local funcW=tableWidth(funcs)
  117. local valW=tableWidth(values)
  118. for i,v in pairs(funcs) do
  119. print(rjust(v,funcW)..": "..rjust(values[i],valW).." "..units[i])
  120. end
  121. end
  122.  
  123. log("Starting")
  124. setupDevs()
  125. while true do
  126. local e=r.getEnergyStored()
  127. local p=math.floor(100*e/emax)
  128. local a=p<100
  129. local elt=r.getEnergyProducedLastTick()
  130. display()
  131. r.setAllControlRodLevels(p)
  132. r.setActive(a)
  133. os.startTimer(0.8333334)
  134. local event,p1,p2,p3,p4,p5 = os.pullEvent()
  135. if event == "key" then
  136. break
  137. elseif event == "peripheral_detach" or event == "peripheral" or event == "monitor_resize" then
  138. setupDevs()
  139. elseif not (event == "timer" or event=="disk" or event=="disk_eject") then
  140. error("received "..event)
  141. end
  142. end
  143.  
  144. end)
  145. term.restore()
  146. error(msg)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement