Advertisement
MRtecno98

OpenComputer ButtonAPI

Feb 26th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.86 KB | None | 0 0
  1. local API = {}
  2. local button={}
  3. local bar={}
  4. local greenBar={}
  5. local redBar={}
  6.  
  7.  
  8. local component = require("component")
  9. local colors = require("colors")
  10. local term = require("term")
  11. local mon = component.gpu
  12. local w, h = mon.getResolution()
  13. local Green = 0x00AA00
  14. local Red = 0xAA0000
  15. local Black = 0x000000
  16.  
  17. buttonStatus = nil
  18.  
  19. function API.clear()
  20.   mon.setBackground(Black)
  21.   mon.fill(1, 1, w, h, " ")
  22. end
  23.  
  24. function API.clearTable()
  25.   button = {}
  26.   API.clear()
  27. end
  28.                
  29. function API.setTable(name, func, xmin, xmax, ymin, ymax)
  30.   button[name] = {}
  31.   button[name]["func"] = func
  32.   button[name]["active"] = false
  33.   button[name]["xmin"] = xmin
  34.   button[name]["ymin"] = ymin
  35.   button[name]["xmax"] = xmax
  36.   button[name]["ymax"] = ymax
  37. end
  38.  
  39. function API.fillBar(name, percent)
  40.   if percent == 0 then
  41.  
  42.     redBar[name]["xmin"] = bar[name]["xmin"]
  43.     redBar[name]["xmax"] = bar[name]["xmax"]
  44.     redBar[name]["ymin"] = bar[name]["ymin"]
  45.     redBar[name]["ymax"] = bar[name]["ymax"]  
  46.     API.fill(" ", Red, redBar[name])
  47.  
  48.   elseif percent == 100 then
  49.    
  50.     greenBar[name]["xmin"] = bar[name]["xmin"]
  51.     greenBar[name]["xmax"] = bar[name]["xmax"]
  52.     greenBar[name]["ymin"] = bar[name]["ymin"]
  53.     greenBar[name]["ymax"] = bar[name]["ymax"]
  54.     API.fill(" ", Green, greenBar[name])
  55.  
  56.   else
  57.  
  58.     local len = bar[name]["xmax"] - bar[name]["xmin"]
  59.     local u = len/100.0
  60.     local gLen = math.floor(u*percent)
  61.     redBar[name] = {}
  62.     greenBar[name] = {}
  63.     greenBar[name]["xmin"] = bar[name]["xmin"]
  64.     greenBar[name]["ymin"] = bar[name]["ymin"]
  65.     greenBar[name]["xmax"] = bar[name]["xmin"] + gLen + 1
  66.     greenBar[name]["ymax"] = bar[name]["ymax"]
  67.  
  68.     -- print(greenBar[name]["xmin"])
  69.     -- print(greenBar[name]["ymin"])
  70.     -- print(greenBar[name]["xmax"])
  71.     -- print(greenBar[name]["ymax"])
  72.     -- print(gLen)
  73.     -- print(u)
  74.     -- print(len)
  75.  
  76.     redBar[name]["xmin"] = bar[name]["xmin"] + gLen
  77.     redBar[name]["ymin"] = bar[name]["ymin"]
  78.     redBar[name]["xmax"] = bar[name]["xmax"]
  79.     redBar[name]["ymax"] = bar[name]["ymax"]
  80.     API.fill(" ", Green, greenBar[name])
  81.     API.fill(" ", Red, redBar[name])
  82.   end
  83. end
  84.  
  85. function API.progressBar(name, xmin, ymin, xmax, ymax)
  86.   bar[name] = {}
  87.   bar[name]["xmin"] = xmin
  88.   bar[name]["xmax"] = xmax
  89.   bar[name]["ymin"] = ymin
  90.   bar[name]["ymax"] = ymax
  91.   API.fillBar(name, 50)
  92. end
  93.  
  94. function API.fill(text, color, bData)
  95.   local yspot = math.floor((bData["ymin"] + bData["ymax"]) /2)
  96.   local xspot = math.floor((bData["xmax"] + bData["xmin"] - string.len(text)) /2)+1
  97.   local oldColor = mon.setBackground(color)
  98.   mon.fill(bData["xmin"], bData["ymin"], (bData["xmax"]-bData["xmin"]+1), (bData["ymax"]-bData["ymin"]+1), " ")
  99.   mon.set(xspot, yspot, text)  mon.setBackground(oldColor)
  100. end
  101.  
  102. function API.screen()
  103.   local currColor
  104.   for name,data in pairs(button) do
  105.     local on = data["active"]
  106.     if on == true then currColor = Green else currColor = Red end
  107.     API.fill(name, currColor, data)
  108.   end
  109. end
  110.  
  111. function API.toggleButton(name)
  112.   button[name]["active"] = not button[name]["active"]
  113.   buttonStatus = button[name]["active"]
  114.   API.screen()
  115. end    
  116.  
  117. function API.flash(name,length)
  118.   API.toggleButton(name)
  119.   API.screen()
  120.   os.sleep(length)
  121.   API.toggleButton(name)
  122.   API.screen()
  123. end
  124.                                              
  125. function API.checkxy(x, y)
  126.   for name, data in pairs(button) do
  127.     if y>=data["ymin"] and  y <= data["ymax"] then
  128.       if x>=data["xmin"] and x<= data["xmax"] then
  129.         data["func"]()
  130.           return true
  131.       end
  132.     end
  133.   end
  134.   return false
  135. end
  136.      
  137. function API.heading(text)
  138.   w, h = mon.getResolution()
  139.   term.setCursor((w-string.len(text))/2+1, 1)
  140.   term.write(text)
  141. end
  142.      
  143. function API.label(w, h, text)
  144.   term.setCursor(w, h)
  145.   term.write(text)
  146. end
  147.  
  148. return API
  149.  
  150.  
  151.  
  152.  
  153.  
  154. --eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement