Advertisement
HangMan23

Untitled

Feb 25th, 2021
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. local component = require ("component")
  2. local computer = require ("computer")
  3. local term = require ("term")
  4.  
  5. local gpu = component.gpu
  6.  
  7. local device
  8. local redstone
  9.  
  10. ------------------------------
  11.  
  12. local running = true
  13. local tickrate = 20
  14. local timeout = 1
  15. local fatal_energy = 20
  16. local energy_unit = "RF"
  17. local energy_device_name = "energy_device"
  18. local max_energy_func_name = "getMaxEnergyStored"
  19. local energy_func_name = "getEnergyStored"
  20. local energy_on_limit = 70
  21. local energy_off_limit = 80
  22. local redstone_side = 1
  23. local redstone_inverted = true
  24.  
  25. local res_x, res_y = 32, 16
  26.  
  27. local background = 0x121212
  28. local foreground = 0xffffff
  29. local lost_energy_color = 0xff0000
  30. local got_energy_color = 0x00ff00
  31. local wait_energy_color = 0xffff00
  32. local energy_bar_color = 0x006fff
  33.  
  34. local max_energy
  35.  
  36. local last_beeped = false
  37.  
  38. -----------------------------
  39.  
  40. local function getEnergy ()
  41.  
  42. if not device[energy_func_name] then
  43.  
  44. error ("Get energy function '" .. energy_device_name .. "." .. energy_func_name .. "' not found")
  45.  
  46. end
  47.  
  48. return device[energy_func_name] ()
  49.  
  50. end
  51.  
  52. ------------------------------
  53.  
  54. local function getMaxEnergy ()
  55.  
  56. if not device[max_energy_func_name] then
  57.  
  58. error ("Get max energy function '" .. device_name .. "." .. max_energy_func_name .. "' not fund")
  59.  
  60. end
  61.  
  62. return device[max_energy_func_name] ()
  63.  
  64. end
  65.  
  66. ------------------------------
  67.  
  68. local function init ()
  69.  
  70. if component.isAvailable (energy_device_name) then
  71.  
  72. device = component.energy_device
  73. max_energy = getMaxEnergy ()
  74.  
  75. else
  76.  
  77. error ("Energy device '" .. energy_device_name .. "' is unavailable")
  78.  
  79. end
  80.  
  81. if component.isAvailable ("redstone") then
  82.  
  83. redstone = component.redstone
  84.  
  85. end
  86.  
  87. end
  88.  
  89. ------------------------------
  90.  
  91. local function setPower (power)
  92.  
  93. if not redstone then return end
  94.  
  95. if redstone_inverted then power = not power end
  96.  
  97. if power then
  98.  
  99. redstone.setOutput (redstone_side, 15)
  100.  
  101. else
  102.  
  103. redstone.setOutput (redstone_side, 0)
  104.  
  105. end
  106.  
  107. end
  108.  
  109. ------------------------------
  110.  
  111. local function drawEnergyStored (stored)
  112.  
  113. local width = res_x / max_energy * stored
  114.  
  115. gpu.setBackground (background)
  116. gpu.fill (1, res_y, res_x, 2, " ")
  117.  
  118. gpu.setBackground (energy_bar_color)
  119. gpu.fill (1, res_y, width, 1, " ")
  120.  
  121. end
  122.  
  123. ------------------------------
  124.  
  125. local function beepIfNeed (stored, got)
  126.  
  127. local percent = math.floor (100 / max_energy * stored)
  128.  
  129. gpu.setForeground (foreground)
  130.  
  131. if percent < fatal_energy and got < 0 then
  132.  
  133. last_beeped = true
  134.  
  135. for i = 1, 3 do computer.beep (1000, 0.01) end
  136.  
  137. print (percent .. "% of energy left")
  138. print ("Please charge baterry")
  139.  
  140. else
  141.  
  142. if last_beeped then
  143.  
  144. computer.beep (330, 0.01)
  145. computer.beep (450, 0.01)
  146. computer.beep (500, 0.01)
  147.  
  148. end
  149.  
  150. last_beeped = false
  151.  
  152. end
  153.  
  154. end
  155.  
  156. ------------------------------
  157.  
  158. local function main ()
  159.  
  160. init ()
  161.  
  162. while running do
  163.  
  164. gpu.setBackground (background)
  165.  
  166. local start_energy = getEnergy ()
  167. local start_time = computer.uptime ()
  168.  
  169. if computer.pullSignal (timeout) == "key_down" then
  170.  
  171. running = false
  172.  
  173. end
  174.  
  175. local stored = getEnergy ()
  176. local time = computer.uptime () - start_time
  177.  
  178. local recieved = (stored - start_energy) / time / tickrate
  179. recieved = math.floor (recieved * 100) / 100
  180.  
  181. local str = tostring (recieved) .. " " .. energy_unit .. "/t"
  182.  
  183. local percent = math.floor (100 / max_energy * stored)
  184.  
  185. if percent > energy_off_limit then
  186.  
  187. setPower (false)
  188.  
  189. end
  190.  
  191. if percent < energy_on_limit then
  192.  
  193. setPower (true)
  194.  
  195. end
  196.  
  197. if recieved > 0 then
  198.  
  199. str = "+" .. str .. " | " .. percent .. "% stored"
  200. gpu.setForeground (got_energy_color)
  201.  
  202. else
  203.  
  204.  
  205. str = str .. " | " .. percent .. "% stored"
  206. gpu.setForeground (wait_energy_color)
  207.  
  208. end
  209.  
  210. if percent > energy_on_limit then
  211.  
  212. gpu.setForeground (wait_energy_color)
  213.  
  214. end
  215.  
  216. print (str)
  217.  
  218. beepIfNeed (stored, recieved)
  219. drawEnergyStored (stored)
  220.  
  221. end
  222.  
  223. end
  224.  
  225. ------------------------------
  226.  
  227. local function errorHandler (error_message, traceback)
  228.  
  229. return {message = error_message, traceback = debug.traceback ()}
  230.  
  231. end
  232.  
  233. ------------------------------
  234.  
  235. do
  236.  
  237. gpu.setResolution (res_x, res_y)
  238.  
  239. gpu.setBackground (background)
  240. gpu.setForeground (foreground)
  241.  
  242. term.clear ()
  243.  
  244. print ("Press any key to exit")
  245.  
  246. local runresult, err = xpcall (main, errorHandler)
  247.  
  248. gpu.setResolution (gpu.maxResolution ())
  249. gpu.setBackground (0x000000)
  250. gpu.setForeground (0xffffff)
  251.  
  252. term.clear ()
  253.  
  254. function s () os.sleep (0.1) end
  255.  
  256. if not runresult then
  257.  
  258. computer.beep (500, 0.01)
  259. computer.beep (500, 0.01)
  260.  
  261. print ("Runtime error:\n")
  262. s ()
  263.  
  264. print ("|===============================|\n")
  265.  
  266. gpu.setForeground (0xff0000)
  267. print (err.message .. "\n")
  268. s ()
  269.  
  270. gpu.setForeground (0xffffff)
  271. print ("|===============================|\n")
  272. s ()
  273.  
  274. gpu.setForeground (0x006fff)
  275. print (err.traceback .. "\n")
  276. s ()
  277.  
  278. gpu.setForeground (0xffffff)
  279. print ("|===============================|\n")
  280.  
  281. end
  282.  
  283. gpu.setForeground (0xffffff)
  284.  
  285. end
  286.  
  287. ------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement