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)
|
GuiScreen:implement(ElementList)
|
||||||
|
|
||||||
local TweenManager = require "birb.classes.time"
|
local TweenManager = require "birb.classes.time"
|
||||||
|
local ScreenSet = require "birb.modules.gui.screen.screenset"
|
||||||
|
|
||||||
local elementDataStruct = require "birb.structures.elementData"
|
local elementDataStruct = require "birb.structures.elementData"
|
||||||
|
|
||||||
|
|
||||||
function GuiScreen:new(name)
|
function GuiScreen:new(name)
|
||||||
self:initWrapper()
|
self:initWrapper()
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -33,12 +33,29 @@ function GuiScreen:update(dt)
|
||||||
end
|
end
|
||||||
|
|
||||||
function GuiScreen:show()
|
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
|
if (not self.isVisible) then
|
||||||
self.isVisible = true
|
self.isVisible = true
|
||||||
if (self.transforms["show"] ~= nil) then
|
if (self.transforms["show"] ~= nil) then
|
||||||
self:playTransform("show")
|
self:playTransform("show")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if (self.subscreens ~= nil) then
|
||||||
|
self.subscreens:show()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if (self.set ~= nil) then
|
||||||
|
self.set:setCurrentScreen(self.name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function GuiScreen:hide()
|
function GuiScreen:hide()
|
||||||
|
@ -50,7 +67,12 @@ function GuiScreen:hide()
|
||||||
self.isVisible = false
|
self.isVisible = false
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if (self.subscreens ~= nil) then
|
||||||
|
self.subscreens:hideCurrent()
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function GuiScreen:addTransform(name, transform)
|
function GuiScreen:addTransform(name, transform)
|
||||||
|
@ -97,4 +119,25 @@ function GuiScreen:createElements()
|
||||||
-- Empty function
|
-- Empty function
|
||||||
end
|
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
|
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