40 lines
976 B
Lua
40 lines
976 B
Lua
--[[
|
|
-- 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
|
|
--]]
|
|
|
|
local mt_class = {}
|
|
|
|
function mt_class:extends(parent)
|
|
self.super = parent
|
|
setmetatable(mt_class, {__index = parent})
|
|
parent.__members__ = parent.__members__ or {}
|
|
return self
|
|
end
|
|
|
|
local function define(class, members)
|
|
class.__members__ = class.__members__ or {}
|
|
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, {__index = mt_class, __call = define})
|
|
end
|