Mercurial > wow > raid-target-tactics
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/class.lua Sun Nov 28 18:59:31 2010 +0300 @@ -0,0 +1,47 @@ +-- class.lua +-- taken from http://lua-users.org/wiki/SimpleLuaClasses +-- Compatible with Lua 5.1 (not 5.0). +function class(base, init) + local c = {} -- a new class instance + if not init and type(base) == 'function' then + init = base + base = nil + elseif type(base) == 'table' then + -- our new class is a shallow copy of the base class! + for i,v in pairs(base) do + c[i] = v + end + c._base = base + end + -- the class will be the metatable for all its objects, + -- and they will look up their methods in it. + c.__index = c + + -- expose a constructor which can be called by <classname>(<args>) + local mt = {} + mt.__call = function(class_tbl, ...) + local obj = {} + setmetatable(obj,c) + if class_tbl.init then + class_tbl.init(obj,...) + else + -- make sure that any stuff from the base class is initialized! + if base and base.init then + base.init(obj, ...) + end + end + return obj + end + c.init = init + c.is_a = function(self, klass) + local m = getmetatable(self) + while m do + if m == klass then return true end + m = m._base + end + return false + end + setmetatable(c, mt) + return c +end +