local GuiScreen = Object:extend() local ElementList = require "birb.modules.gui.mixins.elements" local ScreenList = require "birb.modules.gui.mixins.screens" GuiScreen:implement(ScreenList) GuiScreen:implement(ElementList) local TweenManager = require "birb.classes.time" function GuiScreen:new(name, controller) self.controller = controller or self:getGui() self.name = name self.isVisible = false self.transforms = {} self.tweens = TweenManager(self) self:reset() self:registerElements() self.controller:addScreen(name, self) end function GuiScreen:update(dt) self.tweens:update(dt) for _, screen in pairs(self.screens) do if (screen ~= nil) then screen:update(dt) end end end function GuiScreen:show() if (not self.isVisible) then self.isVisible = true if (self.transforms["show"] ~= nil) then self:playTransform("show") end end end function GuiScreen:hide() if (self.isVisible) then if (self.transforms["hide"] ~= nil) then local time = self:playTransform("hide") print(time) self.tweens:newFunc(time, "hide", function () self.isVisible = false end) end end end function GuiScreen:addTransform(name, transform) self.transforms[name] = transform end function GuiScreen:playTransform(name, delay) local gui = self:getGui() return gui:transform(self.transforms[name], delay) end function GuiScreen:getGui() local scene = core.scenemanager.nextScene or core.scenemanager.currentScene return scene.gui end function GuiScreen:reset() self:initElements() self:initScreens() end function GuiScreen:registerElements() local elementList = self:createElements() for _, element in ipairs(elementList) do if (element.is ~= nil) then self:addElement(element.name, element) element.screen = self else self:addElement(element[1].name, element[1]) if (element[2] == false) then element[1].isVisible = false end element[1].screen = self end end end function GuiScreen:createElements() -- Empty function end return GuiScreen