Advertisement
Duisburger98

display_tanks_wired_v3

Nov 18th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.42 KB | None | 0 0
  1. --[[
  2. display_tanks_wired_v3 v3.0 for OpenPeripheral 0.4.1
  3. Copyright (C) 2016 Duisburger98
  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