Advertisement
LuaWeaver

wOOP 0.3

Nov 8th, 2012
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. wO={}
  2. wO.global={}
  3. wO.global.clone=function(self) local cloneObj={} for i,v in pairs(self) do cloneObj[i]=v end return cloneObj end
  4. wO.global.isA=function(self, arg)
  5.     if self.className==arg then
  6.         return true
  7.     elseif self.className~="base" then
  8.         if wO.classes[self.extends]:isA(arg) then
  9.             return true
  10.         end
  11.     else
  12.         return false
  13.     end
  14. end
  15. wO.global.className="base"
  16. wO.global.new=function() return {} end
  17.  
  18. wO.classes={base=wO.global}
  19.  
  20. --love only code, do NOT use if not using love2D
  21. wO.importAllClasses=
  22. function(...)
  23.     local lfs=love.filesystem
  24.     local folder=(arg[1] or "classes")
  25.     for i,v in pairs(lfs.enumerate(folder)) do
  26.         if lfs.isDirectory(folder.."/"..v) then
  27.             wO.importAllClasses(folder.."/"..v)
  28.         elseif lfs.isFile(folder.."/"..v) then
  29.             require(folder.."/"..v)
  30.         end
  31.     end
  32. end
  33.  
  34. function wO.importClass(name,...)
  35.     local lfs=love.filesystem
  36.     local folder=(arg[1] or "")
  37.     for i,v in pairs(lfs.enumerate(folder)) do
  38.         if lfs.isDirectory(folder.."/"..v) then
  39.             wO.importAllClasses(name,folder.."/"..v)
  40.         elseif lfs.isFile(folder.."/"..v) and v==name then
  41.             require(folder.."/"..v)
  42.         end
  43.     end
  44. end
  45. --love only code ends here
  46.  
  47. function wO.newClass(a, ...)
  48.     arg={...}
  49.     b=(arg[1] or {})
  50.     b.className=a
  51.     b.name=a.."Obj"
  52.     local mt
  53.     if #arg==2 then
  54.         mt={__index=wO.classes[arg[2]]}
  55.         b.extends=arg[2]
  56.     else
  57.         mt={__index=wO.classes["base"]}
  58.         b.extends="base"
  59.     end
  60.     mt.__tostring=function(a) return "Class "..a.className end mt.__call=function(a,...) local arg={...} return wO.newObj(a.className,...) end
  61.     if not b.mt then
  62.         b.mt=mt
  63.     else
  64.         for i,v in pairs(mt) do
  65.             table.insert(b.mt)
  66.         end
  67.     end
  68.     setmetatable(b, b.mt)
  69.     b.mt=nil
  70.     if not b.omt then
  71.         b.omt={__index=wO.classes[a],__tostring=function(a) return "Object "..o.name..", a "..o.className end}
  72.     else
  73.         if b.omt.__index then
  74.             b.omt.__index=wO.classes[a]
  75.         end
  76.         if not b.omt.__tostring then
  77.             b.omt.__tostring=function(a) return "Object "..o.name..", a "..o.className end
  78.         end
  79.     end
  80.     wO.classes[a]=b
  81. end
  82.  
  83. function wO.newObj(a,...)
  84.     local o=(wO.classes[a].new(...))
  85.     setmetatable(o, wO.classes[a].omt)
  86.     return o
  87. end
  88.  
  89. setmetatable(getfenv(0),{__index=function(_,a) return (a=="newClass" and wO.newClass or (a=="newObj" and wO.newObj or (wO.classes[a] or nil))) end}) --Ugly piece of code.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement