Concord/fluid/eventManager.lua
Justin van der Leij 2d21fe97a5 Polishing
2018-01-30 12:45:35 +01:00

58 lines
1.2 KiB
Lua

local EventManager = {}
EventManager.__index = EventManager
function EventManager.new()
local eventManager = setmetatable({
listeners = {},
}, EventManager)
return eventManager
end
function EventManager:emit(name, ...)
local listeners = self.listeners[name]
if listeners then
for i = 1, #listeners do
local listener = listeners[i]
listener[name](listener, ...)
end
end
return self
end
function EventManager:register(name, listener)
local listeners = self.listeners[name]
if not listeners then
listeners = {count = 0}
self.listeners[name] = listeners
end
listeners.count = listeners.count + 1
listeners[listeners.count] = listener
return self
end
function EventManager:deregister(name, listener)
local listeners = self.listeners[name]
if listeners then
for index, other in ipairs(listeners) do
if listener == other then
table.remove(listeners, index)
listeners.count = listeners.count - 1
return
end
end
end
return self
end
return setmetatable(EventManager, {
__call = function(_, ...) return EventManager.new(...) end,
})