Page Event signals
This commit is contained in:
parent
880d023c8e
commit
477c16f4bc
1 changed files with 34 additions and 8 deletions
|
@ -1,3 +1,5 @@
|
|||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
local signal = require(ReplicatedStorage.Modules.Utility.Signal)
|
||||
local types = require(script.Parent.Types)
|
||||
|
||||
local window: types.WindowClass = {} :: types.WindowClass
|
||||
|
@ -13,20 +15,45 @@ function module.new(name: string): types.Window
|
|||
Stored = {},
|
||||
},
|
||||
|
||||
Events = {
|
||||
PageOpened = signal.new(),
|
||||
PageClosed = signal.new(),
|
||||
},
|
||||
|
||||
_ = {},
|
||||
}, window)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--[[ Pages ]]
|
||||
|
||||
local function addPageTo(self: types.Window, page: types.Page): ()
|
||||
local pageName = page.Name
|
||||
page:Build(self)
|
||||
page:Open()
|
||||
self.Pages.Open[pageName] = page
|
||||
|
||||
self._.LastOpenedPageName = self._.RecentlyOpenedPageName or pageName
|
||||
self._.RecentlyOpenedPageName = pageName
|
||||
end
|
||||
|
||||
--[[ Page Methods ]]
|
||||
|
||||
function window:BuildPages()
|
||||
for _, page: types.Page in self.Pages.Stored do
|
||||
page:Build(self)
|
||||
end
|
||||
end
|
||||
|
||||
function window:AddPage(page: types.Page)
|
||||
function window:AddPage(page: types.Page): {AsOpened: () -> ()}
|
||||
self.Pages.Stored[page.Name] = page
|
||||
|
||||
return {
|
||||
AsOpened = function()
|
||||
addPageTo(self, page)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
function window:GetPage(page: string): types.Page
|
||||
|
@ -46,17 +73,14 @@ function window:OpenPage(page: string, command: "Weighted" | "Forced"?)
|
|||
end
|
||||
end
|
||||
|
||||
pageModule:Build(self)
|
||||
pageModule:Open()
|
||||
self.Pages.Open[page] = pageModule
|
||||
addPageTo(self, pageModule)
|
||||
|
||||
self._.LastOpenedPageName = self._.RecentlyOpenedPageName or page
|
||||
self._.RecentlyOpenedPageName = page
|
||||
self.Events.PageOpened:Fire(pageModule)
|
||||
end
|
||||
end
|
||||
|
||||
function window:OpenLastPage()
|
||||
self:OpenPage(self._.LastOpenedPageName)
|
||||
self:OpenPage(self._.LastOpenedPageName, "Forced")
|
||||
end
|
||||
|
||||
function window:ClosePage(page: string)
|
||||
|
@ -65,6 +89,8 @@ function window:ClosePage(page: string)
|
|||
pageModule:Close()
|
||||
pageModule:Clean()
|
||||
self.Pages.Open[page] = nil
|
||||
|
||||
self.Events.PageClosed:Fire(pageModule)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -147,7 +173,7 @@ end
|
|||
|
||||
function window:Remove()
|
||||
self:Clean()
|
||||
self:RemovePages()
|
||||
self:RemoveAllPages()
|
||||
|
||||
if self.ScreenGui then
|
||||
self.ScreenGui:Destroy()
|
||||
|
|
Loading…
Reference in a new issue