Damaged

Reactor Control 3

Aug 3rd, 2014
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local rodLevels = 0
  2. reactor = peripheral.wrap("back")
  3. local numRods = reactor.getNumberOfControlRods()
  4. barGraph = peripheral.wrap("top")
  5. x,y = barGraph.getSize()
  6.  
  7. function drawGraph()
  8.    while true do
  9.       while not fs.exists("graph.dat") do
  10.          sleep(.05)
  11.       end
  12.       dataFile = fs.open("graph.dat", "r")
  13.       percentValue = tonumber(dataFile.readLine())
  14.       dataFile.close()
  15.       print("drawGraph:"..percentValue)
  16.       barGraph.clear()
  17.       for j = y,1,-1 do
  18.          barGraph.setCursorPos(1,j)
  19.          if ( y-j ) * ( y/100 ) <= percentValue then
  20.             barGraph.setBackgroundColour(colors.green)
  21.          else
  22.             barGraph.setBackgroundColour(colors.black)
  23.          end
  24.          barGraph.write(string.rep(" ",x))
  25.       end
  26.       sleep(2)
  27.    end
  28. end
  29.  
  30.  
  31. --backgroundGraphing = coroutine.create(drawGraph)
  32. --coroutine.resume(backgroundGraphing)
  33. local storageArray = {}
  34. for i = 0,19 do
  35.    storageArray[i] = peripheral.wrap("cofh_thermalexpansion_energycell_"..i)
  36. end
  37.  
  38. function setRods()
  39.    for i = 0, numRods - 1 do
  40.       reactor.setControlRodLevel(i,math.max( math.min( rodLevels - ( 100 * i ), 100 ) , 0 ) )
  41.    end
  42. end
  43.  
  44. powerUsed = 0
  45. function getEnergyPercent()
  46.    storageMax = 0
  47.    storageTotal = 0
  48.    for i,storageCell in pairs(storageArray) do
  49.       storageTotal = storageTotal + storageCell.getEnergyStored("top")
  50.       storageMax = storageMax + storageCell.getMaxEnergyStored("top")
  51.    end
  52.    fs.delete("graph.dat")
  53.    dataFile = fs.open("graph.dat","w")
  54.    dataFile.write(tostring(storageTotal / storageMax * 100))
  55.    dataFile.close()
  56.    print("Power Stored:"..tostring(storageTotal / storageMax * 100))
  57.    return storageTotal / storageMax * 100
  58. end
  59. function getEnergy()
  60.    storageTotal = 0
  61.    for i,storageCell in pairs(storageArray) do
  62.       storageTotal = storageTotal + storageCell.getEnergyStored("top")
  63.    end
  64.    return storageTotal
  65. end
  66.  
  67. print("Starting reactor and collecting baselines")
  68. reactor.setActive(true)
  69. rodLevels = 0
  70. setRods()
  71. local maxOutput = 0
  72. while true do
  73.    if maxOutput + maxOutput / 20 < reactor.getEnergyProducedLastTick() then
  74.       maxOutput = reactor.getEnergyProducedLastTick()
  75.    else
  76.       break
  77.    end
  78.    sleep(1)
  79. end
  80. rodLevels = 100 * numRods
  81. setRods()
  82. print("Max Output:"..maxOutput)
  83. while true do
  84.    lastPower = getEnergy()
  85.    sleep(1)
  86.    print("Power Delta:"..getEnergy() - lastPower)
  87.    print("Power Generated:"..reactor.getEnergyProducedLastTick())
  88.    powerUsed = math.abs( math.min( ( getEnergy() - lastPower ) - reactor.getEnergyProducedLastTick() ) , 0 )
  89.    rodLevels = math.floor( ( 100 - ( ( powerUsed / maxOutput ) * 100 ) ) * numRods )
  90.    if getEnergyPercent() > 40 then
  91.       rodLevels = numRods * 100
  92.    end
  93.    if reactor.getEnergyStored() > 9000000 then
  94.       reactor.setActive(false)
  95.    else
  96.       reactor.setActive(true)
  97.    end
  98.    print("Rod Levels: "..rodLevels)
  99.    print("Power Generated:"..reactor.getEnergyProducedLastTick())
  100.    print("Power Used:"..powerUsed)
  101.    setRods()
  102.    --coroutine.resume(backgroundGraphing)
  103.    sleep(1)
  104. end
Advertisement
Add Comment
Please, Sign In to add comment