Mercurial > wow > raid-target-tactics
comparison class.lua @ 10:f93b554bb7cf
class implementation,
Icon class for Raid Target Icons
author | Jay Bird <a4blank@yahoo.com> |
---|---|
date | Sun, 28 Nov 2010 18:59:31 +0300 |
parents | |
children | d2cbfe498c4d |
comparison
equal
deleted
inserted
replaced
9:7201711b23e9 | 10:f93b554bb7cf |
---|---|
1 -- class.lua | |
2 -- taken from http://lua-users.org/wiki/SimpleLuaClasses | |
3 -- Compatible with Lua 5.1 (not 5.0). | |
4 function class(base, init) | |
5 local c = {} -- a new class instance | |
6 if not init and type(base) == 'function' then | |
7 init = base | |
8 base = nil | |
9 elseif type(base) == 'table' then | |
10 -- our new class is a shallow copy of the base class! | |
11 for i,v in pairs(base) do | |
12 c[i] = v | |
13 end | |
14 c._base = base | |
15 end | |
16 -- the class will be the metatable for all its objects, | |
17 -- and they will look up their methods in it. | |
18 c.__index = c | |
19 | |
20 -- expose a constructor which can be called by <classname>(<args>) | |
21 local mt = {} | |
22 mt.__call = function(class_tbl, ...) | |
23 local obj = {} | |
24 setmetatable(obj,c) | |
25 if class_tbl.init then | |
26 class_tbl.init(obj,...) | |
27 else | |
28 -- make sure that any stuff from the base class is initialized! | |
29 if base and base.init then | |
30 base.init(obj, ...) | |
31 end | |
32 end | |
33 return obj | |
34 end | |
35 c.init = init | |
36 c.is_a = function(self, klass) | |
37 local m = getmetatable(self) | |
38 while m do | |
39 if m == klass then return true end | |
40 m = m._base | |
41 end | |
42 return false | |
43 end | |
44 setmetatable(c, mt) | |
45 return c | |
46 end | |
47 |