Create ObjectList.luau
This commit is contained in:
		
							parent
							
								
									43f697915d
								
							
						
					
					
						commit
						207dcc009d
					
				
					 1 changed files with 126 additions and 0 deletions
				
			
		
							
								
								
									
										126
									
								
								src/Shared/Modules/Managers/UIManager/ObjectList.luau
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								src/Shared/Modules/Managers/UIManager/ObjectList.luau
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,126 @@
 | 
				
			||||||
 | 
					local types = require(script.Parent.Types)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local module = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local list = {}
 | 
				
			||||||
 | 
					list["__index"] = list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function module.new<T, P>(): types.ObjectList<T, P>
 | 
				
			||||||
 | 
					    local self = setmetatable({
 | 
				
			||||||
 | 
					        Parent = nil,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Opened = {},
 | 
				
			||||||
 | 
					        Built = {},
 | 
				
			||||||
 | 
					        Stored = {},
 | 
				
			||||||
 | 
					    }, list)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return self
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:Add(object: types.ListableObject)
 | 
				
			||||||
 | 
					    self.Stored[object.Name] = object
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:Get(name: string): types.ListableObject?
 | 
				
			||||||
 | 
					    return self.Stored[name]
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:Remove(name: string)
 | 
				
			||||||
 | 
					    self:Clean(name)
 | 
				
			||||||
 | 
					    self.Stored[name] = nil
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:RemoveAll()
 | 
				
			||||||
 | 
					    self:CleanAll()
 | 
				
			||||||
 | 
					    self.Stored = {}
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:Open(name: string, mode: ("Weighted" | "Forced")?)
 | 
				
			||||||
 | 
					    local objectToBuild = self.Built[name]
 | 
				
			||||||
 | 
					    if objectToBuild and objectToBuild:StatusIs("Built") then
 | 
				
			||||||
 | 
					        if mode and mode == "Weighted" and objectToBuild.Weight then
 | 
				
			||||||
 | 
					            for openName: string, status: boolean in self.Opened do
 | 
				
			||||||
 | 
					                local openObject = self.Built[openName]
 | 
				
			||||||
 | 
					                if status == true and openObject.Weight and openObject.Weight < objectToBuild.Weight then
 | 
				
			||||||
 | 
					                    self:Close(openName)
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					        elseif mode == "Forced" then
 | 
				
			||||||
 | 
					            self:CloseAll()
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        objectToBuild:Open()
 | 
				
			||||||
 | 
					        self.Opened[name] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.LastOpenedName = self.RecentlyOpenedName or name
 | 
				
			||||||
 | 
					        self.RecentlyOpenedName = name
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:OpenAll()
 | 
				
			||||||
 | 
					    for name: string, _: types.ListableObject in self.Stored do
 | 
				
			||||||
 | 
					        self:Open(name)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:OpenPrevious()
 | 
				
			||||||
 | 
					    self:Open(self.LastOpenedName, "Forced")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:Close(name: string)
 | 
				
			||||||
 | 
					    if self.Built[name] then
 | 
				
			||||||
 | 
					        self.Built[name]:Close()
 | 
				
			||||||
 | 
					        self.Opened[name] = false
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:CloseAll()
 | 
				
			||||||
 | 
					    for name: string, status: boolean in self.Opened do
 | 
				
			||||||
 | 
					        if status == true then
 | 
				
			||||||
 | 
					            self:Close(name)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    self.Opened = {}
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:Build(name: string)
 | 
				
			||||||
 | 
					    local object = self.Stored[name]
 | 
				
			||||||
 | 
					    if object and not object:StatusIs("Built") then
 | 
				
			||||||
 | 
					        object:Build(self.Parent)
 | 
				
			||||||
 | 
					        self.Built[name] = object
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:BuildAll()
 | 
				
			||||||
 | 
					    for _, object in self.Stored do
 | 
				
			||||||
 | 
					        if object:StatusIs("Built") then 
 | 
				
			||||||
 | 
					            continue 
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        task.spawn(function()
 | 
				
			||||||
 | 
					            object:Build(self.Parent)
 | 
				
			||||||
 | 
					            self.Built[object.Name] = object
 | 
				
			||||||
 | 
					        end)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:Clean(name: string)
 | 
				
			||||||
 | 
					    local object = self.Built[name]
 | 
				
			||||||
 | 
					    if object then
 | 
				
			||||||
 | 
					        if object["Clean"] then
 | 
				
			||||||
 | 
					            self.Built[name]:Clean()
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.Built[name] = nil
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function list:CleanAll()
 | 
				
			||||||
 | 
					    for _, object in self.Stored do
 | 
				
			||||||
 | 
					        self:Clean(object.Name)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    self.Built = {}
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return module
 | 
				
			||||||
		Loading…
	
		Reference in a new issue