Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- wO={}
- wO.global={}
- wO.global.clone=function(self) local cloneObj={} for i,v in pairs(self) do cloneObj[i]=v end return cloneObj end
- wO.global.isA=function(self, arg)
- if self.className==arg then
- return true
- elseif self.className~="base" then
- if wO.classes[self.extends]:isA(arg) then
- return true
- end
- else
- return false
- end
- end
- wO.global.className="base"
- wO.global.new=function() return {} end
- wO.classes={base=wO.global}
- --love only code, do NOT use if not using love2D
- wO.importAllClasses=
- function(...)
- local lfs=love.filesystem
- local folder=(arg[1] or "classes")
- for i,v in pairs(lfs.enumerate(folder)) do
- if lfs.isDirectory(folder.."/"..v) then
- wO.importAllClasses(folder.."/"..v)
- elseif lfs.isFile(folder.."/"..v) then
- require(folder.."/"..v)
- end
- end
- end
- function wO.importClass(name,...)
- local lfs=love.filesystem
- local folder=(arg[1] or "")
- for i,v in pairs(lfs.enumerate(folder)) do
- if lfs.isDirectory(folder.."/"..v) then
- wO.importAllClasses(name,folder.."/"..v)
- elseif lfs.isFile(folder.."/"..v) and v==name then
- require(folder.."/"..v)
- end
- end
- end
- --love only code ends here
- function wO.newClass(a, ...)
- arg={...}
- b=(arg[1] or {})
- b.className=a
- b.name=a.."Obj"
- local mt
- if #arg==2 then
- mt={__index=wO.classes[arg[2]]}
- b.extends=arg[2]
- else
- mt={__index=wO.classes["base"]}
- b.extends="base"
- end
- mt.__tostring=function(a) return "Class "..a.className end mt.__call=function(a,...) local arg={...} return wO.newObj(a.className,...) end
- if not b.mt then
- b.mt=mt
- else
- for i,v in pairs(mt) do
- table.insert(b.mt)
- end
- end
- setmetatable(b, b.mt)
- b.mt=nil
- if not b.omt then
- b.omt={__index=wO.classes[a],__tostring=function(a) return "Object "..o.name..", a "..o.className end}
- else
- if b.omt.__index then
- b.omt.__index=wO.classes[a]
- end
- if not b.omt.__tostring then
- b.omt.__tostring=function(a) return "Object "..o.name..", a "..o.className end
- end
- end
- wO.classes[a]=b
- end
- function wO.newObj(a,...)
- local o=(wO.classes[a].new(...))
- setmetatable(o, wO.classes[a].omt)
- return o
- end
- 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