Advertisement
orblazer

oc-EnergyManager

Apr 3rd, 2019
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.65 KB | None | 0 0
  1. local component = require("component")
  2. local event = require("event")
  3. local computer = require("computer")
  4. local keyboard = require("keyboard")
  5.  
  6. --
  7. -- Settings
  8. --
  9. local bgColor = {
  10.   background = 0x001f33,
  11.   energyBarBG = 0x000000,
  12.   energyBar = 0x006600
  13. }
  14. local color = {
  15.   percentage = 0xffffff,
  16.   energy = 0xffffff,
  17.   output = 0x808080,
  18.   avgChangePositive = 0x00cc00,
  19.   avgChangeNegative = 0xcc0000,
  20.   avgChangeNone = 0x808080
  21. }
  22.  
  23. local storage = component.elite_energy_cube -- Get the energy storage
  24. local storageUnit = "MJ" -- Storage energy unit for conversion (RF, EU, MJ, J)
  25. local gpu = component.gpu -- Get primary screen
  26.  
  27. -- Energy unit (RF, EU, MJ, J)
  28. local energyUnit = "RF" -- Default: RF
  29. -- Refreshtime (Time between refreshes)
  30. local refreshTime = 0.5 -- Default: 0.5
  31.  
  32. --
  33. -- DONT TOUCH BELLOW
  34. --
  35. function round(x, dez) -- round floats
  36.   local m = 10 ^ (dez or 0)
  37.   return ((x * m + 0.5) - (x * m + 0.5) % 1) / m
  38. end
  39.  
  40. function adjustUnit(value, unit) -- prevent big numbers
  41.   if value >= 1000000000000 then
  42.     return tostring(round(value / 1000000000000, 2)) .. " T" .. unit
  43.   elseif value >= 1000000000 then
  44.     return tostring(round(value / 1000000000, 2)) .. " G" .. unit
  45.   elseif value >= 1000000 then
  46.     return tostring(round(value / 1000000, 2)) .. " M" .. unit
  47.   elseif value >= 1000 then
  48.     return tostring(round(value / 1000, 2)) .. " k" .. unit
  49.   else
  50.     return tostring(round(value)) .. " " .. unit
  51.   end
  52. end
  53.  
  54. -- Init screen
  55. local width, height = gpu.getResolution()
  56. width = width + 1
  57. height = height + 1
  58. -- gpu.setResolution(width, height - 50)
  59.  
  60. local centerX = width / 2
  61. local centerY = height / 2
  62. local energyBarWidth = width - 20
  63. function drawBackground(energyPercent)
  64.   -- Fill background
  65.   gpu.setBackground(bgColor.background)
  66.   gpu.fill(0, 0, width, height, " ")
  67.  
  68.   -- Draw energy bar
  69.   gpu.setBackground(bgColor.energyBarBG)
  70.   gpu.fill(10, centerY - 1, energyBarWidth, 3, " ")
  71.   gpu.setBackground(bgColor.energyBar)
  72.   gpu.fill(10, centerY - 1, round(energyBarWidth * energyPercent), 3, " ")
  73.  
  74.   -- Reset background
  75.   gpu.setBackground(bgColor.background)
  76. end
  77.  
  78. --  use the right multiplier
  79. if storageUnit == "MJ" then
  80.   if energyUnit == "RF" then
  81.     energyMultiplier = 0.4
  82.   elseif energyUnit == "EU" then
  83.     energyMultiplier = 0.1
  84.   elseif energyUnit == "MJ" then
  85.     energyMultiplier = 0.04
  86.   else
  87.     energyMultiplier = 1
  88.   end
  89. else
  90.   energyMultiplier = 1
  91. end
  92.  
  93. -- Main loop
  94. computer.beep(".")
  95. local lastEnergy = storage.getEnergyStored()
  96. repeat
  97.   local currEnergy = storage.getEnergyStored() -- Get current energy
  98.   local maxEnergy = storage.getMaxEnergyStored()
  99.   local percent = currEnergy / maxEnergy
  100.  
  101.   drawBackground(percent)
  102.  
  103.    -- Draw percentage
  104.   gpu.setBackground(bgColor.energyBar)
  105.   gpu.setForeground(color.percentage)
  106.   gpu.set(centerX - 2, centerY, round(percent * 100, 1) .. " %")
  107.  
  108.   -- Draw out energy
  109.   gpu.setBackground(bgColor.background)
  110.   gpu.setForeground(color.output)
  111.   local hasOutput = false
  112.   if pcall(storage.getOutput) then
  113.     hasOutput = true
  114.     gpu.set(
  115.       energyBarWidth - 20,
  116.       centerY + 2,
  117.       "Out: " .. adjustUnit(storage.getOutput() * energyMultiplier, energyUnit) .. " / ticks"
  118.     )
  119.   else
  120.     hasOutput = false
  121.     gpu.fill(10, centerY + 2, energyBarWidth, 1, " ")
  122.   end
  123.  
  124.    -- Draw energy
  125.   gpu.setBackground(bgColor.background)
  126.   gpu.setForeground(color.energy)
  127.   if hasOutput then
  128.     gpu.set(10, centerY + 2, adjustUnit(currEnergy, energyUnit) .. " / " .. adjustUnit(maxEnergy, energyUnit))
  129.   else
  130.     gpu.set(centerX - 6, centerY + 2, adjustUnit(currEnergy, energyUnit) .. " / " .. adjustUnit(maxEnergy, energyUnit))
  131.   end
  132.  
  133.   -- Calculate Average energy
  134.   local averChange = currEnergy - lastEnergy
  135.   local averChangeSTR = ""
  136.   if averChange > 0 then
  137.     gpu.setForeground(color.avgChangePositive)
  138.     averChangeSTR = "+ " .. adjustUnit(averChange, energyUnit)
  139.   elseif averChange < 0 then
  140.     gpu.setForeground(color.avgChangeNegative)
  141.     averChangeSTR = "- " .. adjustUnit(math.abs(averChange), energyUnit)
  142.   else
  143.     gpu.setForeground(color.avgChangeNone)
  144.     averChangeSTR = "+/- 0 " .. energyUnit
  145.   end
  146.   -- Draw average energy
  147.   gpu.setBackground(bgColor.background)
  148.   if hasOutput then
  149.     gpu.set(centerX - 6, centerY + 2, averChangeSTR .. " / ticks")
  150.   else
  151.     gpu.set(centerX - 6, centerY + 4, averChangeSTR .. " / ticks")
  152.   end
  153.  
  154.   lastEnergy = currEnergy -- Update last energy
  155.   os.sleep(refreshTime)
  156. until keyboard.isControlDown() and keyboard.isKeyDown(keyboard.keys.c)
  157. computer.beep("-")
  158.  
  159. -- Reset
  160. gpu.setForeground(0xFFFFFF)
  161. gpu.setBackground(0x000000)
  162. gpu.fill(0, 0, width, height, " ")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement