feat: new subscreen system
This commit is contained in:
parent
c7c9e37c99
commit
1a889163ae
2 changed files with 113 additions and 1 deletions
|
@ -3,10 +3,10 @@ local ElementList = require "birb.modules.gui.mixins.elements"
|
|||
GuiScreen:implement(ElementList)
|
||||
|
||||
local TweenManager = require "birb.classes.time"
|
||||
local ScreenSet = require "birb.modules.gui.screen.screenset"
|
||||
|
||||
local elementDataStruct = require "birb.structures.elementData"
|
||||
|
||||
|
||||
function GuiScreen:new(name)
|
||||
self:initWrapper()
|
||||
self.name = name
|
||||
|
@ -33,12 +33,29 @@ function GuiScreen:update(dt)
|
|||
end
|
||||
|
||||
function GuiScreen:show()
|
||||
self:showSimple()
|
||||
--TODO: show parent if we show directly the child
|
||||
if (self.set ~= nil) then
|
||||
self.set.owner:show()
|
||||
end
|
||||
end
|
||||
|
||||
function GuiScreen:showSimple()
|
||||
if (not self.isVisible) then
|
||||
self.isVisible = true
|
||||
if (self.transforms["show"] ~= nil) then
|
||||
self:playTransform("show")
|
||||
end
|
||||
|
||||
if (self.subscreens ~= nil) then
|
||||
self.subscreens:show()
|
||||
end
|
||||
|
||||
if (self.set ~= nil) then
|
||||
self.set:setCurrentScreen(self.name)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function GuiScreen:hide()
|
||||
|
@ -50,9 +67,14 @@ function GuiScreen:hide()
|
|||
self.isVisible = false
|
||||
end)
|
||||
end
|
||||
|
||||
if (self.subscreens ~= nil) then
|
||||
self.subscreens:hideCurrent()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function GuiScreen:addTransform(name, transform)
|
||||
self.transforms[name] = transform
|
||||
end
|
||||
|
@ -97,4 +119,25 @@ function GuiScreen:createElements()
|
|||
-- Empty function
|
||||
end
|
||||
|
||||
function GuiScreen:setParentSet(set)
|
||||
self.set = set
|
||||
end
|
||||
|
||||
function GuiScreen:addSubscreen(screen)
|
||||
self:initSubscreen()
|
||||
self.subscreens:add(screen)
|
||||
end
|
||||
|
||||
function GuiScreen:showSubscreen(screenname)
|
||||
if (self.subscreens ~= nil) then
|
||||
self.subscreens:show(screenname)
|
||||
end
|
||||
end
|
||||
|
||||
function GuiScreen:initSubscreen()
|
||||
if (self.subscreens == nil) then
|
||||
self.subscreens = ScreenSet(self)
|
||||
end
|
||||
end
|
||||
|
||||
return GuiScreen
|
69
sonic-radiance.love/birb/modules/gui/screen/screenset.lua
Normal file
69
sonic-radiance.love/birb/modules/gui/screen/screenset.lua
Normal file
|
@ -0,0 +1,69 @@
|
|||
-- screens/screenset :: a set of exclusive screens
|
||||
-- Useful to handle a complexe menu with several screens
|
||||
|
||||
--[[
|
||||
Copyright © 2021 Kazhnuz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
]]
|
||||
|
||||
local ScreenSet = Object:extend()
|
||||
|
||||
function ScreenSet:new(owner)
|
||||
self.set = {}
|
||||
self.defaultScreen = ""
|
||||
self.currentScreen = ""
|
||||
self.owner = owner
|
||||
end
|
||||
|
||||
function ScreenSet:show(screenName)
|
||||
local screenName = screenName
|
||||
if (screenName == nil) then
|
||||
if self.currentScreen == "" then
|
||||
screenName = self.defaultScreen
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
if screenName ~= "" then
|
||||
self.set[screenName]:showSimple()
|
||||
end
|
||||
end
|
||||
|
||||
function ScreenSet:setCurrentScreen(screenName)
|
||||
screenName = screenName or self.defaultScreen
|
||||
self:hideCurrent()
|
||||
self.currentScreen = screenName
|
||||
end
|
||||
|
||||
function ScreenSet:hideCurrent()
|
||||
if (self.currentScreen ~= "") then
|
||||
self.set[self.currentScreen]:hide()
|
||||
self.currentScreen = ""
|
||||
end
|
||||
end
|
||||
|
||||
function ScreenSet:add(screen, setAsDefault)
|
||||
self.set[screen.name] = screen
|
||||
if (setAsDefault == true or self.defaultScreen == "") then
|
||||
self.defaultScreen = screen.name
|
||||
end
|
||||
screen:setParentSet(self)
|
||||
end
|
||||
|
||||
return ScreenSet
|
Loading…
Reference in a new issue