Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[Glass API]]--
- --©Flaghacker productions
- print("Glass API loaded")
- --[[Settings]]--
- --[[Variables & peripherals]]--
- local glass
- --[[Functions]]--
- function setSide(side)
- glass = peripheral.wrap(side)
- glass.clear()
- end
- local function clear()
- term.clear()
- term.setCursorPos(1,1)
- end
- local function round(number)
- return math.floor(number + 0.5)
- end
- --[[local function checkInit(self)
- if not self["settings"] == nil then
- error("Forgot to initiate")
- end
- end]]
- local function pixel(x, y, color, opacity)
- return glass.addBox(x, y, 1, 1, color, opacity)
- end
- local function getGroundSettings(self)
- local temp = {}
- if self.settings.direction % 4 == 1 then
- temp.x1 = self.settings.x1 + self.settings.value / self.settings.maxValue * self.settings.width
- temp.y1 = self.settings.y1
- temp.width = self.settings.x2 - round(temp.x1)
- temp.height = self.settings.height
- elseif self.settings.direction % 4 == 2 then
- temp.x1 = self.settings.x1
- temp.y1 = self.settings.y1 + self.settings.value / self.settings.maxValue * self.settings.height
- temp.width = self.settings.width
- temp.height = self.settings.y2 - round(temp.y1)
- elseif self.settings.direction % 4 == 3 then
- temp.x1 = self.settings.x1
- temp.y1 = self.settings.y1
- temp.width = (1 - self.settings.value / self.settings.maxValue) * self.settings.width
- temp.height = self.settings.height
- elseif self.settings.direction % 4 == 0 then
- temp.x1 = self.settings.x1
- temp.y1 = self.settings.y1
- temp.width = self.settings.width
- temp.height = self.settings.height * (1 - self.settings.value / self.settings.maxValue)
- end
- --round and abs
- for name, value in pairs(temp) do
- if type(value) == "number" then
- temp[name] = round(math.abs(value))
- end
- end
- return temp
- end
- local function fixGradientColors(self)
- if not self.settings.displayColor2 then
- error("No gradient")
- end
- if self.settings.direction % 4 == 1 then
- self.settings.gradient = 2
- local temp = self.settings.displayColor
- self.settings.displayColor = self.settings.displayColor2
- self.settings.displayColor2 = temp
- elseif self.settings.direction % 4 == 2 then
- self.settings.gradient = 1
- elseif self.settings.direction % 4 == 3 then
- self.settings.gradient = 2
- local temp = self.settings.displayColor
- self.settings.displayColor = self.settings.displayColor2
- self.settings.displayColor2 = temp
- elseif self.settings.direction % 4 == 0 then
- self.settings.gradient = 1
- end
- return self
- end
- --[[Objects]]--
- --Status bar
- do
- local prototype = {}
- function prototype:initiate(vars)
- self.settings = vars
- self.settings.opacity = self.settings.opacity/100 or 1
- self.settings.maxValue = self.settings.maxValue or 1
- self.settings.value = self.settings.value or 0
- self.settings.width = math.abs(self.settings.x2 - self.settings.x1)
- self.settings.height = math.abs(self.settings.y2 - self.settings.y1)
- if self.settings.displayColor2 then
- self = fixGradientColors(self)
- 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)
- else
- self.displayHandler = glass.addBox(self.settings.x1, self.settings.y1, self.settings.width, self.settings.height, self.settings.displayColor, self.settings.opacity)
- end
- self.displayHandler.setZ(self.settings.z)
- local temp = getGroundSettings(self)
- self.groundHandler = glass.addBox(temp.x1, temp.y1, temp.width, temp.height, self.settings.groundColor, self.settings.opacity)
- self.groundHandler.setZ(self.settings.z + 1)
- end
- function prototype:redraw()
- temp = getGroundSettings(self)
- --print("setvalue - temp = "..textutils.serialize(temp))
- self.groundHandler.setX(temp.x1)
- self.groundHandler.setY(temp.y1)
- self.groundHandler.setWidth(temp.width)
- self.groundHandler.setHeight(temp.height)
- if self.settings.displayColor2 then
- print("Gradient: "..self.settings.gradient)
- print("Direction: "..self.settings.direction)
- self.displayHandler.setGradient(self.settings.gradient)
- end
- end
- function prototype:setValue(value)
- print(self.settings.value)
- print(self.settings.maxValue)
- if value > self.settings.maxValue then
- error("value > maxValue")
- end
- self.settings.value = value
- self:redraw()
- end
- function prototype:setMaxValue(value)
- if value < self.settings.value then
- error("maxValue < value")
- end
- self.settings.maxValue = value
- self:redraw()
- end
- function prototype:delete()
- self = nil
- glass.clear()
- end
- createStatusBar = function(vars)
- prototype:initiate(vars)
- print("hi")
- return setmetatable({}, { __index = prototype })
- end
- end
- --Line
- do
- local prototype = {}
- function prototype:initiate(vars)
- self.settings = vars
- self.handlers = {}
- self.settings.opacity = self.settings.opacity/100 or 1
- self.settings.x1 = math.floor(self.settings.x1)
- self.settings.y1 = math.floor(self.settings.y1)
- self.settings.x2 = math.floor(self.settings.x2)
- self.settings.y2 = math.floor(self.settings.y2)
- self.settings.minX = math.min(self.settings.x1, self.settings.x2)
- if self.settings.minX == self.settings.x1 then
- self.settings.minY = self.settings.y1
- self.settings.maxX = self.settings.x2
- self.settings.maxY = self.settings.y2
- else
- self.settings.minY = self.settings.y2
- self.settings.maxX = self.settings.x1
- self.settings.maxY = self.settings.y1
- end
- local xDiff = self.settings.maxX - self.settings.minX
- local yDiff = self.settings.maxY - self.settings.minY
- local i = 0
- if xDiff > math.abs(yDiff) then
- local y = self.settings.minY
- local dy = yDiff / xDiff
- for x = self.settings.minX, self.settings.maxX do
- i = i + 1
- self.handlers[i] = pixel(x, round(y), self.settings.color, self.settings.opacity)
- y = y + dy
- end
- else
- local x = self.settings.minX
- local dx = xDiff / yDiff
- if self.settings.maxY >= self.settings.minY then
- for y = self.settings.minY, self.settings.maxY do
- i = i + 1
- self.handlers[i] = pixel(x, round(y), self.settings.color, self.settings.opacity)
- x = x + dx
- end
- else
- for y = self.settings.minY, self.settings.maxY, -1 do
- i = i + 1
- self.handlers[i] = pixel(x, round(y), self.settings.color, self.settings.opacity)
- x = x - dx
- end
- end
- end
- end
- function prototype:delete()
- for i = 1, #self.handlers do
- self.handlers[i].delete()
- end
- self = nil
- end
- createLine = function(vars)
- prototype:initiate(vars)
- return setmetatable({}, { __index = prototype })
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment