Advertisement
sonic7089

OpenComputer / OpenGlasses Power Monitor

Aug 17th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.05 KB | None | 0 0
  1.  
  2. --EDIT THIS TO CHANGE POSITION OF THE THINGS
  3. startposx = 0
  4. startposy = 0
  5.  
  6. function findObject (list, key)
  7.  temp = false
  8.  for _,v in pairs(list) do
  9.   if v == key then
  10.    temp = true
  11.   end
  12.  end
  13.  return temp
  14. end
  15. --Outputs valid terminal bridge address, otherwise "none"
  16. function findBridge ()
  17.  compls = component.list("glasses")
  18.  output = "unk"
  19.  if next(compls) == nil then
  20.   output = "none"
  21.  else
  22.   for k,v in compls do
  23.    output = k
  24.   end
  25.  end
  26.  return output
  27. end
  28. --Outputs valid energy storage address, otherwise "none"
  29. function findStorage ()
  30.  output = "none"
  31.  for k,v in component.list() do
  32.   for l in pairs(component.methods(k)) do
  33.    if l == "getEnergyStored" then
  34.     output = k
  35.    end
  36.   end
  37.  end
  38.  return output
  39. end
  40. --Gets the scale of stuff for nice displaying
  41. function getScale (input)
  42.  input = math.abs(input)
  43.  if input < 100000 then
  44.   outscale = 1
  45.   outlet = ""
  46.  elseif input >= 100000000000 then
  47.   outscale = 1000000000
  48.   outlet = "B"
  49.  elseif input >= 100000000 then
  50.   outscale = 1000000
  51.   outlet = "M"
  52.  elseif input >= 100000 then
  53.   outscale = 1000
  54.   outlet = "K"
  55.  end
  56.  return outlet, outscale
  57. end
  58.  
  59. --Adds component stuff
  60. component = require("component")
  61.  
  62. mainloop = true
  63. --Checking if stuff is connected
  64. powerp = findStorage()
  65. if powerp == "none" then
  66.  mainloop = false
  67.  print("Could not find valid power storage")
  68. end
  69. bridgep = findBridge()
  70. if bridgep == "none" then
  71.  mainloop = false
  72.  print("Could not find glasses bridge")
  73. end
  74. --Trying to get block name
  75. if mainloop then
  76.  power = component.proxy(powerp)
  77.  bridge = component.proxy(bridgep)
  78.  success, name = pcall(power.getInventoryName)
  79.  if not success then
  80.   name = "Power"
  81.  end
  82. end
  83.  
  84. --Setting up some values
  85. lastpow = power.getEnergyStored()
  86. maxpow = power.getMaxEnergyStored()
  87. maxlet, maxscale = getScale(maxpow)
  88. lasttime = os.time()
  89. maxdis = math.ceil(maxpow/(maxscale/100))/100
  90.  
  91. function makeText(x, y, r, g, b, text, s)
  92.  newtxt = bridge.addTextLabel()
  93.  newtxt.setPosition(x, y)
  94.  newtxt.setColor(r, g, b)
  95.  newtxt.setText(text)
  96.  newtxt.setScale(s)
  97.  return newtxt
  98. end
  99.  
  100. function makeRect(x, y, r, g, b, w, h)
  101.  newrct = bridge.addRect()
  102.  newrct.setPosition(x, y)
  103.  newrct.setColor(r, g, b)
  104.  newrct.setSize(w, h)
  105.  return newrct
  106. end
  107.  
  108. --Setting up all objects
  109. bridge.removeAll()
  110.  
  111. schangetxt = makeText(3 + startposx, 42 + startposy, 0, 0.25, 0, "", 1)
  112. changetxt = makeText(2 + startposx, 41 + startposy, 0, 1, 0, "", 1)
  113.  
  114. spowertxt = makeText(3 + startposx, 13 + startposy, 0.25, 0.25, 0, "", 1)
  115. powertxt = makeText(2 + startposx, 12 + startposy, 1, 1, 0, "", 1)
  116.  
  117. snametxt = makeText(3 + startposx, 3 + startposy, 0.25, 0.25, 0.25, name, 1)
  118. nametxt = makeText(2 + startposx, 2 + startposy, 1, 1, 1, name, 1)
  119.  
  120. powerbarunder = makeRect(2 + startposx, 22 + startposy, 0, 0, 0, 102, 17)
  121. powerbarbar = makeRect(3 + startposx, 23 + startposy, 1, 0, 0, 100, 15)
  122. powerbarover = makeRect(3 + startposx, 23 + startposy, 0, 0, 0, 0, 15)
  123.  
  124. --The main loop
  125. while mainloop do
  126.  --Calculations for values that we need to draw nicely
  127.  newpow = power.getEnergyStored()
  128.  newlet, newscale = getScale(newpow)
  129.  newtime = os.time()
  130.  timediff = newtime - lasttime
  131.  powerdiff = math.ceil(((newpow - lastpow) / (timediff * (1000 / 60 / 60))))
  132.  difflet, diffscale = getScale(powerdiff)
  133.  lastpow = newpow
  134.  lasttime = newtime
  135.  newdis = math.ceil(newpow/(newscale/100))/100
  136.  disdiff = math.ceil(powerdiff/(diffscale/100))/100
  137.  
  138.  --Drawing power change
  139.  if disdiff >= 0 then
  140.   schangetxt.setColor(0, 0.25, 0)
  141.   schangetxt.setText("+"..math.abs(disdiff)..difflet.."/t")
  142.  
  143.   changetxt.setColor(0, 1, 0)
  144.   changetxt.setText("+"..math.abs(disdiff)..difflet.."/t")
  145.  else
  146.   schangetxt.setColor(0.25, 0, 0)
  147.   schangetxt.setText(disdiff..difflet.."/t")
  148.  
  149.   changetxt.setColor(1, 0, 0)
  150.   changetxt.setText(disdiff..difflet.."/t")
  151.  end
  152.  
  153.  --Power in number form
  154.  spowertxt.setText(newdis..newlet.." / "..maxdis..maxlet)
  155.  powertxt.setText(newdis..newlet.." / "..maxdis..maxlet)
  156.  
  157.  --The power bar
  158.  powerbarover.setSize((100 * (1 - (newpow / maxpow))), 15)
  159.  
  160.  os.sleep(1)
  161. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement