Originally Posted by lyravega
Hm, some questions popped up in my mind. edit: got opportunity to check it for myself
-Can I unregister an event just by passing its identifier name? no
-More on that topic, lets say I've registered a few different events under the same identifier. Can I unregister them all at once by just giving that identifier name? no
-Would it throw an error if it tries to unregister something that isn't registered? no
|
I believe that event manager works the same way as callback object. It uses registry with structure similar to:
Lua Code:
eventRegistry = {
[event1] = {
[identifier1] = callback1,
[identifier2] = callback2,
},
[event2] = {
[identifier1] = callback3,
},
}
- you need to specify both event and identifier if you want to unregister event
- there is no function that can unregister more events at once, but you can write your own
- there is no error and afaik no return code if you try to unregister something that wasn't registered
Very simple example how it can look like:
Lua Code:
local EventManager = ZO_Object:Subclass()
function EventManager:New()
local o = ZO_Object.New(self)
o.registry = {}
return o
end
function EventManager:RegisterForEvent(identifier, event, callback)
self.registry[event] = self.registry[event] or {}
self.registry[event][identifier] = callback
end
function EventManager:UnregisterForEvent(identifier, event)
if self.registry[event] then
self.registry[event][identifier] = nil
end
end
function EventManager:FireEvent(event, ...)
if self.registry[event] then
for identifier, callback in pairs(self.registry[event]) do
callback(event, ...)
end
end
end
MyEventManager = EventManager:New()