Advertisement
mydexterid

display_tanks_wired_v2

Aug 1st, 2014
1,305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2.     display_tanks_wired_v2 v2.0 for OpenPeripheral 0.4.1
  3.     Copyright (C) 2014 DEXTER
  4.  
  5.     This program is free software: you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation, either version 3 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17. --]]
  18.  
  19. -- The text scale of your monitor (between 0.5 and 5)
  20. monitor_scale = 1
  21.  
  22. -- Whether to show or not the percentage in numberic form above the graphs
  23. -- Note: This will only work if there is enough horizontal space to write the numbers
  24. --       So if the graphs width is less than 4 characters you won't see the numbers
  25. --       even if you set this to true
  26. show_percentage = true
  27.  
  28. -- Monitor refresh frequency (in seconds)
  29. sleep_timeout = 0.5
  30.  
  31. -- The colors you want to see your liquids in
  32. -- You can add more liquids, or change the colors here
  33. tank_colors={
  34. {name="Lava", color=colors.red},
  35. {name="Water", color=colors.blue},
  36. {name="Biofuel", color=colors.orange},
  37. {name="item.mobessenceitem", color=colors.green},
  38. {name="Creosote Oil", color=colors.brown},
  39. {name="Fuel", color=colors.yellow},
  40. {name="Oil", color=colors.gray},
  41. {name="Biomass", color=colors.green},
  42. {name="Sludge", color=colors.blue},
  43. {name="Sewage", color=colors.brown},
  44. {name="Liquid DNA", color=colors.pink},
  45. {name="Honey", color=colors.yellow},
  46. {name="Fruit Juice", color=colors.lime},
  47. {name="Milk", color=colors.white},
  48. {name="Seed Oil", color=colors.yellow},
  49. {name="Ethanol", color=colors.orange},
  50. {name="Pink Slime", color=colors.pink},
  51. {name="Molten Iron", color=colors.red},
  52. {name="Molten Gold", color=colors.yellow},
  53. {name="Molten Ardite", color=colors.brown},
  54. {name="Molten Copper", color=colors.orange},
  55. {name="Molten Bronze", color=colors.brown},
  56. {name="Molten Aluminum Brass", color=colors.yellow},
  57. {name="Molten Manyullyn", color=colors.purple},
  58. {name="Molten Alumite", color=colors.pink},
  59. {name="Molten Aluminum", color=colors.pink},
  60. {name="Molten Obsidian", color=colors.purple},
  61. {name="Molten Cobalt", color=colors.blue},
  62. {name="Molten Steel", color=colors.lightGray},
  63. {name="Molten Glass", color=colors.lightBlue},
  64. {name="Seared Stone", color=colors.gray},
  65. {name="Liquified Emerald", color=colors.lime},
  66. {name="Blood", color=colors.red},
  67. {name="Molten Nickel", color=colors.yellow},
  68. {name="Molten Lead", color=colors.purple},
  69. {name="Molten Silver", color=colors.cyan},
  70. {name="fluid.platinum.molten", color=colors.cyan},
  71. {name="Molten Invar", color=colors.lightGray},
  72. {name="Molten Electrum", color=colors.yellow},
  73. {name="Resonant Ender", color=colors.green},
  74. {name="Liquid Blueslime", color=colors.lightBlue},
  75. {name="Pig Iron", color=colors.pink},
  76. {name="Liquid XP", color=colors.lime},
  77. {name="Destabilized Redstone", color=colors.red},
  78. {name="Energized Glowstone", color=colors.yellow},
  79. {name="Blazing Pyrotheum", color=colors.orange},
  80. {name="Gelid Cryotheum", color=colors.cyan},
  81. {name="coal", color=colors.gray},
  82. }
  83.  
  84.  
  85. -----------------------------------------
  86. -- DO NOT MODIFY ANYTHING FROM HERE ON --
  87. -----------------------------------------
  88.  
  89. function tableLength(T)
  90.   local count = 0
  91.   for _ in pairs(T) do
  92.     count = count + 1
  93.   end
  94.   return count
  95. end
  96.  
  97. function getColor(data)
  98.   for _, v in pairs(tank_colors) do
  99.     if (v.name == data.name) or
  100.        (v.name == data.rawName) then
  101.       return v.color
  102.     end
  103.   end
  104.   return colors.white
  105. end
  106.  
  107. function drawGraph()
  108.   local graph_width=0
  109.   local tanks_num = tableLength(unique_tank_hash)
  110.   local percentage_line = 0
  111.  
  112.   if tanks_num == 0 then
  113.     return
  114.   end
  115.  
  116.   while graph_width <= 0 do
  117.     graph_width = math.floor((width-tanks_num+1) / tanks_num)
  118.     tanks_num = tanks_num - 1
  119.   end
  120.   tanks_num = tanks_num + 1
  121.  
  122.   if (show_percentage) and
  123.      (graph_width > 4) then
  124.     percentage_line = 1
  125.   end
  126.  
  127.   local count=0
  128.   for k, v in pairs(unique_tank_hash) do
  129.     local x = (count * graph_width) + 1 + count
  130.     local x_end = x + graph_width -1
  131.     if v.amount == nil then
  132.       v.amount = 0
  133.     end
  134.     if v.capacity == nil then
  135.       v.capacity = 1
  136.     end
  137.     percent = v.amount / v.capacity
  138.     percentage = (height-percentage_line) * percent
  139.    
  140.     y = (height-percentage_line) - math.floor(percentage + 0.5) + percentage_line
  141.  
  142.     if percentage_line == 1 then
  143.       local round_percent = math.floor((percent*100) + 0.5)
  144.       local text = round_percent.."%"
  145.       local x_pos = x + math.floor((graph_width-string.len(text))/2)
  146.       monitor.setCursorPos(x_pos,1)
  147.       monitor.setBackgroundColor(colors.black)
  148.       monitor.setTextColor(colors.white)
  149.  
  150.       monitor.write(text)
  151.     end
  152.  
  153.     for i=1+percentage_line,height do
  154.       for j=x,x_end do
  155.         local c = colors.black
  156.         if i > y then
  157.           c = getColor(v)
  158.         end
  159.         monitor.setBackgroundColor(c)
  160.         monitor.setCursorPos(j, i)
  161.         monitor.write(" ")
  162.       end
  163.     end
  164.  
  165.     count = count + 1
  166.     if count >= tanks_num then
  167.       return
  168.     end
  169.   end
  170. end
  171.  
  172. function getTanks()
  173.   tanks={}
  174.   for i, name in ipairs(peripheral.getNames()) do
  175.     local methods = peripheral.getMethods(name)
  176.     if methods then
  177.       for k, v in pairs(methods) do
  178.         if v == "getTankInfo" then
  179.           local p = peripheral.wrap(name)
  180.           local info = p.getTankInfo("unknown")
  181.           for m,n in ipairs(info) do
  182.             local data={position=name, data=n}
  183.             table.insert(tanks, data)
  184.           end
  185.         end
  186.       end
  187.     end
  188.   end
  189.  
  190.   return tanks
  191. end
  192.  
  193. while true do
  194.   tank_data = getTanks()
  195.   unique_tank_hash = {}
  196.  
  197.   for i, v in ipairs(tank_data) do
  198.     tank=v.data
  199.     tank_position=v.position
  200.     local hash={tank_position, i}
  201.     unique_tank_hash[textutils.serialize(hash)] = tank
  202.   end
  203.  
  204.   monitor = peripheral.find("monitor")
  205.   if monitor then
  206.     monitor.setTextScale(monitor_scale)
  207.     monitor.setBackgroundColor(colors.black)
  208.     monitor.clear()
  209.     width, height = monitor.getSize()
  210.     drawGraph()
  211.   end
  212.  
  213.   sleep(sleep_timeout)
  214. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement