Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Stack = {
- Store = {}
- }
- local function Stack:getFromObj(getObj, Index)
- for i = 1, #self.Store do
- if self.Store[i] == getObj then
- if Index then
- return {i, self.Store[i]}
- else
- return self.Store[i]
- end
- end
- end
- end
- local function Stack:getFromName(getName, Index)
- local Indexed = {}
- for i = 1, #self.Store do
- if self.Store[i].Name == getName then
- if Index then
- Indexed[#Indexed+1] = {i, self.Store[i]}
- else
- Indexed[#Indexed+1] = self.Store[i]
- end
- end
- end
- return Indexed
- end
- local function Stack:getFromPos(getPos, Index)
- local Indexed = {}
- for i = 1, #self.Store do
- if (self.Store[i].CFrame.p - getPos).magnitude < (1/1e6) then
- if Index then
- Indexed[#Indexed+1] = {i, self.Store[i]}
- else
- Indexed[#Indexed+1] = self.Store[i]
- end
- end
- end
- return Indexed
- end
- local function Stack:getAll(Index)
- local Indexed = {}
- for i = 1, #self.Store do
- if Index then
- Indexed[#Indexed+1] = {i, self.Store[i]}
- else
- Indexed[#Indexed+1] = self.Store[i]
- end
- end
- return Indexed
- end
- local function Stack:Push(Obj)
- local index = #self.Store+1
- self.Store[index] = Obj
- local isRem = false
- Obj.Changed:connect(function(P)
- if P == "Parent" then
- if Obj.Parent == nil and isRem == false then
- isRem = true
- table.remove(self.Store, index)
- elseif Obj.Parent ~= nil and isRem == true then
- isRem = false
- index = #self.Store+1
- self.Store[index] = Obj
- end
- end
- end)
- end
- local function Stack:Pop(Obj)
- if Obj == nil and #self.Store > 0 then
- table.remove(self.Store, #self.Store)
- elseif type(Obj) == "string" then
- local Indexed = Stack:getFromName(Obj, true)
- for i = 1, #Indexed do
- table.remove(self.Store, Indexed[i][1])
- end
- elseif type(Obj) == "userdata" then
- local Indexed = Stack:getFromObj(Obj, true)
- if Indexed then
- table.remove(self.Store, Indexed[1])
- end
- end
- end
- local function Recursion(Obj)
- if Obj:IsA("BasePart") and Obj.ClassName ~= "Terrain" then
- Stack:Push(Obj)
- end
- local ObjChildren = Obj:GetChildren()
- if #ObjChildren > 0 then
- for _,v in pairs(ObjChildren) do
- Recursion(v)
- end
- end
- end
- workspace.DescendantAdded:connect(function(Obj)
- if Obj:IsA("BasePart") and Obj.ClassName ~= "Terrain" then
- Stack:Push(Obj)
- end
- end)
- Recursion(workspace)
- --EXAMPLE USAGE--
- print("---")
- print(unpack(Stack:getFromPos(Vector3.new(0, -50, 0))))
- print("---")
- print(unpack(Stack:getFromName("BasePlate")))
- print("---")
- print(Stack:getFromObj(workspace.BasePlate))
- print("---")
- Stack:Pop(workspace.BasePlate)
- print(unpack(Stack:getAll()))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement