// public static Dictionary<Type, List<CustomListener>> registeredListeners = new Dictionary<Type, List<CustomListener>> (); // public static List<CustomListener> registeredListeners = new List<CustomListener> (); // public static void subscribe<E> (this CustomListener listener) where E : CustomEvent { // Type eventType = typeof (E); // if (!registeredListeners.ContainsKey (eventType)) // registeredListeners.Add (eventType, new List<CustomListener> ()); // registeredListeners [eventType].Add (listener); // } // public static void registerHandler<E> (this CustomListener listener, CustomEventMethod<E> handler) where E : CustomEvent { // Type eventType = typeof (E); // if (!registeredHandlers.ContainsKey (eventType)) // registeredHandlers.Add (eventType, new CustomEventMethod<CustomEvent> ()); // registeredHandlers [eventType].Add ( // new KeyValuePair<CustomListener, CustomEventMethod<CustomEvent>> (listener, handler as CustomEventMethod<CustomEvent>)); // } public static void registerHandler <E> (this CustomListener listener, CustomEventMethod <E> handler) where E : CustomEvent { Type listenerType = listener.GetType(); Type eventType = typeof(E); Debug.Log("Registering " + handler.Target + "." + handler.Method.Name + " for " + eventType); if (!handlerList.ContainsKey(eventType)) { handlerList.Add(eventType, new Dictionary <Type, MethodInfo> ()); } if (handlerList [eventType].ContainsKey(listenerType)) { return; } handlerList [eventType].Add(listenerType, handler.Method); listener.register <E> (); // registeredHandlers [eventType].Add (new KeyValuePair<CustomListener, MethodInfo> (listener, handler.Method)); }