Advertisement
ksen145

reactor

Oct 17th, 2024 (edited)
58
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
Advertisement