Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local colors = require("colors")
- local objects = {}
- local API = {}
- local gpu = component.gpu
- local w,h = gpu.getResolution()
- function API.clearScreen()
- gpu.setForeground(colors.white,true)
- gpu.setBackground(colors.black,true)
- gpu.fill(1,1,w,h," ")
- end
- function API.clamp(n,min,max) return math.min(math.max(n, min), max) end
- function API.newButton(ID,label,x,y,width,height,func,params,oncolor,offcolor,toggle)
- local table = {}
- table["type"] = "button"
- table["label"] = label
- table["x"] = x
- table["y"] = y
- table["width"] = width
- table["height"] = height
- table["active"] = false
- table["func"] = func
- table["params"] = params
- table["oncolor"] = oncolor
- table["offcolor"] = offcolor
- table["toggle"] = toggle
- objects[ID] = table
- end
- function API.newLabel(ID,label,x,y,width,height,color)
- local table = {}
- table["type"] = "label"
- table["label"] = label
- table["x"] = x
- table["y"] = y
- table["width"] = width
- table["height"] = height
- table["color"] = color
- objects[ID] = table
- end
- function API.newBar(ID,x,y,width,height,color1,color2,value)
- local table = {}
- table["type"] = "bar"
- table["x"] = x
- table["y"] = y
- table["width"] = width
- table["height"] = height
- table["color1"] = color1 --Left color
- table["color2"] = color2 --Right color
- table["value"] = value
- objects[ID] = table
- end
- function API.removeObject(ID)
- objects[ID] = {}
- end
- function API.clearAllObjects()
- API.clearScreen()
- objects = {}
- end
- function API.draw(ID)
- data = objects[ID]
- local objtype = data["type"]
- local label = data["label"]
- local x = data["x"]
- local y = data["y"]
- local width = data["width"]
- local height = data["height"]
- if objtype == "button" then
- local drawColor = 0x000000
- if data["active"] == true then
- drawColor = data["oncolor"]
- else
- drawColor = data["offcolor"]
- end
- gpu.setBackground(drawColor,false)
- gpu.fill(x,y,width,height," ")
- gpu.set((x+width/2)-string.len(label)/2,y+height/2,label)
- gpu.setBackground(colors.black,true)
- elseif objtype == "label" then
- gpu.setBackground(data["color"],false)
- gpu.fill(x,y,width,height," ")
- gpu.set((x+width/2)-string.len(label)/2,y+height/2,label)
- gpu.setBackground(colors.black,true)
- elseif objtype == "bar" then
- gpu.setBackground(data["color2"],false)
- gpu.fill(x,y,width,height," ")
- local amount = math.floor((width/100)*data["value"])
- gpu.setBackground(data["color1"],false)
- gpu.fill(x,y,amount,height," ")
- gpu.setBackground(colors.black,true)
- end
- end
- function API.toggleButton(ID)
- local objtype = objects[ID]["type"]
- if not objtype == "button" then return end
- objects[ID]["active"] = not objects[ID]["active"]
- API.draw(ID)
- end
- function API.flashButton(ID)
- local objtype = objects[ID]["type"]
- if not objtype == "button" then return end
- API.toggleButton(ID)
- os.sleep(0.15)
- API.toggleButton(ID)
- end
- function API.getButtonState(ID)
- local objtype = objects[ID]["type"]
- if not objtype == "button" then return end
- return objects[ID]["active"]
- end
- function API.getButtonClicked(x,y)
- for ID,data in pairs(objects) do
- local xmax = data["x"]+data["width"]-1
- local ymax = data["y"]+data["height"]-1
- if data["type"] == "button" then
- if x >= data["x"] and x <= xmax then
- if y >= data["y"] and y <= ymax then
- return ID
- end
- end
- end
- end
- return nil
- end
- function API.activateButton(ID)
- local objtype = objects[ID]["type"]
- if not objtype == "button" then return end
- objects[ID]["func"](objects[ID]["params"])
- end
- function API.updateAll()
- API.clearScreen()
- for ID,data in pairs(objects) do
- API.draw(ID)
- end
- end
- function API.processClick(x,y)
- local ID = API.getButtonClicked(x,y)
- if not ID then return end
- local objtype = objects[ID]["type"]
- if not objtype == "button" then return end
- if not ID == false then
- if objects[ID]["toggle"] == true then
- API.toggleButton(ID)
- API.activateButton(ID)
- else
- API.flashButton(ID)
- API.activateButton(ID)
- end
- end
- end
- function API.setBarValue(ID,value)
- local objtype = objects[ID]["type"]
- if not objtype == "bar" then return end
- objects[ID]["value"] = API.clamp(value,0,100)
- API.draw(ID)
- end
- function API.setLabelText(ID,label)
- local objtype = objects[ID]["type"]
- if not objtype == "label" or not objtype == "button" then return end
- if not label then label = " " end
- objects[ID]["label"] = label
- API.draw(ID)
- end
- return API
Add Comment
Please, Sign In to add comment