View difference between Paste ID: v8mAHWM9 and xgsV7uxs
SHOW: | | - or go back to the newest paste.
1
wO={}
2
wO.global={}
3-
wO.global.clone=function(self) local cloneObj={} setmetatable(cloneObj, {__index=self}) return cloneObj end
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-
		b.mt={__index=wO.classes[arg[2]]}
25+
	for i,v in pairs(lfs.enumerate(folder)) do
26
		if lfs.isDirectory(folder.."/"..v) then
27
			wO.importAllClasses(folder.."/"..v)
28-
		b.mt={__index=wO.classes["base"]}
28+
		elseif lfs.isFile(folder.."/"..v) then
29
			require(folder.."/"..v)
30
		end
31-
	b.mt.__tostring=function(a) return "Class "..a end
31+
32
end
33
34
function wO.importClass(name,...)
35
	local lfs=love.filesystem
36-
function wO.newObj(a, ...)
36+
	local folder=(arg[1] or "")
37
	for i,v in pairs(lfs.enumerate(folder)) do
38-
	local o=(arg[1] or {})
38+
		if lfs.isDirectory(folder.."/"..v) then
39-
	local mt={__index=wO.classes[a]}
39+
			wO.importAllClasses(name,folder.."/"..v)
40-
	mt.__tostring=function(a) return "Object "..o.name..", a "..o.className end
40+
		elseif lfs.isFile(folder.."/"..v) and v==name then
41-
	setmetatable(o, mt)
41+
			require(folder.."/"..v)
42
		end
43-
end
43+
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.