Update Window to Modern V2
This commit is contained in:
parent
b59f501180
commit
9e7c924c79
1 changed files with 21 additions and 108 deletions
|
@ -1,8 +1,9 @@
|
||||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||||
|
local objectList = require(script.Parent.ObjectList)
|
||||||
local signal = require(ReplicatedStorage.Modules.Utility.Signal)
|
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
|
||||||
window["__index"] = window
|
window["__index"] = window
|
||||||
|
|
||||||
local module = {}
|
local module = {}
|
||||||
|
@ -10,10 +11,8 @@ local module = {}
|
||||||
function module.new(name: string): types.Window
|
function module.new(name: string): types.Window
|
||||||
local self = setmetatable({
|
local self = setmetatable({
|
||||||
Name= name,
|
Name= name,
|
||||||
Pages = {
|
|
||||||
Open = {},
|
Pages = objectList.new(),
|
||||||
Stored = {},
|
|
||||||
},
|
|
||||||
|
|
||||||
Events = {
|
Events = {
|
||||||
PageOpened = signal.new(),
|
PageOpened = signal.new(),
|
||||||
|
@ -23,108 +22,11 @@ function module.new(name: string): types.Window
|
||||||
_ = {},
|
_ = {},
|
||||||
}, window)
|
}, window)
|
||||||
|
|
||||||
|
self.Pages.Parent = self
|
||||||
|
|
||||||
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()
|
|
||||||
for _, page: types.Page in self.Pages.Stored do
|
|
||||||
page:Build(self)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
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
|
|
||||||
return self.Pages.Stored[page]
|
|
||||||
end
|
|
||||||
|
|
||||||
function window:OpenPage(page: string, command: "Weighted" | "Forced"?)
|
|
||||||
local pageModule: types.Page = self.Pages.Stored[page]
|
|
||||||
if pageModule then
|
|
||||||
if command then
|
|
||||||
if command:upper() == "WEIGHTED" then
|
|
||||||
self:CloseAllPages(function(openPage: types.Page)
|
|
||||||
return openPage.Weight < pageModule.Weight
|
|
||||||
end)
|
|
||||||
elseif command:upper() == "FORCED" then
|
|
||||||
self:CloseAllPages()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
addPageTo(self, pageModule)
|
|
||||||
|
|
||||||
self.Events.PageOpened:Fire(pageModule)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function window:OpenLastPage()
|
|
||||||
self:OpenPage(self._.LastOpenedPageName, "Forced")
|
|
||||||
end
|
|
||||||
|
|
||||||
function window:ClosePage(page: string)
|
|
||||||
local pageModule: types.Page = self.Pages.Open[page]
|
|
||||||
if pageModule then
|
|
||||||
pageModule:Close()
|
|
||||||
pageModule:Clean()
|
|
||||||
self.Pages.Open[page] = nil
|
|
||||||
|
|
||||||
self.Events.PageClosed:Fire(pageModule)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function window:CloseAllPages(middleware: (types.Page) -> (boolean)?)
|
|
||||||
for _, page: types.Page in self.Pages.Open do
|
|
||||||
if not middleware or not middleware(page) then
|
|
||||||
continue
|
|
||||||
end
|
|
||||||
|
|
||||||
page:Close()
|
|
||||||
page:Clean()
|
|
||||||
|
|
||||||
self.Pages.Open[page.Name] = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function window:CleanPages()
|
|
||||||
for _, page: types.Page in self.Pages.Open do
|
|
||||||
page:Close()
|
|
||||||
page:Clean()
|
|
||||||
end
|
|
||||||
|
|
||||||
self.Pages.Open = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
function window:RemoveAllPages()
|
|
||||||
for _, page: types.Page in self.Pages.Open do
|
|
||||||
page:Remove()
|
|
||||||
end
|
|
||||||
|
|
||||||
self.Pages.Open = {}
|
|
||||||
self.Pages.Stored = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
function window:OnBuild(callback: (self: types.Window) -> ())
|
function window:OnBuild(callback: (self: types.Window) -> ())
|
||||||
self._.OnBuild = callback
|
self._.OnBuild = callback
|
||||||
end
|
end
|
||||||
|
@ -140,11 +42,21 @@ end
|
||||||
function window:Build(manager: types.Manager)
|
function window:Build(manager: types.Manager)
|
||||||
self:Clean()
|
self:Clean()
|
||||||
|
|
||||||
self.Manager = manager
|
self.Parent = manager
|
||||||
|
|
||||||
if self._.OnBuild then
|
if self._.OnBuild then
|
||||||
self._.OnBuild(self)
|
self._.OnBuild(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
self._.Status = "Built"
|
||||||
|
end
|
||||||
|
|
||||||
|
function window:GetStatus(): "Built" | "Stored"
|
||||||
|
return self._.Status
|
||||||
|
end
|
||||||
|
|
||||||
|
function window:StatusIs(status: "Built" | "Stored"): boolean
|
||||||
|
return status == self._.Status
|
||||||
end
|
end
|
||||||
|
|
||||||
function window:Open()
|
function window:Open()
|
||||||
|
@ -168,16 +80,17 @@ function window:Close()
|
||||||
end
|
end
|
||||||
|
|
||||||
function window:Clean()
|
function window:Clean()
|
||||||
self:CleanPages()
|
self.Pages:CleanAll()
|
||||||
|
|
||||||
|
self._.Status = "Stored"
|
||||||
end
|
end
|
||||||
|
|
||||||
function window:Remove()
|
function window:Remove()
|
||||||
self:Clean()
|
self:Clean()
|
||||||
self:RemoveAllPages()
|
|
||||||
|
|
||||||
if self.ScreenGui then
|
if self.ScreenGui then
|
||||||
self.ScreenGui:Destroy()
|
self.ScreenGui:Destroy()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return module
|
return module
|
||||||
|
|
Loading…
Reference in a new issue