function clone(a,tab)
if (a ~= tab) then
for i,v in pairs(tab) do if type(v) == 'table' then
a[i] = {} clone(a[i],v) setmetatable(a[i],getmetatable(v))
else a[i] = v
end
end
end
end
local Skeletons = {}
local __Classes = {}
local Classes = {}
local ClassFns = {}
setmetatable(Classes,{__index = ClassFns})
ClassFns.CreateClass = function(Name,build,__init)
__Classes[Name] = {}
Classes[Name] = {}
Skeletons[Name] = {SKELETON = build,INIT = __init,Name = Name}
Skeletons[__Classes[Name]] = Skeletons[Name]
Skeletons[Classes[Name]] = Skeletons[Name]
setmetatable(Classes[Name],{__index = function(_,b)
if __Classes[Name][b] then return __Classes[Name][b] end
return ClassFns[b]
end
,__newindex = function(a,b,c) __Classes[Name][b] = c end})
return Classes[Name]
end
function ClassFns:NewInstance(ID,...)
local new = {Destroy = function() __Classes[Skeletons[self].Name][ID] = nil end}
clone(new,Skeletons[self].SKELETON)
Skeletons[self].INIT(new,...)
setmetatable(new,{__index = self})
self[ID] = new
return self[ID]
end
function ClassFns:Extend(From) -- trash working
clone(Skeletons[self].SKELETON,Skeletons[From].SKELETON)
end
function ClassFns:Delete() -- trash working
local n = Skeletons[self].Name
Classes[n] = nil
__Classes[n] = nil
Skeletons[n] = nil
Skeletons[self] = nil
end
local Thing = Classes.CreateClass("THING!",{AddValue = function(self,Key,Value) self[Key] = Value end},function() end)
local Class = Classes.CreateClass("Objects",{Name = "Object",Description = "The Object"},function(self,N,D) self.Name = D self.Description = D end)
Class:Extend(Thing)
function Class:DoSmth(X)
self[X] = true
end
local Obj = Class:NewInstance("OBJECT1","Object X","Object X - Object")
Obj:AddValue("String","STR")
Classes.Objects:NewInstance("OBJ","A","B")
Obj:DoSmth("asd")
--Im Not Sure If TS Works Well
--When I Tried To Add Some Changes I Got Confused Of My ShitCode And Im Not Sure If I Didnt Break Anything
--Delete n Destroy R The Shittiest Functions In Ts "Code"