/// <summary> /// Function that trigger every function associated /// to a registered event by its name with two arguments. /// </summary> /// <typeparam name="T">Any Types</typeparam> /// <typeparam name="U">Any Types</typeparam> /// <param name="eventID">Event's name</param> /// <param name="arg1">First Argument to pass</param> /// <param name="arg2">Second Argument to pass</param> public static void TriggerEvent <T, U>(EventsID eventID, T arg1, U arg2) { if (events.ContainsKey(eventID)) { (events[eventID] as Callback <T, U>)?.Invoke(arg1, arg2); } }
/// <summary> /// Function that trigger every function associated /// to a registered event by its name. /// </summary> /// <param name="eventID">Event's name</param> public static void TriggerEvent(EventsID eventID) { if (events.ContainsKey(eventID)) { (events[eventID] as Callback)?.Invoke(); } }
/// <summary> /// Add a listener to specific event. If event is not /// registrated, then add it in the dictionary. /// </summary> /// <typeparam name="T">Any Types</typeparam> /// <param name="eventID">Event's name</param> /// <param name="listener">Function to execute when event is triggered</param> public static void StartListening <T>(EventsID eventID, Callback <T> listener) { if (!events.ContainsKey(eventID)) { events.Add(eventID, null); } events[eventID] = (Callback <T>)events[eventID] + listener; }
/// <summary> /// Delete a listener from a registered event. If event /// has no more listener, then will be removed. /// </summary> /// <typeparam name="T">Any Types</typeparam> /// <typeparam name="U">Any Types</typeparam> /// <param name="eventID">Event's name</param> /// <param name="handler">Function registered when listener was added</param> public static void StopListening <T, U>(EventsID eventID, Callback <T, U> handler) { if (events.ContainsKey(eventID)) { events[eventID] = (Callback <T, U>)events[eventID] - handler; if (events[eventID] == null) { events.Remove(eventID); } } }
/// <summary> /// Removes the listener. Use to unregister listener. /// </summary> /// <param name="eventID">Event that object want to listen.</param> /// <param name="callback">Callback action.</param> public void RemoveListener(EventsID eventID, Action <object> callback) { // checking params Debug.Assert(callback != null, string.Format("RemoveListener, event {0}, callback is null.", eventID.ToString())); Debug.Assert(eventID != EventsID.None, "AddListener, event = None."); if (listenersDict.ContainsKey(eventID)) { listenersDict[eventID] -= callback; } else { Debug.LogWarning("RemoveListener, tried to remove nonexistent key : " + eventID); } }
/// <summary> /// Register to listen for eventID. /// </summary> /// <param name="eventID">EventID that object want to listen</param> /// <param name="callback">Callback will be invoked when this eventID be raised</param> public void RegisterListener(EventsID eventID, Action <object> callback) { // checking params Debug.Assert(callback != null, string.Format("AddListener, event {0}, callback is null !!", eventID.ToString())); Debug.Assert(eventID != EventsID.None, "RegisterListener, event = None !!"); // check if listener exist in distionary if (listenersDict.ContainsKey(eventID)) { // add callback to our collection listenersDict[eventID] += callback; } else { // add new key-value pair listenersDict.Add(eventID, null); listenersDict[eventID] += callback; } }
/// <summary> /// Posts the event. This will notify all listener that has been registered for this event. /// </summary> /// <param name="eventID">Event that object want to listen.</param> /// <param name="param">Parameter. Listener can make a cast to get the data.</param> public void PostEvent(EventsID eventID, object param = null) { if (!listenersDict.ContainsKey(eventID)) { Debug.Log("No listener for this event : " + eventID); return; } Action <object> callbacks = listenersDict[eventID]; if (callbacks != null) { callbacks(param); } else { Debug.Log("PostEvent " + eventID + " but there is no remaining listener. Remove this key"); listenersDict.Remove(eventID); } }