Simple Lua Entity Framework using tags. emma is a way to organize objects (as classes using middleclass) and perform operations on them without having to manually keep track of instantiated objects. This is intended for use in a game engine.
See main.lua for a full example that will run in löve. This framework should technically work in an lua environment, but I happen to like löve.
-- place wherever you need it
local emma = require 'path.to.emma'
(You may have to change/remove the require to 'middleclass' in emma.lua if you are using the library already and have another place/version.)
All entities that you create and wish to use with emma must extend the included 'Entity' class. e.g.: Person = class('Person', Entity)
Entity includes 3 functions that aren't required, but are helpful. start() -- called once on instantiation of the object update(dt) -- intended to be used with Emma.update draw() -- intended to be used with Emma.draw By default, these functions don't do anything.
middle class also enables the use of mixins. See their documentation (or main.lua) for example usage.
--[[
Adds a class to the Entity pool with the given tags. The class can be instantiated after this.
@param string class - class name that is subclassed from Entity
@param table tags - list of string tags that categorize this class (required)
--]]
Emma.addEntity(class, tags)
--[[
Instantiates and returns a new instance of the given class. The instance is cached and will be reused
after Emma.destroy is called
@param string class - class name that is subclassed from Entity and has been added to the Entity Pool
@param ... - passthrough variables to class constructor
@return instance
]]
Emma.instantiate(class, ...)
--[[
Returns a table with all instances with the given tags
@param table tags - list of string tags
@return table - list of active instances with those tags
--]]
Emma.findAll(tags)
--[[
Given an instance, sets it to inactive
@param instance - instance to destroy
--]]
function Emma.destroy(instance)
--[[
Calls update on the matching instances
@param number dt - delta time
@param table tags - list of string tags
--]]
function Emma.update(dt, tags)
--[[
Calls draw on the matching instances
@param table tags - list of string tags
--]]
function Emma.draw(tags)