--[[ -- 32 lines of goodness. -- Links to original source of code and usage documentation: -- http://love2d.org/wiki/32_lines_of_goodness -- http://love2d.org/forums/viewtopic.php?f=5&t=3344 -- Patches by Robin and FSX (which bring it to 41 lines) --]] local mt_class = {__index = mt_class, __call = define} function mt_class:extends(parent) self.super = parent setmetatable(self, {__index = parent, __call=define}) parent.__members__ = parent.__members__ or {} return self end local function define(class, members) class.__members__ = class.__members__ or {} local function copyMembersDown(origin,cls) if cls.super then for k,v in pairs(cls.super.__members__) do origin[k] = v end return copyMembersDown(origin, cls.super) end end copyMembersDown(class.__members__,class) for k, v in pairs(members) do class.__members__[k] = v end function class:new(...) local newvalue = {} for k, v in pairs(class.__members__) do newvalue[k] = v end setmetatable(newvalue, {__index = class}) if newvalue.__init then newvalue:__init(...) end return newvalue end end function class(name) local newclass = {} _G[name] = newclass return setmetatable(newclass, mt_class) end