Advertisement
bobmarley12345

powercellmonitorv2

Feb 6th, 2021 (edited)
781
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.19 KB | None | 0 0
  1. MonitorSide = "top"
  2. GlassesSide = "left"
  3. BackupGeneratorSide = "bottom"
  4. Monitor1 = peripheral.wrap("monitor_3")
  5. Monitor2 = peripheral.wrap("monitor_4")
  6. Glasses = peripheral.wrap(GlassesSide)
  7. GlassesLengthMultiplier = 5
  8. GlassesXMultiplier = 5
  9. GlassesYMultiplier = 7
  10. EmergencyActivationPercentage = 100
  11. cell1 = peripheral.wrap("cofh_thermalexpansion_energycell_0")
  12. cell2 = peripheral.wrap("cofh_thermalexpansion_energycell_1")
  13. cell3 = peripheral.wrap("cofh_thermalexpansion_energycell_2")
  14. cell4 = peripheral.wrap("cofh_thermalexpansion_energycell_3")
  15. cell5 = peripheral.wrap("cofh_thermalexpansion_energycell_4")
  16. cell6 = peripheral.wrap("cofh_thermalexpansion_energycell_5")
  17.  
  18. function GetHexFromColour(clr)
  19.     local colourOut = 0xCC4C4C --red
  20.     if (clr == colours.white)  then colourOut = 0xFFFFFF end
  21.     if (clr == colours.orange) then colourOut = 0xF2B233 end
  22.     if (clr == colours.yellow) then colourOut = 0xDEDE6C end
  23.     if (clr == colours.green)  then colourOut = 0x57A64E end
  24.     if (clr == colours.cyan)   then colourOut = 0x4C99B2 end
  25.     return colourOut;
  26. end
  27.  
  28. function GetColourFromPercent(percentage)
  29.     local colourOut = colours.red
  30.     if (percentage > 15) then colourOut = colours.orange end
  31.     if (percentage > 45) then colourOut = colours.yellow end
  32.     if (percentage > 70) then colourOut = colours.green end
  33.     if (percentage > 90) then colourOut = colours.cyan end
  34.     return colourOut
  35. end
  36.  
  37. function ClearScreens()
  38.     Monitor1.setTextColor(colours.black)
  39.     Monitor1.setBackgroundColor(colours.black)
  40.     Monitor1.clear()
  41.     Monitor1.setCursorPos(1,1)
  42.     Monitor2.setTextColor(colours.black)
  43.     Monitor2.setBackgroundColor(colours.black)
  44.     Monitor2.clear()
  45.     Monitor2.setCursorPos(1,1)
  46.     Glasses.clear()
  47. end
  48.  
  49. function DrawText(xPos, yPos, text, textColour, backgroundColour)
  50.     Monitor1.setBackgroundColor(backgroundColour)
  51.     Monitor1.setTextColor(textColour)
  52.     Monitor1.setCursorPos(xPos,yPos)
  53.     Monitor1.write(text)
  54.     Monitor2.setBackgroundColor(backgroundColour)
  55.     Monitor2.setTextColor(textColour)
  56.     Monitor2.setCursorPos(xPos,yPos)
  57.     Monitor2.write(text)
  58.     Glasses.addText(xPos * GlassesXMultiplier, yPos * GlassesYMultiplier, text, GetHexFromColour(textColour))
  59. end
  60.  
  61. function DrawLine(xPos, yPos, lineLength, colour)
  62.     Monitor1.setBackgroundColor(colour)
  63.     Monitor1.setTextColor(colour)
  64.     Monitor1.setCursorPos(xPos,yPos)
  65.     Monitor1.write(string.rep(" ", lineLength))
  66.     Monitor2.setBackgroundColor(colour)
  67.     Monitor2.setTextColor(colour)
  68.     Monitor2.setCursorPos(xPos,yPos)
  69.     Monitor2.write(string.rep(" ", lineLength))
  70.     Glasses.addBox(xPos * GlassesXMultiplier, yPos * GlassesYMultiplier, lineLength * GlassesLengthMultiplier, 5, GetHexFromColour(colour), 1)
  71. end
  72.  
  73. function ProgressBar(xPos, yPos, barLength, value, maxValue, backgroundColour, progressColour)
  74.     DrawLine(xPos, yPos, barLength, backgroundColour) --backgoround bar
  75.     local barSize = math.floor((value/maxValue) * barLength)
  76.     DrawLine(xPos, yPos, barSize, progressColour) --progress so far
  77. end
  78.  
  79. function DrawPowerBar(monitorX, yPos, cellName, cellEnergy, cellMaxEnergy, cellPercent, barColour)
  80.     DrawText(3, yPos, cellName, colours.white, colours.black)
  81.     ProgressBar(10, yPos, monitorX - 15, cellEnergy, cellMaxEnergy, barColour, GetColourFromPercent(cellPercent))
  82.     DrawText(monitorX - 4, yPos, cellPercent .. "%", colours.white, colours.black)
  83. end
  84.  
  85. function GetCellBarColour(cellEnergyPercent)
  86.     if (cellEnergyPercent == 0) then
  87.         return colours.red
  88.     else
  89.         return colours.grey
  90.     end
  91. end
  92.  
  93. function FetchAndRedraw()
  94.     Monitor1.setTextScale(1)
  95.     Monitor2.setTextScale(1)
  96.     local monX, monY = Monitor1.getSize()
  97.  
  98.     local cell1Energy = cell1.getEnergyStored("unknown")
  99.     local cell2Energy = cell2.getEnergyStored("unknown")
  100.     local cell3Energy = cell3.getEnergyStored("unknown")
  101.     local cell4Energy = cell4.getEnergyStored("unknown")
  102.     local cell5Energy = cell5.getEnergyStored("unknown")
  103.     local cell6Energy = cell6.getEnergyStored("unknown")
  104.  
  105.     local cell1MaxEnergy = cell1.getMaxEnergyStored("unknown")
  106.     local cell2MaxEnergy = cell2.getMaxEnergyStored("unknown")
  107.     local cell3MaxEnergy = cell3.getMaxEnergyStored("unknown")
  108.     local cell4MaxEnergy = cell4.getMaxEnergyStored("unknown")
  109.     local cell5MaxEnergy = cell5.getMaxEnergyStored("unknown")
  110.     local cell6MaxEnergy = cell6.getMaxEnergyStored("unknown")
  111.  
  112.     local cell1Percent = math.floor((cell1Energy / cell1MaxEnergy) * 100)
  113.     local cell2Percent = math.floor((cell2Energy / cell2MaxEnergy) * 100)
  114.     local cell3Percent = math.floor((cell3Energy / cell3MaxEnergy) * 100)
  115.     local cell4Percent = math.floor((cell4Energy / cell4MaxEnergy) * 100)
  116.     local cell5Percent = math.floor((cell5Energy / cell5MaxEnergy) * 100)
  117.     local cell6Percent = math.floor((cell6Energy / cell6MaxEnergy) * 100)
  118.  
  119.     local totalEnergyPercentage = cell1Percent + cell2Percent + cell3Percent + cell4Percent + cell5Percent + cell6Percent
  120.     local shouldEmergencyPowerBeOn = totalEnergyPercentage < EmergencyActivationPercentage
  121.  
  122.     ClearScreens()
  123.  
  124.     DrawPowerBar(monX, 2,  "Cell 1", cell1Energy, cell1MaxEnergy, cell1Percent, GetCellBarColour(cell1Percent))
  125.     DrawPowerBar(monX, 4,  "Cell 2", cell2Energy, cell2MaxEnergy, cell2Percent, GetCellBarColour(cell2Percent))
  126.     DrawPowerBar(monX, 6,  "Cell 3", cell3Energy, cell3MaxEnergy, cell3Percent, GetCellBarColour(cell3Percent))
  127.     DrawPowerBar(monX, 8,  "Cell 4", cell4Energy, cell4MaxEnergy, cell4Percent, GetCellBarColour(cell4Percent))
  128.     DrawPowerBar(monX, 10, "Cell 5", cell5Energy, cell5MaxEnergy, cell5Percent, GetCellBarColour(cell5Percent))
  129.     DrawPowerBar(monX, 12, "Cell 6", cell6Energy, cell6MaxEnergy, cell6Percent, GetCellBarColour(cell6Percent))
  130.  
  131.     DrawText(3, 16, "Emergency Power", colours.white, colours.black)
  132.  
  133.     if (shouldEmergencyPowerBeOn) then
  134.         redstone.setOutput(BackupGeneratorSide, true)
  135.         DrawText(3, 18, "ONLINE", colours.white, colours.green)
  136.  
  137.     else
  138.         redstone.setOutput(BackupGeneratorSide, false)
  139.         DrawText(3, 18, "OFFLINE", colours.white, colours.red)
  140.     end
  141. end
  142.  
  143. while true do
  144.     FetchAndRedraw()
  145.     os.sleep(2)
  146. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement