Flaghacker

glasses API

May 21st, 2014
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.69 KB | None | 0 0
  1. --[[Glass API]]--
  2. --©Flaghacker productions
  3. print("Glass API loaded")
  4.  
  5. --[[Settings]]--
  6.  
  7. --[[Variables & peripherals]]--
  8. local glass
  9.  
  10. --[[Functions]]--
  11. function setSide(side)
  12.     glass = peripheral.wrap(side)
  13.     glass.clear()
  14. end
  15.  
  16. local function clear()
  17.     term.clear()
  18.     term.setCursorPos(1,1)
  19. end
  20.  
  21. local function round(number)
  22.     return math.floor(number + 0.5)
  23. end
  24.  
  25. --[[local function checkInit(self)
  26.     if not self["settings"] == nil then
  27.         error("Forgot to initiate")
  28.     end
  29. end]]
  30.  
  31. local function pixel(x, y, color, opacity)
  32.     return glass.addBox(x, y, 1, 1, color, opacity)
  33. end
  34.  
  35. local function getGroundSettings(self)
  36.     local temp = {}
  37.     if self.settings.direction % 4 == 1 then
  38.         temp.x1 = self.settings.x1 + self.settings.value / self.settings.maxValue * self.settings.width
  39.         temp.y1 = self.settings.y1
  40.         temp.width = self.settings.x2 - round(temp.x1)
  41.         temp.height = self.settings.height
  42.     elseif self.settings.direction % 4 == 2 then
  43.         temp.x1 = self.settings.x1
  44.         temp.y1 = self.settings.y1 + self.settings.value / self.settings.maxValue * self.settings.height
  45.         temp.width = self.settings.width
  46.         temp.height = self.settings.y2 - round(temp.y1)
  47.     elseif self.settings.direction % 4 == 3 then
  48.         temp.x1 = self.settings.x1
  49.         temp.y1 = self.settings.y1
  50.         temp.width = (1 - self.settings.value / self.settings.maxValue) * self.settings.width
  51.         temp.height = self.settings.height
  52.     elseif self.settings.direction % 4 == 0 then
  53.         temp.x1 = self.settings.x1
  54.         temp.y1 = self.settings.y1
  55.         temp.width = self.settings.width
  56.         temp.height = self.settings.height * (1 - self.settings.value / self.settings.maxValue)
  57.     end
  58.     --round and abs
  59.     for name, value in pairs(temp) do
  60.         if type(value) == "number" then
  61.             temp[name] = round(math.abs(value))
  62.         end
  63.     end
  64.     return temp
  65. end
  66.  
  67. local function fixGradientColors(self)
  68.     if not self.settings.displayColor2 then
  69.         error("No gradient")
  70.     end
  71.     if self.settings.direction % 4 == 1 then
  72.         self.settings.gradient = 2
  73.         local temp = self.settings.displayColor
  74.         self.settings.displayColor = self.settings.displayColor2
  75.         self.settings.displayColor2 = temp
  76.     elseif self.settings.direction % 4 == 2 then
  77.         self.settings.gradient = 1
  78.     elseif self.settings.direction % 4 == 3 then
  79.         self.settings.gradient = 2
  80.         local temp = self.settings.displayColor
  81.         self.settings.displayColor = self.settings.displayColor2
  82.         self.settings.displayColor2 = temp
  83.     elseif self.settings.direction % 4 == 0 then
  84.         self.settings.gradient = 1
  85.     end
  86.     return self
  87. end
  88.  
  89. --[[Objects]]--
  90. --Status bar
  91. do
  92.     local prototype = {}
  93.    
  94.     function prototype:initiate(vars)
  95.         self.settings = vars
  96.         self.settings.opacity = self.settings.opacity/100 or 1
  97.         self.settings.maxValue = self.settings.maxValue or 1
  98.         self.settings.value = self.settings.value or 0
  99.         self.settings.width = math.abs(self.settings.x2 - self.settings.x1)
  100.         self.settings.height = math.abs(self.settings.y2 - self.settings.y1)
  101.         if self.settings.displayColor2 then
  102.             self = fixGradientColors(self)
  103.             self.displayHandler = glass.addGradientBox(self.settings.x1, self.settings.y1, self.settings.width, self.settings.height, self.settings.displayColor, self.settings.opacity, self.settings.displayColor2, self.settings.opacity, self.settings.gradient)
  104.         else
  105.             self.displayHandler = glass.addBox(self.settings.x1, self.settings.y1, self.settings.width, self.settings.height, self.settings.displayColor, self.settings.opacity)
  106.         end
  107.         self.displayHandler.setZ(self.settings.z)
  108.         local temp = getGroundSettings(self)
  109.         self.groundHandler = glass.addBox(temp.x1, temp.y1, temp.width, temp.height, self.settings.groundColor, self.settings.opacity)
  110.         self.groundHandler.setZ(self.settings.z + 1)
  111.     end
  112.    
  113.     function prototype:redraw()
  114.         temp = getGroundSettings(self)
  115.         --print("setvalue - temp = "..textutils.serialize(temp))
  116.         self.groundHandler.setX(temp.x1)
  117.         self.groundHandler.setY(temp.y1)
  118.         self.groundHandler.setWidth(temp.width)
  119.         self.groundHandler.setHeight(temp.height)
  120.         if self.settings.displayColor2 then
  121.             print("Gradient: "..self.settings.gradient)
  122.             print("Direction: "..self.settings.direction)
  123.             self.displayHandler.setGradient(self.settings.gradient)
  124.         end
  125.     end
  126.    
  127.     function prototype:setValue(value)
  128.         print(self.settings.value)
  129.         print(self.settings.maxValue)
  130.         if value > self.settings.maxValue then
  131.             error("value > maxValue")
  132.         end
  133.         self.settings.value = value
  134.         self:redraw()
  135.     end
  136.    
  137.     function prototype:setMaxValue(value)
  138.         if value < self.settings.value then
  139.             error("maxValue < value")
  140.         end
  141.         self.settings.maxValue = value
  142.         self:redraw()
  143.     end
  144.    
  145.     function prototype:delete()
  146.         self = nil
  147.         glass.clear()
  148.     end
  149.  
  150.     createStatusBar = function(vars)
  151.         prototype:initiate(vars)
  152.         print("hi")
  153.         return setmetatable({}, { __index = prototype })
  154.     end
  155. end
  156.  
  157. --Line
  158. do
  159.     local prototype = {}
  160.    
  161.     function prototype:initiate(vars)
  162.         self.settings = vars
  163.         self.handlers = {}
  164.         self.settings.opacity = self.settings.opacity/100 or 1
  165.         self.settings.x1 = math.floor(self.settings.x1)
  166.         self.settings.y1 = math.floor(self.settings.y1)
  167.         self.settings.x2 = math.floor(self.settings.x2)
  168.         self.settings.y2 = math.floor(self.settings.y2)
  169.         self.settings.minX = math.min(self.settings.x1, self.settings.x2)
  170.        
  171.         if self.settings.minX == self.settings.x1 then
  172.             self.settings.minY = self.settings.y1
  173.             self.settings.maxX = self.settings.x2
  174.             self.settings.maxY = self.settings.y2
  175.         else
  176.             self.settings.minY = self.settings.y2
  177.             self.settings.maxX = self.settings.x1  
  178.             self.settings.maxY = self.settings.y1
  179.         end
  180.            
  181.         local xDiff = self.settings.maxX - self.settings.minX
  182.         local yDiff = self.settings.maxY - self.settings.minY
  183.        
  184.         local i = 0
  185.                
  186.         if xDiff > math.abs(yDiff) then
  187.             local y = self.settings.minY
  188.             local dy = yDiff / xDiff
  189.             for x = self.settings.minX, self.settings.maxX do
  190.                 i = i + 1
  191.                 self.handlers[i] = pixel(x, round(y), self.settings.color, self.settings.opacity)
  192.                 y = y + dy
  193.             end
  194.         else
  195.             local x = self.settings.minX
  196.             local dx = xDiff / yDiff
  197.             if self.settings.maxY >= self.settings.minY then
  198.                 for y = self.settings.minY, self.settings.maxY do
  199.                     i = i + 1
  200.                     self.handlers[i] = pixel(x, round(y), self.settings.color, self.settings.opacity)
  201.                     x = x + dx
  202.                 end
  203.             else
  204.                 for y = self.settings.minY, self.settings.maxY, -1 do
  205.                     i = i + 1
  206.                     self.handlers[i] = pixel(x, round(y), self.settings.color, self.settings.opacity)
  207.                     x = x - dx
  208.                 end
  209.             end
  210.         end
  211.     end
  212.    
  213.     function prototype:delete()
  214.         for i = 1, #self.handlers do
  215.             self.handlers[i].delete()
  216.         end
  217.         self = nil
  218.     end
  219.  
  220.     createLine = function(vars)
  221.         prototype:initiate(vars)
  222.         return setmetatable({}, { __index = prototype })
  223.     end
  224. end
Advertisement
Add Comment
Please, Sign In to add comment