Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local event = require("event")
- local computer = require("computer")
- local keyboard = require("keyboard")
- --
- -- Settings
- --
- local bgColor = {
- background = 0x001f33,
- energyBarBG = 0x000000,
- energyBar = 0x006600
- }
- local color = {
- percentage = 0xffffff,
- energy = 0xffffff,
- output = 0x808080,
- avgChangePositive = 0x00cc00,
- avgChangeNegative = 0xcc0000,
- avgChangeNone = 0x808080
- }
- local storage = component.elite_energy_cube -- Get the energy storage
- local storageUnit = "MJ" -- Storage energy unit for conversion (RF, EU, MJ, J)
- local gpu = component.gpu -- Get primary screen
- -- Energy unit (RF, EU, MJ, J)
- local energyUnit = "RF" -- Default: RF
- -- Refreshtime (Time between refreshes)
- local refreshTime = 0.5 -- Default: 0.5
- --
- -- DONT TOUCH BELLOW
- --
- function round(x, dez) -- round floats
- local m = 10 ^ (dez or 0)
- return ((x * m + 0.5) - (x * m + 0.5) % 1) / m
- end
- function adjustUnit(value, unit) -- prevent big numbers
- if value >= 1000000000000 then
- return tostring(round(value / 1000000000000, 2)) .. " T" .. unit
- elseif value >= 1000000000 then
- return tostring(round(value / 1000000000, 2)) .. " G" .. unit
- elseif value >= 1000000 then
- return tostring(round(value / 1000000, 2)) .. " M" .. unit
- elseif value >= 1000 then
- return tostring(round(value / 1000, 2)) .. " k" .. unit
- else
- return tostring(round(value)) .. " " .. unit
- end
- end
- -- Init screen
- local width, height = gpu.getResolution()
- width = width + 1
- height = height + 1
- -- gpu.setResolution(width, height - 50)
- local centerX = width / 2
- local centerY = height / 2
- local energyBarWidth = width - 20
- function drawBackground(energyPercent)
- -- Fill background
- gpu.setBackground(bgColor.background)
- gpu.fill(0, 0, width, height, " ")
- -- Draw energy bar
- gpu.setBackground(bgColor.energyBarBG)
- gpu.fill(10, centerY - 1, energyBarWidth, 3, " ")
- gpu.setBackground(bgColor.energyBar)
- gpu.fill(10, centerY - 1, round(energyBarWidth * energyPercent), 3, " ")
- -- Reset background
- gpu.setBackground(bgColor.background)
- end
- -- use the right multiplier
- if storageUnit == "MJ" then
- if energyUnit == "RF" then
- energyMultiplier = 0.4
- elseif energyUnit == "EU" then
- energyMultiplier = 0.1
- elseif energyUnit == "MJ" then
- energyMultiplier = 0.04
- else
- energyMultiplier = 1
- end
- else
- energyMultiplier = 1
- end
- -- Main loop
- computer.beep(".")
- local lastEnergy = storage.getEnergyStored()
- repeat
- local currEnergy = storage.getEnergyStored() -- Get current energy
- local maxEnergy = storage.getMaxEnergyStored()
- local percent = currEnergy / maxEnergy
- drawBackground(percent)
- -- Draw percentage
- gpu.setBackground(bgColor.energyBar)
- gpu.setForeground(color.percentage)
- gpu.set(centerX - 2, centerY, round(percent * 100, 1) .. " %")
- -- Draw out energy
- gpu.setBackground(bgColor.background)
- gpu.setForeground(color.output)
- local hasOutput = false
- if pcall(storage.getOutput) then
- hasOutput = true
- gpu.set(
- energyBarWidth - 20,
- centerY + 2,
- "Out: " .. adjustUnit(storage.getOutput() * energyMultiplier, energyUnit) .. " / ticks"
- )
- else
- hasOutput = false
- gpu.fill(10, centerY + 2, energyBarWidth, 1, " ")
- end
- -- Draw energy
- gpu.setBackground(bgColor.background)
- gpu.setForeground(color.energy)
- if hasOutput then
- gpu.set(10, centerY + 2, adjustUnit(currEnergy, energyUnit) .. " / " .. adjustUnit(maxEnergy, energyUnit))
- else
- gpu.set(centerX - 6, centerY + 2, adjustUnit(currEnergy, energyUnit) .. " / " .. adjustUnit(maxEnergy, energyUnit))
- end
- -- Calculate Average energy
- local averChange = currEnergy - lastEnergy
- local averChangeSTR = ""
- if averChange > 0 then
- gpu.setForeground(color.avgChangePositive)
- averChangeSTR = "+ " .. adjustUnit(averChange, energyUnit)
- elseif averChange < 0 then
- gpu.setForeground(color.avgChangeNegative)
- averChangeSTR = "- " .. adjustUnit(math.abs(averChange), energyUnit)
- else
- gpu.setForeground(color.avgChangeNone)
- averChangeSTR = "+/- 0 " .. energyUnit
- end
- -- Draw average energy
- gpu.setBackground(bgColor.background)
- if hasOutput then
- gpu.set(centerX - 6, centerY + 2, averChangeSTR .. " / ticks")
- else
- gpu.set(centerX - 6, centerY + 4, averChangeSTR .. " / ticks")
- end
- lastEnergy = currEnergy -- Update last energy
- os.sleep(refreshTime)
- until keyboard.isControlDown() and keyboard.isKeyDown(keyboard.keys.c)
- computer.beep("-")
- -- Reset
- gpu.setForeground(0xFFFFFF)
- gpu.setBackground(0x000000)
- gpu.fill(0, 0, width, height, " ")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement