ksen145

reactor

Oct 17th, 2024 (edited)
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.91 KB | Gaming | 0 0
  1. local reactorSide, reactor, rodsLevel, reactorCap, CapArr
  2. local monitorSide, monitor, h, w
  3. local monitorSide1, monitor1, h1, w1
  4.  
  5. local function getPeripheral(name)
  6.     local all = {}
  7.     for i, v in pairs(peripheral.getNames()) do
  8.         if(peripheral.getType(v) == name) then
  9.             table.insert(all, v)
  10.         end
  11.     end
  12.     return all
  13. end
  14.  
  15. function sleep(ticks)
  16.     local t = (1 / 20) * ticks
  17.     os.sleep(t)
  18. end
  19.  
  20. function sleepEvent()
  21.     local t = (1 / 20) * 10
  22.     os.sleep(t)
  23. end
  24.  
  25. function event()
  26.     local touch = os.pullEvent("monitor_touch")
  27.     return 0
  28. end
  29.  
  30. local function draw(CapArr, rodLevel, w, h)
  31.     CapArr[1] = CapArr[2]
  32.     for i = 2,(w-1) do
  33.       CapArr[i] = CapArr[i+1]
  34.       local y1 = math.floor(h/100*CapArr[i-1])
  35.       local y2 = math.floor(h/100*CapArr[i])
  36.       if y1 < 1 then
  37.         y1 = 1
  38.       elseif y1 > h then
  39.         y1 = h
  40.       end
  41.  
  42.       if y2 < 1 then
  43.         y2 = 1
  44.       elseif y2 > h then
  45.         y2 = h
  46.       end
  47.       if i > 18 then
  48.         paintutils.drawLine(i-1,y1,i,y2,colors.yellow)
  49.       end
  50.     end
  51.    
  52.     CapArr[w] = rodLevel
  53.     local y1 = math.floor(h/100*CapArr[w-1])
  54.     local y2 = math.floor(h/100*CapArr[w])
  55.     if y1 < 1 then
  56.         y1 = 1
  57.     elseif y1 > h then
  58.         y1 = h
  59.     end
  60.  
  61.     if y2 < 1 then
  62.         y2 = 1
  63.     elseif y2 > h then
  64.         y2 = h
  65.     end
  66.  
  67.     paintutils.drawLine(h-1,y1,h,y2,colors.yellow)
  68.     return CapArr
  69. end
  70.  
  71. local function bar(monitor,reactor, counter)
  72.     monitor.setCursorPos(1,1)
  73.     if reactor.getActive() then
  74.         monitor.write("Status:")
  75.         monitor.setTextColor(colors.green)
  76.         monitor.setCursorPos(8,1)
  77.         monitor.write("Active")
  78.         monitor.setTextColor(colors.orange)
  79.     else
  80.         monitor.write("Status:")
  81.         monitor.setTextColor(colors.red)
  82.         monitor.setCursorPos(8,1)
  83.         monitor.write("Down")
  84.         monitor.setTextColor(colors.orange)
  85.     end
  86.     monitor.setCursorPos(1,2)
  87.     monitor.write("Work ticks:"..counter)
  88.     monitor.setCursorPos(1,3)
  89.     monitor.write("Energy:"..reactorCap)
  90.     monitor.setCursorPos(1,4)
  91.     monitor.write("RodsLevel:"..rodsLevel-1)
  92.     monitor.setCursorPos(1,4)
  93.     monitor.write("RF/Tick:"..reactor.getEnergyProducedLastTick())
  94. end
  95.  
  96. reactorSide = getPeripheral("BigReactors-Reactor")
  97. reactor = peripheral.wrap(reactorSide[1])
  98.  
  99. monitorSide = getPeripheral("monitor")
  100. monitor = peripheral.wrap(monitorSide[1])
  101.  
  102. monitor.clear()
  103.  
  104. monitor.setTextScale(0.5)
  105. monitor.setBackgroundColor(colors.black)
  106. monitor.setTextColor(colors.orange)
  107. monitor.setCursorPos(1,1)
  108.  
  109. w, h = monitor.getSize()
  110. local counter = 0;
  111.  
  112. local oldTerm = term.redirect(monitor)
  113.  
  114. CapArr = {}
  115. for i = 1,w do
  116.     CapArr[i] = 0
  117.   end
  118.  
  119. while true do
  120.  
  121.     rodsLevel = reactor.getControlRodLevel(1)
  122.  
  123.     reactorCap = reactor.getEnergyStored()
  124.  
  125.     local numFunc = parallel.waitForAny(event, sleepEvent)
  126.  
  127.     if (numFunc == 1) then
  128.         break
  129.     end
  130.  
  131.     if(reactorCap > reactor.getEnergyStored()) then
  132.         reactor.setAllControlRodLevels(rodsLevel - 1)
  133.     end
  134.  
  135.     if(reactorCap < reactor.getEnergyStored()) then
  136.         reactor.setAllControlRodLevels(rodsLevel + 1)
  137.     end
  138.  
  139.     if(reactorCap == 0) then
  140.         reactor.setAllControlRodLevels(rodsLevel - 1)
  141.     end
  142.  
  143.     if(reactorCap == 100) then
  144.         reactor.setAllControlRodLevels(rodsLevel + 1)
  145.     end
  146.  
  147.     monitor.clear()
  148.     monitor.setBackgroundColor(colors.black)
  149.     monitor.clear()
  150.     monitor.setBackgroundColor(colors.black)
  151.     counter = counter + 1
  152.  
  153.     bar(monitor, reactor, counter)
  154.  
  155.     CapArr = draw(CapArr, reactor.getControlRodLevel(1), w, h)
  156. end
  157.  
  158. term.redirect(oldTerm)
  159.  
  160. monitor.clear()
  161. monitor.setBackgroundColor(colors.black)
  162. monitor.setTextColor(colors.orange)
  163. monitor.clear()
  164. monitor.setBackgroundColor(colors.black)
  165. monitor.setTextColor(colors.orange)
  166. monitor.setCursorPos(1,1)
  167. monitor.write("exit")
Advertisement
Add Comment
Please, Sign In to add comment