From bae25ad3b1159e26a1cb3a8aff86e18b6bc5ca28 Mon Sep 17 00:00:00 2001 From: squeek Date: Mon, 23 Mar 2015 04:10:08 -0700 Subject: [PATCH] Add standard Lua Class implementation --- maps/includes/base.lua | 2 +- maps/includes/util/class.lua | 46 ++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 maps/includes/util/class.lua diff --git a/maps/includes/base.lua b/maps/includes/base.lua index d77275d..54dd4ab 100644 --- a/maps/includes/base.lua +++ b/maps/includes/base.lua @@ -6,8 +6,8 @@ -- This file is loaded automatically whenever a map is loaded. -- Do not change this file. ----------------------------------------------------------------------------- -local _G = getfenv(0) +Class = require "util.class" ----------------------------------------------------------------------------- -- defines diff --git a/maps/includes/util/class.lua b/maps/includes/util/class.lua new file mode 100644 index 0000000..9dd7c60 --- /dev/null +++ b/maps/includes/util/class.lua @@ -0,0 +1,46 @@ +-- from http://lua-users.org/wiki/SimpleLuaClasses + +function Class(base, _ctor) + local c = {} -- a new class instance + if not _ctor and type(base) == 'function' then + _ctor = 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 () + local mt = {} + + mt.__call = function(class_tbl, ...) + local obj = {} + setmetatable(obj,c) + + if c._ctor then + c._ctor(obj,...) + end + return obj + end + + c._ctor = _ctor + 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 + +return Class \ No newline at end of file