Allowed for systems to atach multiple times under different callbacks

This commit is contained in:
Justin van der Leij 2018-02-20 23:43:48 +01:00
parent 100d6320c7
commit fae3c4a427

View file

@ -15,14 +15,14 @@ function EventManager:emit(name, ...)
if listeners then if listeners then
for i = 1, #listeners do for i = 1, #listeners do
local listener = listeners[i] local listener = listeners[i]
listener[name](listener, ...) listener[1][listener[2]](listener[1], ...)
end end
end end
return self return self
end end
function EventManager:register(name, listener) function EventManager:register(name, listener, callback)
local listeners = self.listeners[name] local listeners = self.listeners[name]
if not listeners then if not listeners then
@ -31,17 +31,17 @@ function EventManager:register(name, listener)
end end
listeners.count = listeners.count + 1 listeners.count = listeners.count + 1
listeners[listeners.count] = listener listeners[listeners.count] = {listener, callback or name}
return self return self
end end
function EventManager:deregister(name, listener) function EventManager:deregister(name, listener, callback)
local listeners = self.listeners[name] local listeners = self.listeners[name]
if listeners then if listeners then
for index, other in ipairs(listeners) do for index, other in ipairs(listeners) do
if listener == other then if listener[1] == other and listener[2] == (callback or name) then
table.remove(listeners, index) table.remove(listeners, index)
listeners.count = listeners.count - 1 listeners.count = listeners.count - 1