using UnityEngine; using System; using System.Collections; using System.Collections.Generic; public class NGUIEventBroadcaster : MonoBehaviour { #region Broadcaster Registration static Dictionary Broadcasters; static void RegisterBroadcaster(NGUIEventBroadcaster broadcaster) { if (Broadcasters == null) Broadcasters = new Dictionary(); if (Broadcasters.ContainsKey(broadcaster.broadcasterID)) Debug.LogError("Duplicate Broadcaster ID detected: " + broadcaster.broadcasterID); else Broadcasters.Add(broadcaster.broadcasterID, broadcaster); } static void DeregisterBroadcaster(NGUIEventBroadcaster broadcaster) { if (Broadcasters == null) return; if (Broadcasters.ContainsKey(broadcaster.broadcasterID)) Broadcasters.Remove(broadcaster.broadcasterID); } public static NGUIEventBroadcaster BroadcasterFromID(string id) { if (Broadcasters != null && Broadcasters.ContainsKey(id)) return Broadcasters[id]; else return null; } #endregion #region Event Registration static Dictionary> EventListeners; public static void AddListener(string broadcasterID, Action eventDelegate) { if (broadcasterID == null || broadcasterID.Length == 0 || eventDelegate == null) return; if (EventListeners == null) EventListeners = new Dictionary>(); if (EventListeners.ContainsKey(broadcasterID) == false) EventListeners.Add(broadcasterID, new List()); if (EventListeners[broadcasterID].Contains(eventDelegate) == false) EventListeners[broadcasterID].Add(eventDelegate); } public static void RemoveListener(string broadcasterID, Action eventDelegate) { if (broadcasterID == null || broadcasterID.Length == 0 || eventDelegate == null) return; if (EventListeners == null) return; if (EventListeners.ContainsKey(broadcasterID) == false) return; if (EventListeners[broadcasterID].Contains(eventDelegate)) EventListeners[broadcasterID].Remove(eventDelegate); } static Dictionary>> EventWithIDListeners; public static void AddListener(string broadcasterID, Action eventDelegate) { if (broadcasterID == null || broadcasterID.Length == 0 || eventDelegate == null) return; if (EventWithIDListeners == null) EventWithIDListeners = new Dictionary>>(); if (EventWithIDListeners.ContainsKey(broadcasterID) == false) EventWithIDListeners.Add(broadcasterID, new List>()); if (EventWithIDListeners[broadcasterID].Contains(eventDelegate) == false) EventWithIDListeners[broadcasterID].Add(eventDelegate); } public static void RemoveListener(string broadcasterID, Action eventDelegate) { if (broadcasterID == null || broadcasterID.Length == 0 || eventDelegate == null) return; if (EventWithIDListeners == null) return; if (EventWithIDListeners.ContainsKey(broadcasterID) == false) return; if (EventWithIDListeners[broadcasterID].Contains(eventDelegate)) EventWithIDListeners[broadcasterID].Remove(eventDelegate); } #endregion #region Instance public string broadcasterID = ""; void OnEnable() { RegisterBroadcaster(this); } void OnDisable() { DeregisterBroadcaster(this); } void OnClick() { if (broadcasterID.Length == 0) return; if (EventListeners != null && EventListeners.ContainsKey(broadcasterID)) { for (int i = 0; i < EventListeners[broadcasterID].Count; i++) { if (EventListeners[broadcasterID][i] != null) EventListeners[broadcasterID][i](); } } if (EventWithIDListeners != null && EventWithIDListeners.ContainsKey(broadcasterID)) { for (int i = 0; i < EventWithIDListeners[broadcasterID].Count; i++) { if (EventWithIDListeners[broadcasterID][i] != null) EventWithIDListeners[broadcasterID][i](broadcasterID); } } } #endregion }