using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class NGUIEventBroadcaster : MonoBehaviour
{
#region Broadcaster Registration
static Dictionary<string, NGUIEventBroadcaster> Broadcasters;
static void RegisterBroadcaster(NGUIEventBroadcaster broadcaster)
{
if (Broadcasters == null)
Broadcasters = new Dictionary<string, NGUIEventBroadcaster>();
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<string, List<Action>> EventListeners;
public static void AddListener(string broadcasterID, Action eventDelegate)
{
if (broadcasterID == null || broadcasterID.Length == 0 || eventDelegate == null) return;
if (EventListeners == null)
EventListeners = new Dictionary<string, List<Action>>();
if (EventListeners.ContainsKey(broadcasterID) == false)
EventListeners.Add(broadcasterID, new List<Action>());
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<string, List<Action<string>>> EventWithIDListeners;
public static void AddListener(string broadcasterID, Action<string> eventDelegate)
{
if (broadcasterID == null || broadcasterID.Length == 0 || eventDelegate == null) return;
if (EventWithIDListeners == null)
EventWithIDListeners = new Dictionary<string, List<Action<string>>>();
if (EventWithIDListeners.ContainsKey(broadcasterID) == false)
EventWithIDListeners.Add(broadcasterID, new List<Action<string>>());
if (EventWithIDListeners[broadcasterID].Contains(eventDelegate) == false)
EventWithIDListeners[broadcasterID].Add(eventDelegate);
}
public static void RemoveListener(string broadcasterID, Action<string> 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
}