View Single Post
05/27/14, 04:35 AM   #20
Garkin
 
Garkin's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2014
Posts: 832
Originally Posted by lyravega View Post
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:
  1. eventRegistry = {
  2.    [event1] = {
  3.       [identifier1] = callback1,
  4.       [identifier2] = callback2,
  5.    },
  6.    [event2] = {
  7.       [identifier1] = callback3,
  8.    },
  9. }
- 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:
  1. local EventManager = ZO_Object:Subclass()
  2.  
  3. function EventManager:New()
  4.    local o = ZO_Object.New(self)
  5.    o.registry = {}
  6.    return o
  7. end
  8.  
  9. function EventManager:RegisterForEvent(identifier, event, callback)
  10.    self.registry[event] = self.registry[event] or {}
  11.    self.registry[event][identifier] = callback
  12. end
  13.  
  14. function EventManager:UnregisterForEvent(identifier, event)
  15.    if self.registry[event] then
  16.       self.registry[event][identifier] = nil
  17.    end
  18. end
  19.  
  20. function EventManager:FireEvent(event, ...)
  21.    if self.registry[event] then
  22.       for identifier, callback in pairs(self.registry[event]) do
  23.          callback(event, ...)
  24.       end
  25.    end
  26. end
  27.  
  28. MyEventManager = EventManager:New()
  Reply With Quote