Guest User

ForceCoreControlV3.6

a guest
Oct 18th, 2013
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.27 KB | None | 0 0
  1. frequency = 1 --How many seconds before refreshing the program
  2. refreshCycle = 10 --How many cycles before measuring energy variation
  3. cycleCounter = 10 --Initial value for cycle counter
  4. pressedButton = 1 --Term button that is pressed initially
  5. termHeaderColor = colors.blue --Term headers Color
  6. headerColor = colors.lightGray --Header Color
  7. frameColor = colors.blue --Frame Color
  8. bottomCellsColor = colors.magenta --Color for top cells
  9. topCellsColor = colors.lightBlue --Color for bottom cells
  10. autoModeColor = colors.white --Color for Auto-Mode buttons
  11. manualModeColor = colors.orange --Color for Manual-mode buttons
  12. stateOnColor = colors.lime --Color for "On" state
  13. stateOffColor = colors.red --Color for "Off" state
  14. emptyBarColor = colors.gray --Color for empty bar spaces
  15. pressedButtonColor = colors.lightGray --Color for pressed button on term
  16. energyGainColor = colors.lime --Color for positive energy variation
  17. energyLossColor = colors.red --Color for negative energy variation
  18. energySameColor = colors.lightBlue --Color for no energy variation
  19. energyBarGaps = {21,51,71,91,101} --Energy % under wich the bar will have a specific color (Default => 0-20%, 21-50%, 51-70%, 71-90%,91-100%
  20. energyBarColors = {colors.red,colors.orange,colors.pink,colors.yellow,colors.lime} --Color for each energy quantity in the bar
  21. colorCode = {colors.white,colors.pink,colors.yellow,colors.magenta,colors.orange,colors.gray,colors.lime,colors.lightBlue} --Output color for each cell
  22. energyLevel = {0,0,0,0,0,0,0,0} --Default values for energy levels
  23. cellEnergy = {0,0,0,0,0,0,0,0} --Default values for energy levels
  24. energyVariation = {0,0,0,0,0,0,0,0}
  25. curState = {}
  26. buttonStates = {}
  27. legacyEnergy1 = {}
  28. legacyEnergy2 = {}
  29. legacyEnergy3 = {}
  30. legacyEnergy4 = {}
  31. legacyEnergy5 = {}
  32. legacyEnergy6 = {}
  33. legacyEnergy7 = {}
  34. legacyEnergy8 = {}
  35.  
  36. function checkInstallation()
  37.  if fs.isDir("MonitorFiles") == false then
  38.   fs.makeDir("MonitorFiles")
  39.  end
  40.  if fs.exists("MonitorFiles/ProductionStates") == false then
  41.   stateFile = fs.open("MonitorFiles/ProductionStates","w")
  42.   for i=1,8 do
  43.    stateFile.writeLine(0)
  44.   end
  45.   stateFile.close()
  46.  end
  47.  if fs.exists("MonitorFiles/ButtonStates") == false then
  48.   buttonFile = fs.open("MonitorFiles/ButtonStates","w")
  49.   for i=1,8 do
  50.    buttonFile.writeLine(0)
  51.   end
  52.   buttonFile.close()
  53.  end
  54.  if fs.exists("MonitorFiles/LegacyEnergy1") == false then
  55.   energyFile = fs.open("MonitorFiles/LegacyEnergy1","w")
  56.   for i=1,47 do
  57.    energyFile.writeLine(0)
  58.   end
  59.   energyFile.close()
  60.  end
  61.  if fs.exists("MonitorFiles/LegacyEnergy2") == false then
  62.   energyFile = fs.open("MonitorFiles/LegacyEnergy2","w")
  63.   for i=1,47 do
  64.    energyFile.writeLine(0)
  65.   end
  66.   energyFile.close()
  67.  end
  68.  if fs.exists("MonitorFiles/LegacyEnergy3") == false then
  69.   energyFile = fs.open("MonitorFiles/LegacyEnergy3","w")
  70.   for i=1,47 do
  71.    energyFile.writeLine(0)
  72.   end
  73.   energyFile.close()
  74.  end
  75.  if fs.exists("MonitorFiles/LegacyEnergy4") == false then
  76.   energyFile = fs.open("MonitorFiles/LegacyEnergy4","w")
  77.   for i=1,47 do
  78.    energyFile.writeLine(0)
  79.   end
  80.   energyFile.close()
  81.  end
  82.  if fs.exists("MonitorFiles/LegacyEnergy5") == false then
  83.   energyFile = fs.open("MonitorFiles/LegacyEnergy5","w")
  84.   for i=1,47 do
  85.    energyFile.writeLine(0)
  86.   end
  87.   energyFile.close()
  88.  end
  89.  if fs.exists("MonitorFiles/LegacyEnergy6") == false then
  90.   energyFile = fs.open("MonitorFiles/LegacyEnergy6","w")
  91.   for i=1,47 do
  92.    energyFile.writeLine(0)
  93.   end
  94.   energyFile.close()
  95.  end
  96.  if fs.exists("MonitorFiles/LegacyEnergy7") == false then
  97.   energyFile = fs.open("MonitorFiles/LegacyEnergy7","w")
  98.   for i=1,47 do
  99.    energyFile.writeLine(0)
  100.   end
  101.   energyFile.close()
  102.  end
  103.  if fs.exists("MonitorFiles/LegacyEnergy8") == false then
  104.   energyFile = fs.open("MonitorFiles/LegacyEnergy8","w")
  105.   for i=1,47 do
  106.    energyFile.writeLine(0)
  107.   end
  108.   energyFile.close()
  109.  end
  110. end
  111.  
  112. function getPowerStates() --Gets on/off states for power lines
  113.  stateFile = fs.open("MonitorFiles/ProductionStates","r") --Opens the state file for reading
  114.  line = stateFile.readLine()
  115.  repeat --Gets states
  116.   value = tonumber(line) --Converts string into number
  117.   table.insert(curState,value)
  118.   line = stateFile.readLine()
  119.  until line == nil
  120.  stateFile.close() --Closes File
  121. end
  122.  
  123. function getButtonStates() --Get states for override buttons
  124.  buttonFile = fs.open("MonitorFiles/ButtonStates","r") --Open file
  125.  line = buttonFile.readLine()
  126.  repeat --Gets states
  127.   value = tonumber(line) --Converts string into number
  128.   table.insert(buttonStates,value)
  129.   line = buttonFile.readLine()
  130.  until line == nil
  131.  buttonFile.close() --Closes File
  132. end
  133.  
  134. function getLegacyValues() --Gets legacy energy values
  135.  
  136.  energyFile = fs.open("MonitorFiles/LegacyEnergy1","r")
  137.  line = energyFile.readLine()
  138.  repeat --Gets states
  139.   value = tonumber(line) --Converts string into number
  140.   table.insert(legacyEnergy1,value)
  141.   line = energyFile.readLine()
  142.  until line == nil
  143.  energyFile.close()
  144.  
  145.  energyFile = fs.open("MonitorFiles/LegacyEnergy2","r")
  146.  line = energyFile.readLine()
  147.  repeat --Gets states
  148.   value = tonumber(line) --Converts string into number
  149.   table.insert(legacyEnergy2,value)
  150.   line = energyFile.readLine()
  151.  until line == nil
  152.  energyFile.close()
  153.  
  154.  energyFile = fs.open("MonitorFiles/LegacyEnergy3","r")
  155.  line = energyFile.readLine()
  156.  repeat --Gets states
  157.   value = tonumber(line) --Converts string into number
  158.   table.insert(legacyEnergy3,value)
  159.   line = energyFile.readLine()
  160.  until line == nil
  161.  energyFile.close()
  162.  
  163.  energyFile = fs.open("MonitorFiles/LegacyEnergy4","r")
  164.  line = energyFile.readLine()
  165.  repeat --Gets states
  166.   value = tonumber(line) --Converts string into number
  167.   table.insert(legacyEnergy4,value)
  168.   line = energyFile.readLine()
  169.  until line == nil
  170.  energyFile.close()
  171.  
  172.  energyFile = fs.open("MonitorFiles/LegacyEnergy5","r")
  173.  line = energyFile.readLine()
  174.  repeat --Gets states
  175.   value = tonumber(line) --Converts string into number
  176.   table.insert(legacyEnergy5,value)
  177.   line = energyFile.readLine()
  178.  until line == nil
  179.  energyFile.close()
  180.  
  181.  energyFile = fs.open("MonitorFiles/LegacyEnergy6","r")
  182.  line = energyFile.readLine()
  183.  repeat --Gets states
  184.   value = tonumber(line) --Converts string into number
  185.   table.insert(legacyEnergy6,value)
  186.   line = energyFile.readLine()
  187.  until line == nil
  188.  energyFile.close()
  189.  
  190.  energyFile = fs.open("MonitorFiles/LegacyEnergy7","r")
  191.  line = energyFile.readLine()
  192.  repeat --Gets states
  193.   value = tonumber(line) --Converts string into number
  194.   table.insert(legacyEnergy7,value)
  195.   line = energyFile.readLine()
  196.  until line == nil
  197.  energyFile.close()
  198.  
  199.  energyFile = fs.open("MonitorFiles/LegacyEnergy8","r")
  200.  line = energyFile.readLine()
  201.  repeat --Gets states
  202.   value = tonumber(line) --Converts string into number
  203.   table.insert(legacyEnergy8,value)
  204.   line = energyFile.readLine()
  205.  until line == nil
  206.  energyFile.close()
  207.  
  208. end
  209.  
  210. function getStates() --Merges previous 3 functions
  211.  getPowerStates()
  212.  getButtonStates()
  213.  getLegacyValues()
  214. end
  215.  
  216. cell0Periph = peripheral.wrap("redstone_energy_cell_0")
  217. cell1Periph = peripheral.wrap("redstone_energy_cell_1")
  218. cell2Periph = peripheral.wrap("redstone_energy_cell_2")
  219. cell3Periph = peripheral.wrap("redstone_energy_cell_3")
  220. cell4Periph = peripheral.wrap("redstone_energy_cell_4")
  221. cell5Periph = peripheral.wrap("redstone_energy_cell_5")
  222. cell6Periph = peripheral.wrap("redstone_energy_cell_6")
  223. cell7Periph = peripheral.wrap("redstone_energy_cell_7")
  224.  
  225. function chooseBarColor(energy) --Chooses bar color depending on energy level
  226.  for i=1,5 do
  227.   if energy < energyBarGaps[i] then --Test each gap until finding the right one (the "right one" is when the energy value is smaller than the first value for the first gap)
  228.    return energyBarColors[i]
  229.   end
  230.  end
  231. end
  232.  
  233. function getProviders()
  234.   cell0 = cell0Periph.getPowerProvider()
  235.   cell1 = cell1Periph.getPowerProvider()
  236.   cell2 = cell2Periph.getPowerProvider()
  237.   cell3 = cell3Periph.getPowerProvider()
  238.   cell4 = cell4Periph.getPowerProvider()
  239.   cell5 = cell5Periph.getPowerProvider()
  240.   cell6 = cell6Periph.getPowerProvider()
  241.   cell7 = cell7Periph.getPowerProvider()
  242. end
  243.  
  244. function drawTermTitles() --Writes headers on terminal
  245.  term.setBackgroundColor(termHeaderColor)
  246.  term.setCursorPos(1,1)
  247.  term.write(" Energy Cell Charge"..string.rep(" ",32))
  248.  term.setCursorPos(1,10)
  249.  term.write(" Energy Variation")
  250.  refreshTime = frequency * refreshCycle
  251.  str = ("(For every "..refreshTime.." seconds) ") --Indicates how often the variation is calculated
  252.  strCount = string.len(str)
  253.  emptySpaces = 34-strCount
  254.  term.write(string.rep(" ",emptySpaces))
  255.  term.write(str)
  256.  term.setBackgroundColor(colors.black)
  257. end
  258.  
  259. function writeBarGraph(cellNum, energyValue, state)
  260.  
  261.    term.setTextColor(colorCode[cellNum])
  262.    term.write("   Cell "..cellNum..": [")
  263.  
  264.    w,h = term.getCursorPos()
  265.    term.setBackgroundColor(emptyBarColor)
  266.    term.write(string.rep(" ",25))
  267.  
  268.    term.setBackgroundColor(colors.black)
  269.    term.write("]  ")
  270.    if state == 0 then --Set color for either on or off
  271.     term.setTextColor(stateOffColor)
  272.     term.write("Off")
  273.    else
  274.     term.setTextColor(stateOnColor)
  275.     term.write("On ")
  276.    end
  277.    term.setTextColor(colorCode[cellNum])
  278.    term.write("  "..energyLevel[cellNum].."%")
  279.    term.setTextColor(colors.white)
  280.  
  281.    term.setCursorPos(w,h)
  282.    color = chooseBarColor(energyValue)
  283.    term.setBackgroundColor(color)
  284.    term.write(string.rep(" ",energyValue/4))
  285.    term.setBackgroundColor(colors.black)
  286.  
  287. end
  288.  
  289. function writeStatus()
  290.  
  291.   for x=1,8 do
  292.    term.setCursorPos(1,x+1)
  293.    writeBarGraph(x, energyLevel[x], curState[x])
  294.   end
  295.  
  296. end
  297.  
  298. function writeEnergyVariation() --Write energy variation for each cell (on terminal)
  299.  for n=1,8 do
  300.   if pressedButton == n then
  301.    term.setBackgroundColor(pressedButtonColor) --Highlights the current cell selected
  302.   end
  303.   term.setTextColor(colorCode[n])
  304.   if n > 4 then
  305.    y = 12
  306.   else
  307.    y = 11
  308.   end
  309.   xpos = n
  310.   if n > 4 then
  311.    xpos = xpos - 4
  312.   end
  313.   x = (xpos*10+3*xpos)-12
  314.   term.setCursorPos(x,y)
  315.   term.write("[C"..n..":")
  316.   value = energyVariation[n]
  317.   if value > 0 then --Decides color and signal
  318.    term.setTextColor(energyGainColor)
  319.    signal = "+"
  320.    writeValue = value
  321.   else
  322.    if value < 0 then
  323.     term.setTextColor(energyLossColor)
  324.     signal = "-"
  325.     writeValue = value * (-1) --Converts the negative value to a positive, both for making it easier to translate to GJ and to avoid double "-"s
  326.    else
  327.     term.setTextColor(energySameColor)
  328.     signal = " "
  329.     writeValue = value
  330.    end
  331.   end
  332.   if writeValue > 999 then --Converts to GJ if needed
  333.    writeValue = math.ceil(writeValue/1000)
  334.    size = "GJ"
  335.   else
  336.    size = "MJ"
  337.   end
  338.   valueString = tostring(signal..writeValue..size)
  339.   chars = string.len(valueString)
  340.   spaces = 7 - chars --Calculate blank space that needs to be in order for the value be on the rightmost of the button
  341.   for i=1,spaces do
  342.    term.write(" ") --Keeps format for smaller numbers
  343.   end
  344.   term.write(valueString)
  345.   term.setTextColor(colorCode[n])
  346.   term.write("]")
  347.   term.setBackgroundColor(colors.black)
  348.   term.setTextColor(colors.white)
  349.  end
  350. end
  351.  
  352. function drawChartGrid() --Writes chart grid
  353.  term.setBackgroundColor(colorCode[pressedButton]) --Chart is the same color as output of current cell
  354.  term.setTextColor(colors.black)
  355.  for o=1,7 do
  356.   term.setCursorPos(5,12+o)
  357.   term.write("#")
  358.  end
  359.  term.setCursorPos(1,18)
  360.  term.write(string.rep("#",51))
  361.  for p=1,3 do
  362.   term.setCursorPos(5,p*2+11)
  363.   term.write("_")
  364.  end
  365.  for q=1,10 do
  366.   term.setCursorPos(q*5+1,18)
  367.   term.write("|")
  368.  end
  369.  term.setBackgroundColor(colors.black)
  370. end
  371.  
  372. function writeChartTitles() --Write guide numbers on chart
  373.  term.setTextColor(colorCode[pressedButton])
  374.  for r=1,3 do --Write left guide values
  375.   term.setCursorPos(1,r*2+11)
  376.   quant = 240*(3-r)
  377.   if quant < 100 then
  378.    if quant < 10 then
  379.     term.write ("  ")
  380.    else
  381.     term.write(" ")
  382.    end
  383.   end
  384.   term.write(quant.."G")
  385.  end
  386.  term.setCursorPos(51,19)
  387.  term.write("0")
  388.  for g=1,9 do --Write bottom guide values
  389.   secs = tostring(g*50)
  390.   xpos = (51-5*g)
  391.   term.setCursorPos(xpos,19)
  392.   term.write(secs)
  393.  end
  394.  term.setCursorPos(1,19)
  395.  term.write("SxJ") --Indicates the graph is SecondsXJoules (xAxis X yAxis)
  396.  term.setTextColor(colors.white)
  397. end
  398.  
  399. function drawChartData() --Draws data on chart
  400.  if pressedButton == 1 then --Gets legacy values for current cell displayed
  401.   legacyEnergy = legacyEnergy1
  402.  else
  403.   if pressedButton == 2 then
  404.    legacyEnergy = legacyEnergy2
  405.   else
  406.    if pressedButton == 3 then
  407.     legacyEnergy = legacyEnergy3
  408.    else
  409.     if pressedButton == 4 then
  410.      legacyEnergy = legacyEnergy4
  411.     else
  412.      if pressedButton == 5 then
  413.       legacyEnergy = legacyEnergy5
  414.      else
  415.       if pressedButton == 6 then
  416.        legacyEnergy = legacyEnergy6
  417.       else
  418.        if pressedButton == 7 then
  419.         legacyEnergy = legacyEnergy7
  420.        else
  421.         legacyEnergy = legacyEnergy8
  422.        end
  423.       end
  424.      end
  425.     end
  426.    end
  427.   end
  428.  end
  429.  for a=1,46 do --Draws each position on the graph
  430.   xpos = 52-a
  431.   val = legacyEnergy[a]
  432.   if val > 0 then --Zero is also on line 1 (lowest line), not on line 0
  433.    posVal = math.ceil(val/120000)
  434.   else
  435.    posVal = 1
  436.   end
  437.   ypos = 18-posVal
  438.   if legacyEnergy[a] > legacyEnergy[a+1] then --Sets color for energy gain/loss/same
  439.    term.setBackgroundColor(energyGainColor)
  440.   else
  441.    if legacyEnergy[a] < legacyEnergy[a+1] then
  442.     term.setBackgroundColor(energyLossColor)
  443.    else
  444.     term.setBackgroundColor(energySameColor)
  445.    end
  446.   end
  447.   term.setCursorPos(xpos,ypos)
  448.   term.write(" ") --Draws position
  449.  end
  450.  term.setBackgroundColor(colors.black)
  451. end
  452.  
  453. function drawChart() --Merges function related to legacy energy chart
  454.  drawChartGrid()
  455.  writeChartTitles()
  456.  drawChartData()
  457. end
  458.  
  459. function drawTerminalScreen() --Merges functions relatet to the terminal screen
  460.  term.clear()
  461.  drawTermTitles()
  462.  writeStatus()
  463.  writeEnergyVariation()
  464.  drawChart()
  465. end
  466.  
  467. function setOutput()
  468.   curColors = 0
  469.  
  470.   for v=1,8 do
  471.    if buttonStates[v] == 0 then
  472.     if energyLevel[v] < 50 then
  473.       curState[v] = 1
  474.     else
  475.      if energyLevel[v] > 90 then
  476.       curState[v] = 0
  477.      end
  478.     end
  479.    end
  480.   end
  481.  
  482.   curColors = curState[1] * colors.white + curState[2] * colors.pink + curState[3] * colors.yellow + curState[4] * colors.magenta + curState[5] * colors.orange + curState[6] * colors.gray + curState[7] * colors.lime + curState[8] * colors.lightBlue
  483.   rs.setBundledOutput("right", curColors)
  484.  
  485. end
  486.  
  487. monitor = peripheral.wrap("monitor_0")
  488.  
  489. function getEnergy() --Gets % of energy on each cell
  490.  energyLevel[1] = math.floor((cell0.energyStored/cell0.maxEnergyStored)*100)
  491.  energyLevel[2] = math.floor((cell1.energyStored/cell1.maxEnergyStored)*100)
  492.  energyLevel[3] = math.floor((cell2.energyStored/cell2.maxEnergyStored)*100)
  493.  energyLevel[4] = math.floor((cell3.energyStored/cell3.maxEnergyStored)*100)
  494.  energyLevel[5] = math.floor((cell4.energyStored/cell4.maxEnergyStored)*100)
  495.  energyLevel[6] = math.floor((cell5.energyStored/cell5.maxEnergyStored)*100)
  496.  energyLevel[7] = math.floor((cell6.energyStored/cell6.maxEnergyStored)*100)
  497.  energyLevel[8] = math.floor((cell7.energyStored/cell7.maxEnergyStored)*100)
  498. end
  499.  
  500. function getCellEnergy() --Gets amount of energy stored in each cell
  501.  cellEnergy[1] = cell0.energyStored
  502.  cellEnergy[2] = cell1.energyStored
  503.  cellEnergy[3] = cell2.energyStored
  504.  cellEnergy[4] = cell3.energyStored
  505.  cellEnergy[5] = cell4.energyStored
  506.  cellEnergy[6] = cell5.energyStored
  507.  cellEnergy[7] = cell6.energyStored
  508.  cellEnergy[8] = cell7.energyStored
  509. end
  510.  
  511. function refreshLegacyEnergy() --Updates energy history
  512.  table.insert(legacyEnergy1,1,cellEnergy[1])
  513.  table.remove(legacyEnergy1,48)
  514.  table.insert(legacyEnergy2,1,cellEnergy[2])
  515.  table.remove(legacyEnergy2,48)
  516.  table.insert(legacyEnergy3,1,cellEnergy[3])
  517.  table.remove(legacyEnergy3,48)
  518.  table.insert(legacyEnergy4,1,cellEnergy[4])
  519.  table.remove(legacyEnergy4,48)
  520.  table.insert(legacyEnergy5,1,cellEnergy[5])
  521.  table.remove(legacyEnergy5,48)
  522.  table.insert(legacyEnergy6,1,cellEnergy[6])
  523.  table.remove(legacyEnergy6,48)
  524.  table.insert(legacyEnergy7,1,cellEnergy[7])
  525.  table.remove(legacyEnergy7,48)
  526.  table.insert(legacyEnergy8,1,cellEnergy[8])
  527.  table.remove(legacyEnergy8,48)
  528. end
  529.  
  530. function getEnergyVariation() --Calculates energy variation
  531.  energyVariation[1] = legacyEnergy1[1] - legacyEnergy1[2]
  532.  energyVariation[2] = legacyEnergy2[1] - legacyEnergy2[2]
  533.  energyVariation[3] = legacyEnergy3[1] - legacyEnergy3[2]
  534.  energyVariation[4] = legacyEnergy4[1] - legacyEnergy4[2]
  535.  energyVariation[5] = legacyEnergy5[1] - legacyEnergy5[2]
  536.  energyVariation[6] = legacyEnergy6[1] - legacyEnergy6[2]
  537.  energyVariation[7] = legacyEnergy7[1] - legacyEnergy7[2]
  538.  energyVariation[8] = legacyEnergy8[1] - legacyEnergy8[2]
  539. end
  540.  
  541. function calculateEnergy() --Merges functions related with energy calculation
  542.  getEnergy()
  543.  if cycleCounter == refreshCycle then --Refresh legacy if enough cycles have passed
  544.   getCellEnergy()
  545.   refreshLegacyEnergy()
  546.   getEnergyVariation()
  547.  end
  548. end
  549.  
  550. function drawGrid() --Draws Grid
  551.  monitor.setBackgroundColor(headerColor)
  552.  monitor.setTextColor(frameColor)
  553.  monitor.setCursorPos(1,1)
  554.  monitor.write(string.rep("#",19).."Energy Charge"..string.rep("#",18)) --Draws Top Row
  555.  monitor.setBackgroundColor(colors.black)
  556.  for i=1,18 do --Draw 2-18th rows
  557.   monitor.setCursorPos(1,i+1)
  558.   monitor.write("#"..string.rep(" ",48).."#")
  559.  end
  560.  monitor.setCursorPos(1,19)
  561.  monitor.write(string.rep("#",50)) --Draw 19th row
  562.  monitor.setTextColor(colors.white)
  563. end
  564.  
  565. function drawColorGuide() --Draw the guide for color-codes
  566.  monitor.setCursorPos(4,19)
  567.  monitor.setTextColor(bottomCellsColor)
  568.  monitor.write("#")
  569.  monitor.setTextColor(colors.white)
  570.  monitor.write("=Bottom Cell ")
  571.  monitor.setTextColor(topCellsColor)
  572.  monitor.write("#")
  573.  monitor.setTextColor(colors.white)
  574.  monitor.write("=Top Cell")
  575.  monitor.setCursorPos(32,19)
  576.  monitor.setBackgroundColor(autoModeColor)
  577.  monitor.write(" ")
  578.  monitor.setBackgroundColor(colors.black)
  579.  monitor.write("=Auto  ")
  580.  monitor.setBackgroundColor(manualModeColor)
  581.  monitor.write(" ")
  582.  monitor.setBackgroundColor(colors.black)
  583.  monitor.write("=Manual")
  584. end
  585.  
  586. function drawButtons() --Draws override buttons and
  587.  for m=1,8 do
  588.   monitor.setCursorPos(36,m*2+1)
  589.   if buttonStates[m] == 0 then --Sees if button is Auto or Manual mode
  590.    monitor.setBackgroundColor(autoModeColor)
  591.   else
  592.    monitor.setBackgroundColor(manualModeColor)
  593.   end
  594.   if curState[m] == 0 then --Sees if on or off
  595.    monitor.setTextColor(stateOffColor)
  596.    monitor.write(" Off ")
  597.   else
  598.    monitor.setTextColor(stateOnColor)
  599.    monitor.write(" On  ")
  600.   end
  601.   monitor.setTextColor(colors.black)
  602.   monitor.setCursorPos(36,m*2+1)
  603.   monitor.write("[")
  604.   monitor.setCursorPos(40,m*2+1)
  605.   monitor.write("]=")
  606.   monitor.setTextColor(colors.white) --Resets colors
  607.   monitor.setBackgroundColor(colors.black)
  608.  end
  609. end
  610.  
  611. function drawEnergyGrid() --Draws base grid for bars
  612.  monitor.setBackgroundColor(emptyBarColor)
  613.  for q=1,8 do
  614.   monitor.setCursorPos(9,q*2+1)
  615.   monitor.write(string.rep(" ",20))
  616.  end
  617.  monitor.setBackgroundColor(colors.black)
  618. end
  619.  
  620. function drawEnergyTitles() --Draws titles for energy graph
  621.  monitor.setTextColor(bottomCellsColor)
  622.  for o=1,4 do
  623.   monitor.setCursorPos(2,2*o+1)
  624.   monitor.write("Cell "..o)
  625.  end
  626.  monitor.setTextColor(topCellsColor)
  627.  for p=1,4 do
  628.   monitor.setCursorPos(2,2*p+9)
  629.   monitor.write("Cell "..p+4)
  630.  end
  631.  monitor.setTextColor(colors.white) --Resets text color
  632. end
  633.  
  634. function writeEnergy() --Writes energy % for each cell
  635.  for u=1,8 do
  636.   monitor.setTextColor(colorCode[u]) --Color each level for corresponding output
  637.   monitor.setCursorPos(31,2*u+1)
  638.   monitor.write(energyLevel[u].."%")
  639.  end
  640.  monitor.setTextColor(colors.white) --Resets text color
  641. end
  642.  
  643. function drawEnergyVariation()
  644.  for b=1,8 do
  645.   monitor.setCursorPos(42,b*2+1)
  646.   value = energyVariation[b]
  647.   if value > 0 then --Decides color and signal
  648.    monitor.setTextColor(energyGainColor)
  649.    signal = "+"
  650.    writeValue = value
  651.   else
  652.    if value < 0 then
  653.     monitor.setTextColor(energyLossColor)
  654.     signal = "-"
  655.     writeValue = value * (-1)
  656.    else
  657.     monitor.setTextColor(energySameColor)
  658.     signal = " "
  659.     writeValue = value
  660.    end
  661.   end
  662.   if writeValue > 999 then --Converts to GJ if needed
  663.    writeValue = math.ceil(writeValue/1000)
  664.    size = "GJ"
  665.   else
  666.    size = "MJ"
  667.   end
  668.   valueString = tostring(signal..writeValue..size)
  669.   chars = string.len(valueString)
  670.   spaces = 7 - chars
  671.   for i=1,spaces do
  672.    monitor.write(" ") --Keeps format for smaller numbers
  673.   end
  674.   monitor.write(valueString)
  675.  end
  676. end
  677.  
  678. function drawEnergyBar() --Draw energy bars
  679.  for y=1,8 do
  680.   monitor.setCursorPos(9,2*y+1)
  681.   h = energyLevel[y]
  682.   color = chooseBarColor(h)
  683.   monitor.setBackgroundColor(color)
  684.   g = h/5 --How many spaces need to be filled
  685.   monitor.write(string.rep(" ",g)) --Draw bar
  686.  end
  687.  monitor.setBackgroundColor(colors.black) --Resets background color
  688. end
  689.  
  690. function drawEnergyGraph() --Merge functions related to the energy graph
  691.  drawEnergyGrid()
  692.  drawEnergyTitles()
  693.  writeEnergy()
  694.  drawEnergyBar()
  695. end
  696.  
  697. function drawMonitor() --Merges monitor-related functions
  698.  monitor.clear()
  699.  drawGrid()
  700.  drawColorGuide()
  701.  drawButtons()
  702.  drawEnergyGraph()
  703.  drawEnergyVariation()
  704. end
  705.  
  706. function buttonPress(x,y) --Detects wich button was pressed
  707.  if x > 35 and x < 41 then
  708.   y = (y-1)/2
  709.   if y > 0 and y < 9 then
  710.    overrideButton(y)
  711.   end
  712.  end
  713. end
  714.  
  715. function overrideButton(button) --Apply button press
  716.  f = button
  717.  if buttonStates[f] == 0 then
  718.   curState[f] = 1
  719.   buttonStates[f] = 1
  720.  else
  721.   if buttonStates[f] == 1 then
  722.    curState[f] = 0
  723.    buttonStates[f] = 2
  724.   else
  725.    buttonStates[f] = 0
  726.   end
  727.  end
  728.  saveButtonStates()
  729.  savePowerStates()
  730. end
  731.  
  732. function termClick(x,y)
  733.  if y == 11 or y == 12 then
  734.   row = y-10
  735.   if x < 13 then
  736.    col = 1
  737.   else
  738.    if x > 13 and x < 26 then
  739.     col = 2
  740.    else
  741.     if x > 26 and x < 39 then
  742.      col = 3
  743.     else
  744.      if x > 39 then
  745.       col = 4
  746.      end
  747.     end
  748.    end
  749.   end
  750.   button = (row-1)*4+col
  751.   pressedButton = button
  752.  end
  753. end
  754.  
  755. function savePowerStates() --Saves Production states
  756.  stateFile = fs.open("MonitorFiles/ProductionStates","w") --Opens file for writing
  757.  for k=1,8 do --Saves each state
  758.   cellState = curState[k]
  759.   stateFile.writeLine(cellState)
  760.  end
  761.  stateFile.close() --Closes File
  762. end
  763.  
  764. function saveButtonStates() --Saves Button states
  765.  buttonFile = fs.open("MonitorFiles/ButtonStates","w") --Opens file for writing
  766.  for l=1,8 do --Saves each state
  767.   buttonState = buttonStates[l]
  768.   buttonFile.writeLine(buttonState)
  769.  end
  770.  buttonFile.close() --Closes file
  771. end
  772.  
  773. function saveLegacyValues()
  774.  
  775.  energyFile = fs.open("MonitorFiles/LegacyEnergy1","w")
  776.  for i=1,47 do --Saves states
  777.   value = legacyEnergy1[i]
  778.   energyFile.writeLine(value)
  779.  end
  780.  energyFile.close()
  781.  
  782.  energyFile = fs.open("MonitorFiles/LegacyEnergy2","w")
  783.  for i=1,47 do --Saves states
  784.   value = legacyEnergy2[i]
  785.   energyFile.writeLine(value)
  786.  end
  787.  energyFile.close()
  788.  
  789.  energyFile = fs.open("MonitorFiles/LegacyEnergy3","w")
  790.  for i=1,47 do --Saves states
  791.   value = legacyEnergy3[i]
  792.   energyFile.writeLine(value)
  793.  end
  794.  energyFile.close()
  795.  
  796.  energyFile = fs.open("MonitorFiles/LegacyEnergy4","w")
  797.  for i=1,47 do --Saves states
  798.   value = legacyEnergy4[i]
  799.   energyFile.writeLine(value)
  800.  end
  801.  energyFile.close()
  802.  
  803.  energyFile = fs.open("MonitorFiles/LegacyEnergy5","w")
  804.  for i=1,47 do --Saves states
  805.   value = legacyEnergy5[i]
  806.   energyFile.writeLine(value)
  807.  end
  808.  energyFile.close()
  809.  
  810.  energyFile = fs.open("MonitorFiles/LegacyEnergy6","w")
  811.  for i=1,47 do --Saves states
  812.   value = legacyEnergy6[i]
  813.   energyFile.writeLine(value)
  814.  end
  815.  energyFile.close()
  816.  
  817.  energyFile = fs.open("MonitorFiles/LegacyEnergy7","w")
  818.  for i=1,47 do --Saves states
  819.   value = legacyEnergy7[i]
  820.   energyFile.writeLine(value)
  821.  end
  822.  energyFile.close()
  823.  
  824.  energyFile = fs.open("MonitorFiles/LegacyEnergy8","w")
  825.  for i=1,47 do --Saves states
  826.   value = legacyEnergy8[i]
  827.   energyFile.writeLine(value)
  828.  end
  829.  energyFile.close()
  830.  
  831. end
  832.  
  833. function timer()
  834.  os.startTimer(frequency)
  835.  repeat
  836.   event, p1, clickx, clicky = os.pullEvent()
  837.   if event == "monitor_touch" then --Detects monitor touch
  838.    buttonPress(clickx,clicky)
  839.   else
  840.    if event == "mouse_click" and p1 == 1 then --Detects term click
  841.     termClick(clickx,clicky)
  842.    end
  843.   end
  844.  until event == "timer" --Wait until refreshing (even if button is pressed)
  845.  
  846.  if cycleCounter == refreshCycle then
  847.   cycleCounter = 0 --Resets counter if max cycle is reached
  848.   saveLegacyValues() --Also saves the legacy values
  849.  else
  850.   cycleCounter = cycleCounter + 1 --Otherwise increment it by 1
  851.  end
  852. end
  853.  
  854. local function animate1()
  855.  if curState[1] == 1 then
  856.   if buttonStates[1] == 0 then
  857.    monitor.setBackgroundColor(autoModeColor)
  858.   else
  859.    monitor.setBackgroundColor(manualModeColor)
  860.   end
  861.   monitor.setTextColor(colors.black)
  862.   monitor.setCursorPos(36,1*2+1)
  863.   monitor.write("      ")
  864.   monitor.setCursorPos(36,1*2+1)
  865.   monitor.write("[")
  866.   sleep(0.2)
  867.   monitor.setTextColor(stateOnColor)
  868.   monitor.write("O")
  869.   sleep(0.2)
  870.   monitor.write("n ")
  871.   sleep(0.2)
  872.   monitor.setTextColor(colors.black)
  873.   monitor.write("]")
  874.   sleep(0.2)
  875.   monitor.write("=")
  876.   sleep(0.2)
  877.   monitor.setTextColor(colors.white)
  878.   monitor.setBackgroundColor(colors.black)
  879.  end
  880. end
  881.  
  882. local function animate2()
  883.  if curState[2] == 1 then
  884.   if buttonStates[2] == 0 then
  885.    monitor.setBackgroundColor(autoModeColor)
  886.   else
  887.    monitor.setBackgroundColor(manualModeColor)
  888.   end
  889.   monitor.setTextColor(colors.black)
  890.   monitor.setCursorPos(36,2*2+1)
  891.   monitor.write("      ")
  892.   monitor.setCursorPos(36,2*2+1)
  893.   monitor.write("[")
  894.   sleep(0.2)
  895.   monitor.setTextColor(stateOnColor)
  896.   monitor.write("O")
  897.   sleep(0.2)
  898.   monitor.write("n ")
  899.   sleep(0.2)
  900.   monitor.setTextColor(colors.black)
  901.   monitor.write("]")
  902.   sleep(0.2)
  903.   monitor.write("=")
  904.   sleep(0.2)
  905.   monitor.setTextColor(colors.white)
  906.   monitor.setBackgroundColor(colors.black)
  907.  end
  908. end
  909.  
  910. local function animate3()
  911.  if curState[3] == 1 then
  912.   if buttonStates[3] == 0 then
  913.    monitor.setBackgroundColor(autoModeColor)
  914.   else
  915.    monitor.setBackgroundColor(manualModeColor)
  916.   end
  917.   monitor.setTextColor(colors.black)
  918.   monitor.setCursorPos(36,3*2+1)
  919.   monitor.write("      ")
  920.   monitor.setCursorPos(36,3*2+1)
  921.   monitor.write("[")
  922.   sleep(0.2)
  923.   monitor.setTextColor(stateOnColor)
  924.   monitor.write("O")
  925.   sleep(0.2)
  926.   monitor.write("n ")
  927.   sleep(0.2)
  928.   monitor.setTextColor(colors.black)
  929.   monitor.write("]")
  930.   sleep(0.2)
  931.   monitor.write("=")
  932.   sleep(0.2)
  933.   monitor.setTextColor(colors.white)
  934.   monitor.setBackgroundColor(colors.black)
  935.  end
  936. end
  937.  
  938. local function animate4()
  939.  if curState[4] == 1 then
  940.   if buttonStates[4] == 0 then
  941.    monitor.setBackgroundColor(autoModeColor)
  942.   else
  943.    monitor.setBackgroundColor(manualModeColor)
  944.   end
  945.   monitor.setTextColor(colors.black)
  946.   monitor.setCursorPos(36,4*2+1)
  947.   monitor.write("      ")
  948.   monitor.setCursorPos(36,4*2+1)
  949.   monitor.write("[")
  950.   sleep(0.2)
  951.   monitor.setTextColor(stateOnColor)
  952.   monitor.write("O")
  953.   sleep(0.2)
  954.   monitor.write("n ")
  955.   sleep(0.2)
  956.   monitor.setTextColor(colors.black)
  957.   monitor.write("]")
  958.   sleep(0.2)
  959.   monitor.write("=")
  960.   sleep(0.2)
  961.   monitor.setTextColor(colors.white)
  962.   monitor.setBackgroundColor(colors.black)
  963.  end
  964. end
  965.  
  966. local function animate5()
  967.  if curState[5] == 1 then
  968.   if buttonStates[5] == 0 then
  969.    monitor.setBackgroundColor(autoModeColor)
  970.   else
  971.    monitor.setBackgroundColor(manualModeColor)
  972.   end
  973.   monitor.setTextColor(colors.black)
  974.   monitor.setCursorPos(36,5*2+1)
  975.   monitor.write("      ")
  976.   monitor.setCursorPos(36,5*2+1)
  977.   monitor.write("[")
  978.   sleep(0.2)
  979.   monitor.setTextColor(stateOnColor)
  980.   monitor.write("O")
  981.   sleep(0.2)
  982.   monitor.write("n ")
  983.   sleep(0.2)
  984.   monitor.setTextColor(colors.black)
  985.   monitor.write("]")
  986.   sleep(0.2)
  987.   monitor.write("=")
  988.   sleep(0.2)
  989.   monitor.setTextColor(colors.white)
  990.   monitor.setBackgroundColor(colors.black)
  991.  end
  992. end
  993.  
  994. local function animate6()
  995.  if curState[6] == 1 then
  996.   if buttonStates[6] == 0 then
  997.    monitor.setBackgroundColor(autoModeColor)
  998.   else
  999.    monitor.setBackgroundColor(manualModeColor)
  1000.   end
  1001.   monitor.setTextColor(colors.black)
  1002.   monitor.setCursorPos(36,6*2+1)
  1003.   monitor.write("      ")
  1004.   monitor.setCursorPos(36,6*2+1)
  1005.   monitor.write("[")
  1006.   sleep(0.2)
  1007.   monitor.setTextColor(stateOnColor)
  1008.   monitor.write("O")
  1009.   sleep(0.2)
  1010.   monitor.write("n ")
  1011.   sleep(0.2)
  1012.   monitor.setTextColor(colors.black)
  1013.   monitor.write("]")
  1014.   sleep(0.2)
  1015.   monitor.write("=")
  1016.   sleep(0.2)
  1017.   monitor.setTextColor(colors.white)
  1018.   monitor.setBackgroundColor(colors.black)
  1019.  end
  1020. end
  1021.  
  1022. local function animate7()
  1023.  if curState[7] == 1 then
  1024.   if buttonStates[7] == 0 then
  1025.    monitor.setBackgroundColor(autoModeColor)
  1026.   else
  1027.    monitor.setBackgroundColor(manualModeColor)
  1028.   end
  1029.   monitor.setTextColor(colors.black)
  1030.   monitor.setCursorPos(36,7*2+1)
  1031.   monitor.write("      ")
  1032.   monitor.setCursorPos(36,7*2+1)
  1033.   monitor.write("[")
  1034.   sleep(0.2)
  1035.   monitor.setTextColor(stateOnColor)
  1036.   monitor.write("O")
  1037.   sleep(0.2)
  1038.   monitor.write("n ")
  1039.   sleep(0.2)
  1040.   monitor.setTextColor(colors.black)
  1041.   monitor.write("]")
  1042.   sleep(0.2)
  1043.   monitor.write("=")
  1044.   sleep(0.2)
  1045.   monitor.setTextColor(colors.white)
  1046.   monitor.setBackgroundColor(colors.black)
  1047.  end
  1048. end
  1049.  
  1050. local function animate8()
  1051.  if curState[8] == 1 then
  1052.   if buttonStates[8] == 0 then
  1053.    monitor.setBackgroundColor(autoModeColor)
  1054.   else
  1055.    monitor.setBackgroundColor(manualModeColor)
  1056.   end
  1057.   monitor.setTextColor(colors.black)
  1058.   monitor.setCursorPos(36,8*2+1)
  1059.   monitor.write("      ")
  1060.   monitor.setCursorPos(36,8*2+1)
  1061.   monitor.write("[")
  1062.   sleep(0.2)
  1063.   monitor.setTextColor(stateOnColor)
  1064.   monitor.write("O")
  1065.   sleep(0.2)
  1066.   monitor.write("n ")
  1067.   sleep(0.2)
  1068.   monitor.setTextColor(colors.black)
  1069.   monitor.write("]")
  1070.   sleep(0.2)
  1071.   monitor.write("=")
  1072.   sleep(0.2)
  1073.   monitor.setTextColor(colors.white)
  1074.   monitor.setBackgroundColor(colors.black)
  1075.  end
  1076. end
  1077.  
  1078. local function animateAll()
  1079.  parallel.waitForAll(animate1,animate2,animate3,animate4,animate5,animate6,animate7,animate8)
  1080. end
  1081.  
  1082. checkInstallation()
  1083. getStates()
  1084.  
  1085.  
  1086. while true do
  1087.  
  1088.  getProviders()
  1089.  
  1090.  calculateEnergy()
  1091.  
  1092.  drawTerminalScreen()
  1093.  
  1094.  drawMonitor()
  1095.  
  1096.  setOutput()
  1097.  
  1098.  parallel.waitForAll(animateAll,timer)
  1099.  
  1100. end
Advertisement
Add Comment
Please, Sign In to add comment