Files
jui-lua/lib/classes/UIBase.lua
2019-05-16 16:20:50 -05:00

148 lines
3.1 KiB
Lua

local newclass = require("lib.YACI")
local Dimension = require("lib.datatypes.Dimension")
local Vector2D = require("lib.datatypes.Vector2D")
--[[
UIBase class
Internal properties:
boolean isUIObject
boolean active
table<UIBase> children
UIBase parent
Hidden methods:
renderChildren()
updateChildren(number delta)
addChild(UIBase child)
setParent(UIBase parent)
Public methods:
table<UIBase> getChildren()
UIBase getParent()
render()
update(number delta)
Events:
]]
local UIBase = newclass("UIBase")
local charset = {} do -- [0-9a-zA-Z]
for c = 48, 57 do table.insert(charset, string.char(c)) end
for c = 65, 90 do table.insert(charset, string.char(c)) end
for c = 97, 122 do table.insert(charset, string.char(c)) end
end
local function randomString(length)
if not length or length <= 0 then return '' end
math.randomseed(os.clock()^5)
return randomString(length - 1) .. charset[math.random(1, #charset)]
end
function UIBase:init()
self.name = randomString(16)
self.isUIObject = true
self.active = true
self.children = {}
self.parent = nil
self.textInput = false
self.baseReturnFont = love.graphics.newFont(12)
end
function UIBase:keypressPass(key)
for _, child in pairs(self.children) do
if child.isFocused and child.isFocused == true then
child:keypressed(key)
return true
end
child:keypressPass(key)
end
end
function UIBase:textinputPass(t)
for _, child in pairs(self.children) do
if child.isFocused and child.isFocused == true then
child:textinput(t)
return true
end
child:textinputPass(t)
end
end
function UIBase:renderChildren()
for _, child in pairs(self.children) do
if child.isUIObject then
child:render()
end
end
end
function UIBase:updateChildren(delta)
for _, child in pairs(self.children) do
if child.isUIObject then
child:update(delta)
end
end
end
function UIBase:render()
end
function UIBase:update(delta)
self:updateChildren(delta)
end
function UIBase:getName()
return self.name
end
function UIBase:setName(name)
self.name = name
end
function UIBase:getChild(name)
for _, obj in pairs(self:getChildren()) do
if obj:getName() == name then
return obj
end
end
end
function UIBase:getFirstChildOfType(type)
for _, obj in pairs(self:getChildren()) do
if obj.class == type then
return obj
end
end
end
function UIBase:getChildren()
return self.children
end
function UIBase:addChild(instance)
self.children[#self.children+1] = instance
end
function UIBase:removeChild(instName)
for index, obj in pairs(self:getChildren()) do
if obj:getName() == instName then
local object = obj
self.children[index] = nil
return obj
end
end
end
function UIBase:getParent()
return self.parent
end
function UIBase:setParent(instance)
self.parent = instance
end
return UIBase