Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Computercraft Program
- -- by glitchdetector
- function ReadableNumber(num, places, full)
- num = tonumber(num)
- if not num then return 0 end
- local ret
- local placeValue = ("%%.%df"):format(places or 0)
- local isNegative = num < 0
- num = math.abs(num)
- if num >= 1000000000000 then
- ret = placeValue:format(num / 1000000000000) .. (full and " trillion" or "T") -- trillion
- elseif num >= 1000000000 then
- ret = placeValue:format(num / 1000000000) .. (full and " billion" or "B") -- billion
- elseif num >= 1000000 then
- ret = placeValue:format(num / 1000000) .. (full and " million" or "M") -- million
- elseif num >= 1000 and not full then
- ret = placeValue:format(num / 1000) .. "k" -- thousand
- elseif num >= 1 then
- ret = num -- hundreds
- else
- ret = num
- end
- return (isNegative and "- " or "") .. ret
- end
- function GetEMC(link)
- local items = link.list()
- if not items then return 0 end
- if not items[1] then return 0 end
- return items[1].count or 0
- end
- function ClearScreen(monitor)
- monitor.clear()
- monitor.setCursorPos(1, 1)
- end
- function NextLine(monitor)
- local x, y = monitor.getCursorPos()
- monitor.setCursorPos(1, y + 1)
- end
- function WriteCenterAligned(monitor, text)
- local w, h = monitor.getSize()
- local x, y = monitor.getCursorPos()
- monitor.setCursorPos(math.floor(w / 2 - #text / 2), y)
- monitor.write(text)
- end
- function WriteLeftAligned(monitor, text)
- local x, y = monitor.getCursorPos()
- monitor.setCursorPos(1, y)
- monitor.write(text)
- end
- function WriteRightAligned(monitor, text)
- local w, h = monitor.getSize()
- local x, y = monitor.getCursorPos()
- monitor.setCursorPos(w - #text + 1, y)
- monitor.write(text)
- end
- -- Program Code
- local Users = {
- {"top", "Glitch"},
- {"right", "Collins"},
- }
- for _, user in next, Users do
- user[3] = peripheral.wrap(user[1])
- end
- local monitor = peripheral.wrap("monitor_0")
- local last = 0
- local timespan = 5
- local timespanFactor = 60 / timespan
- local history = {}
- function CalculateHistory(new)
- table.insert(history, new)
- while #history > timespanFactor do
- table.remove(history, 1)
- end
- local sum = 0
- for _, v in next, history do
- sum = sum + v
- end
- return sum / #history
- end
- while true do
- ClearScreen(monitor)
- WriteCenterAligned(monitor, "Energy Matter Covalence")
- NextLine(monitor)
- local sum = 0
- for n, user in next, Users do
- WriteLeftAligned(monitor, user[2])
- local EMC = GetEMC(user[3])
- sum = sum + EMC
- WriteRightAligned(monitor, ReadableNumber(EMC, 2, false) .. " EMC")
- NextLine(monitor)
- end
- WriteCenterAligned(monitor, ReadableNumber(sum, 2, true) .. " EMC")
- NextLine(monitor)
- local difference = (sum - last)
- local isNeg = difference < 0
- if isNeg then
- monitor.setTextColour(colors.red)
- else
- monitor.setTextColour(colors.green)
- end
- last = sum
- WriteCenterAligned(monitor, (isNeg and "" or "+ ") .. ReadableNumber(CalculateHistory(difference), 2, true) .. " / minute")
- monitor.setTextColour(colors.white)
- sleep(timespan)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement