NeOzay

button.lua

Aug 4th, 2021 (edited)
133
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local Color = require("color")
  2. local thread = require("thread")
  3. local event = require("event")
  4. local component = require("component")
  5.  
  6. local TO = require("textObject")
  7. local drawtO = TO.drawtO
  8. local TextObject = TO.TextObject
  9.  
  10. local os = require("os")
  11.  
  12. buttonlist = {}
  13.  
  14. thread.create(function()
  15.     while true do
  16.         local eventname, screenAddress, mx, my, mouseButton, playerName = event.pull("touch")
  17.         for i, button in ipairs(buttonlist) do
  18.             if button:isClicked(mx,my) then
  19.                 button:click()
  20.                 button:draw()
  21.                 break
  22.             end
  23.         end
  24.     end
  25. end)
  26.  
  27. local function Button()
  28.     local b = {}
  29.     b.x = 1
  30.     b.y = 1
  31.     b.ox = 0
  32.     b.oy = 0
  33.     b.status = false
  34.     b.mode = "toggle"
  35.     b.textureON = { Color("green"), Color("gray") }
  36.     b.textureOFF = { Color("gray"), Color("red") }
  37.  
  38.     function b:draw()
  39.         if self.status then
  40.             for i, v in ipairs(self.textureON) do
  41.                 drawtO(TextObject(" ", v, v), self.x + self.ox + i - 1, self.y + self.oy)
  42.             end
  43.         else
  44.             for i, v in ipairs(self.textureOFF) do
  45.                 drawtO(TextObject(" ", v, v), self.x + self.ox + i - 1, self.y + self.oy)
  46.             end
  47.         end
  48.     end
  49.  
  50.     function b:setTextureON(colors)
  51.         self.textureON = colors
  52.     end
  53.  
  54.     function b:setTextureOFF(colors)
  55.         self.textureOFF = colors
  56.     end
  57.  
  58.     function b:setOffset(ox, oy)
  59.         self.ox = ox
  60.         self.oy = oy
  61.     end
  62.  
  63.     function b:setPos(x, y)
  64.         self.x = x
  65.         self.y = y
  66.     end
  67.  
  68.     function b:setFunction(fn)
  69.         self.fn = fn
  70.     end
  71.  
  72.     function b:getWidth()
  73.         if b.status then
  74.             return #b.textureON
  75.         else
  76.             return #b.textureOFF
  77.         end
  78.     end
  79.  
  80.     function b:isClicked(x, y)
  81.         local width = b:getWidth()
  82.         if x >= self.x + self.ox and
  83.                 x <= self.x + self.ox + width-1 and
  84.                 y ==self.y+self.oy
  85.         then
  86.             return true
  87.         else
  88.             return false
  89.         end
  90.     end
  91.  
  92.     function b:click()
  93.         self.status = not self.status
  94.         if self.fn then
  95.             self.fn()
  96.         end
  97.     end
  98.  
  99.     table.insert(buttonlist, b)
  100.     return b
  101. end
  102.  
  103. return Button
  104.  
RAW Paste Data