using UnityEngine;
using System.Collections;
public class NotificationCenter : MonoBehaviour
{
private static NotificationCenter defaultNotify;
public static NotificationCenter DefaultNotify
{
get
{
return defaultNotify ?? (defaultNotify = new NotificationCenter());
}
}
Hashtable messages = new Hashtable();
public void AddObserver(GameObject observer, string name)
{
AddObserver(observer, name, null);
}
public void AddObserver(GameObject observer, string name, GameObject sender)
{
if (string.IsNullOrEmpty(name))
{
Debug.Log("Null name specified for notification in AddObserver.");
return;
}
if (!messages.Contains(name))
{
Debug.Log("AddObserver");
messages[name] = new ArrayList();
}
ArrayList notifyList = (ArrayList)messages[name];
if (!notifyList.Contains(observer))
{
notifyList.Add(observer);
}
}
public void RemoveObserver(GameObject observer, string name)
{
ArrayList notifyList = (ArrayList)messages[name];
if (notifyList != null)
{
if (notifyList.Contains(observer))
{
notifyList.Remove(observer);
}
if (notifyList.Count == 0)
{
messages.Remove(name);
}
Debug.Log("RemoveObserver");
}
}
public void PostMessage(GameObject aSender, string aName)
{
PostMessage(aSender, aName, null);
}
public void PostMessage(GameObject aSender, string aName, GameObject aData)
{
PostMessage(new Message(aSender, aName, aData));
}
public void PostMessage(Message aMessage)
{
if (string.IsNullOrEmpty(aMessage.name))
{
Debug.Log("Null name sent to PostMessage.");
return;
}
ArrayList notifyList = (ArrayList)messages[aMessage.name];
if (notifyList == null)
{
Debug.Log("Notify list not found in PostMessage.");
return;
}
ArrayList observersToRemove = new ArrayList();
foreach (GameObject observer in notifyList)
{
if (!observer)
{
observersToRemove.Add(observer);
}
else
{
observer.SendMessage(aMessage.name, aMessage, SendMessageOptions.DontRequireReceiver);
}
}
foreach (GameObject observer in observersToRemove)
{
notifyList.Remove(observer);
}
}
public class Message
{
readonly GameObject sender;
public string name;
readonly GameObject data;
public Message(GameObject aSender, string aName)
{
sender = aSender;
name = aName;
data = null;
}
public Message(GameObject aSender, string aName, GameObject aData)
{
sender = aSender;
name = aName;
data = aData;
}
#region Getters
public GameObject Data
{
get { return data; }
}
public GameObject Sender
{
get { return sender; }
}
#endregion
}
}
using System.Collections;
public class NotificationCenter : MonoBehaviour
{
private static NotificationCenter defaultNotify;
public static NotificationCenter DefaultNotify
{
get
{
return defaultNotify ?? (defaultNotify = new NotificationCenter());
}
}
Hashtable messages = new Hashtable();
public void AddObserver(GameObject observer, string name)
{
AddObserver(observer, name, null);
}
public void AddObserver(GameObject observer, string name, GameObject sender)
{
if (string.IsNullOrEmpty(name))
{
Debug.Log("Null name specified for notification in AddObserver.");
return;
}
if (!messages.Contains(name))
{
Debug.Log("AddObserver");
messages[name] = new ArrayList();
}
ArrayList notifyList = (ArrayList)messages[name];
if (!notifyList.Contains(observer))
{
notifyList.Add(observer);
}
}
public void RemoveObserver(GameObject observer, string name)
{
ArrayList notifyList = (ArrayList)messages[name];
if (notifyList != null)
{
if (notifyList.Contains(observer))
{
notifyList.Remove(observer);
}
if (notifyList.Count == 0)
{
messages.Remove(name);
}
Debug.Log("RemoveObserver");
}
}
public void PostMessage(GameObject aSender, string aName)
{
PostMessage(aSender, aName, null);
}
public void PostMessage(GameObject aSender, string aName, GameObject aData)
{
PostMessage(new Message(aSender, aName, aData));
}
public void PostMessage(Message aMessage)
{
if (string.IsNullOrEmpty(aMessage.name))
{
Debug.Log("Null name sent to PostMessage.");
return;
}
ArrayList notifyList = (ArrayList)messages[aMessage.name];
if (notifyList == null)
{
Debug.Log("Notify list not found in PostMessage.");
return;
}
ArrayList observersToRemove = new ArrayList();
foreach (GameObject observer in notifyList)
{
if (!observer)
{
observersToRemove.Add(observer);
}
else
{
observer.SendMessage(aMessage.name, aMessage, SendMessageOptions.DontRequireReceiver);
}
}
foreach (GameObject observer in observersToRemove)
{
notifyList.Remove(observer);
}
}
public class Message
{
readonly GameObject sender;
public string name;
readonly GameObject data;
public Message(GameObject aSender, string aName)
{
sender = aSender;
name = aName;
data = null;
}
public Message(GameObject aSender, string aName, GameObject aData)
{
sender = aSender;
name = aName;
data = aData;
}
#region Getters
public GameObject Data
{
get { return data; }
}
public GameObject Sender
{
get { return sender; }
}
#endregion
}
}