StringSource

Class Creation Source

May 16th, 2020
137
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.                                                                                                                                                                     --[[
  2.   ClassModule API
  3.  
  4.             visit the post:  https://devforum.roblox.com/t/custom-class-module/578870
  5.  
  6.            . ClassModule()
  7.        
  8.              ClassModule(className,  searchIn?: Object) -> class
  9.  
  10.            
  11.  
  12.            . Class.new()
  13.        
  14.   Global Methods
  15.  
  16.            . Class:SetProperties(Properties: dictionary)
  17.        
  18.            . Class:DestroyAll()    
  19.          
  20.            . Class:GetObjects()
  21.                      
  22.  
  23.  
  24. ]]
  25.    
  26.  
  27.    
  28.  
  29.     -- Configure
  30.    
  31.     local Object_Container = game:GetService("ReplicatedStorage").Container -- where objects are stored
  32.     local DefaultParent = workspace --> if the parent parameter of object.new is not specified, the default parent
  33.     local StoreObjects = true
  34.  
  35.  
  36.  
  37.      
  38.     assert(DefaultParent ~= nil  and typeof(DefaultParent) ~= "boolean", "Invalid DefaultParent parameter")    
  39.     assert(Object_Container ~= nil  and typeof(DefaultParent) ~= "boolean", "Invalid DefaultParent parameter")    
  40.    
  41.  
  42.    
  43.     local class = {}
  44.     local objects = {}
  45.  
  46.  
  47.           function class:__call(ObjectName, ObjectSearchIn)
  48.                    if self[ObjectName] then return self[ObjectName] end
  49.  
  50.                    ObjectSearchIn = ObjectSearchIn or Object_Container
  51.                    local ToClone = ObjectSearchIn:FindFirstChild(ObjectName)
  52.                    assert(ToClone,
  53.                          "Error: Object ['"..tostring(ObjectName).."'] not found in ".. ObjectSearchIn.Name)
  54.                
  55.                    self[ObjectName] =  {ToClone}  
  56.                    local current = self[ObjectName]
  57.                    objects[ObjectName] = {}
  58.                    
  59.  
  60.             function current:SetProperties(dictionary)
  61.                
  62.  
  63.  
  64.             for property, value in pairs(dictionary) do    
  65.             local success, err = pcall(function()            
  66.                     self[1][property] = value
  67.             end)
  68.  
  69.                    if not success then warn("Error: "..err) end
  70.                 end  
  71.             end  
  72.  
  73.  
  74.            
  75.             function current:DestroyAll()
  76.                      assert(StoreObjects, "Error: StoreObjects must be set to true before calling DestroyAll")
  77.                      for _, obj in ipairs(objects[ObjectName]) do
  78.                             obj:Destroy()
  79.                          
  80.                      end
  81.                     objects[ObjectName] = {} -- clear references
  82.             end
  83.        
  84.             function current:GetObjects(void)
  85.             assert(not void, "\n Error: GetObjects() does not take any arguments!")
  86.  
  87.                    return objects[ObjectName]
  88.                  
  89.             end
  90.  
  91.  
  92.  
  93.             current.new = function(name, parent)  
  94.                        local clone = ToClone:Clone()
  95.                        clone.Parent = parent or DefaultParent
  96.                              clone.Name = name or ObjectName
  97.                              table.insert(objects[ObjectName], clone)
  98.                         return clone
  99.                      end
  100.          
  101.        
  102.              return self[ObjectName]
  103.            
  104.          end
  105.                
  106.  
  107.      
  108.  
  109.     return setmetatable(class, class)
RAW Paste Data