Advertisement
Vaeb

Part Stack

Jul 8th, 2016
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.64 KB | None | 0 0
  1. local Stack = {
  2.     Store = {}
  3. }
  4.  
  5. local function Stack:getFromObj(getObj, Index)
  6.     for i = 1, #self.Store do
  7.         if self.Store[i] == getObj then
  8.             if Index then
  9.                 return {i, self.Store[i]}
  10.             else
  11.                 return self.Store[i]
  12.             end
  13.         end
  14.     end
  15. end
  16.  
  17. local function Stack:getFromName(getName, Index)
  18.     local Indexed = {}
  19.  
  20.     for i = 1, #self.Store do
  21.         if self.Store[i].Name == getName then
  22.             if Index then
  23.                 Indexed[#Indexed+1] = {i, self.Store[i]}
  24.             else
  25.                 Indexed[#Indexed+1] = self.Store[i]
  26.             end
  27.         end
  28.     end
  29.  
  30.     return Indexed
  31. end
  32.  
  33. local function Stack:getFromPos(getPos, Index)
  34.     local Indexed = {}
  35.  
  36.     for i = 1, #self.Store do
  37.         if (self.Store[i].CFrame.p - getPos).magnitude < (1/1e6) then
  38.             if Index then
  39.                 Indexed[#Indexed+1] = {i, self.Store[i]}
  40.             else
  41.                 Indexed[#Indexed+1] = self.Store[i]
  42.             end
  43.         end
  44.     end
  45.  
  46.     return Indexed
  47. end
  48.  
  49. local function Stack:getAll(Index)
  50.     local Indexed = {}
  51.  
  52.     for i = 1, #self.Store do
  53.         if Index then
  54.             Indexed[#Indexed+1] = {i, self.Store[i]}
  55.         else
  56.             Indexed[#Indexed+1] = self.Store[i]
  57.         end
  58.     end
  59.  
  60.     return Indexed
  61. end
  62.  
  63. local function Stack:Push(Obj)
  64.     local index = #self.Store+1
  65.     self.Store[index] = Obj
  66.  
  67.     local isRem = false
  68.  
  69.     Obj.Changed:connect(function(P)
  70.         if P == "Parent" then
  71.             if Obj.Parent == nil and isRem == false then
  72.                 isRem = true
  73.                 table.remove(self.Store, index)
  74.             elseif Obj.Parent ~= nil and isRem == true then
  75.                 isRem = false
  76.                 index = #self.Store+1
  77.                 self.Store[index] = Obj
  78.             end
  79.         end
  80.     end)
  81. end
  82.  
  83. local function Stack:Pop(Obj)
  84.     if Obj == nil and #self.Store > 0 then
  85.         table.remove(self.Store, #self.Store)
  86.     elseif type(Obj) == "string" then
  87.         local Indexed = Stack:getFromName(Obj, true)
  88.         for i = 1, #Indexed do
  89.             table.remove(self.Store, Indexed[i][1])
  90.         end
  91.     elseif type(Obj) == "userdata" then
  92.         local Indexed = Stack:getFromObj(Obj, true)
  93.         if Indexed then
  94.             table.remove(self.Store, Indexed[1])
  95.         end
  96.     end
  97. end
  98.  
  99. local function Recursion(Obj)
  100.     if Obj:IsA("BasePart") and Obj.ClassName ~= "Terrain" then
  101.         Stack:Push(Obj)
  102.     end
  103.     local ObjChildren = Obj:GetChildren()
  104.     if #ObjChildren > 0 then
  105.         for _,v in pairs(ObjChildren) do
  106.             Recursion(v)
  107.         end
  108.     end
  109. end
  110.  
  111. workspace.DescendantAdded:connect(function(Obj)
  112.     if Obj:IsA("BasePart") and Obj.ClassName ~= "Terrain" then
  113.         Stack:Push(Obj)
  114.     end
  115. end)
  116.  
  117. Recursion(workspace)
  118.  
  119. --EXAMPLE USAGE--
  120.  
  121. print("---")
  122. print(unpack(Stack:getFromPos(Vector3.new(0, -50, 0))))
  123. print("---")
  124. print(unpack(Stack:getFromName("BasePlate")))
  125. print("---")
  126. print(Stack:getFromObj(workspace.BasePlate))
  127. print("---")
  128. Stack:Pop(workspace.BasePlate)
  129. print(unpack(Stack:getAll()))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement