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 types = require(script.Parent.Types)
|
||||||
|
|
||||||
local window: types.WindowClass = {} :: types.WindowClass
|
local window: types.WindowClass = {} :: types.WindowClass
|
||||||
|
@ -13,20 +15,45 @@ function module.new(name: string): types.Window
|
||||||
Stored = {},
|
Stored = {},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Events = {
|
||||||
|
PageOpened = signal.new(),
|
||||||
|
PageClosed = signal.new(),
|
||||||
|
},
|
||||||
|
|
||||||
_ = {},
|
_ = {},
|
||||||
}, window)
|
}, window)
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
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()
|
function window:BuildPages()
|
||||||
for _, page: types.Page in self.Pages.Stored do
|
for _, page: types.Page in self.Pages.Stored do
|
||||||
page:Build(self)
|
page:Build(self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function window:AddPage(page: types.Page)
|
function window:AddPage(page: types.Page): {AsOpened: () -> ()}
|
||||||
self.Pages.Stored[page.Name] = page
|
self.Pages.Stored[page.Name] = page
|
||||||
|
|
||||||
|
return {
|
||||||
|
AsOpened = function()
|
||||||
|
addPageTo(self, page)
|
||||||
|
end
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
function window:GetPage(page: string): types.Page
|
function window:GetPage(page: string): types.Page
|
||||||
|
@ -46,17 +73,14 @@ function window:OpenPage(page: string, command: "Weighted" | "Forced"?)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pageModule:Build(self)
|
addPageTo(self, pageModule)
|
||||||
pageModule:Open()
|
|
||||||
self.Pages.Open[page] = pageModule
|
|
||||||
|
|
||||||
self._.LastOpenedPageName = self._.RecentlyOpenedPageName or page
|
self.Events.PageOpened:Fire(pageModule)
|
||||||
self._.RecentlyOpenedPageName = page
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function window:OpenLastPage()
|
function window:OpenLastPage()
|
||||||
self:OpenPage(self._.LastOpenedPageName)
|
self:OpenPage(self._.LastOpenedPageName, "Forced")
|
||||||
end
|
end
|
||||||
|
|
||||||
function window:ClosePage(page: string)
|
function window:ClosePage(page: string)
|
||||||
|
@ -65,6 +89,8 @@ function window:ClosePage(page: string)
|
||||||
pageModule:Close()
|
pageModule:Close()
|
||||||
pageModule:Clean()
|
pageModule:Clean()
|
||||||
self.Pages.Open[page] = nil
|
self.Pages.Open[page] = nil
|
||||||
|
|
||||||
|
self.Events.PageClosed:Fire(pageModule)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -147,7 +173,7 @@ end
|
||||||
|
|
||||||
function window:Remove()
|
function window:Remove()
|
||||||
self:Clean()
|
self:Clean()
|
||||||
self:RemovePages()
|
self:RemoveAllPages()
|
||||||
|
|
||||||
if self.ScreenGui then
|
if self.ScreenGui then
|
||||||
self.ScreenGui:Destroy()
|
self.ScreenGui:Destroy()
|
||||||
|
|
Loading…
Reference in a new issue