EventManager
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace EasyMassageSystem
{
public class EventManager
{
public static EventManager Instance;
private static Dictionary<string, Action<EventMassage>> eventListeners;
static EventManager()
{
Instance = new EventManager();
eventListeners = new Dictionary<string, Action<EventMassage>>();
}
public void Register(string eventName, Action<EventMassage> action)
{
if (!eventListeners.ContainsKey(eventName))
{
eventListeners.Add(eventName, action);
}
else
{
eventListeners[eventName] -= action;
eventListeners[eventName] += action;
}
}
public void UnRegister(string eventName,Action<EventMassage> action)
{
if (eventListeners.ContainsKey(eventName))
{
eventListeners[eventName] -= action;
}
}
public void Notify(string eventName,EventMassage msg= null)
{
if (eventListeners.ContainsKey(eventName))
{
Action<EventMassage> action = eventListeners[eventName];
if(action != null)
{
action(msg);
}
}
}
}
public sealed class EventMassage
{
public System.Object param;
public EventMassage() { }
public EventMassage(System.Object p)
{
this.param = p;
}
/// <summary>
/// notify的时候携带消息类型,param携带任何类型的数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T Getparam<T>()
{
if (param == null)
{
return default(T);
}
else
{
return (T)param;
}
}
}
}
MassageSystemBehavior
using System.Collections;
using UnityEngine;
using System.Collections.Generic;
using System;
namespace EasyMassageSystem
{
public class MassageSystemBehavior : MonoBehaviour
{
private Dictionary<string, Action<EventMassage>> events = new Dictionary<string, Action<EventMassage>>();
public void RegisterEvent(string eventName, Action<EventMassage> action)
{
EasyMassageSystem.EventManager.Instance.Register(eventName, action);
events.Add(eventName, action);
}
public void UnRegisterEvent(string eventName,Action<EventMassage> action)
{
EasyMassageSystem.EventManager.Instance.UnRegister(eventName, action);
events.Remove(eventName);
}
public void OnDestroy()
{
foreach (string eventName in events.Keys )
{
EasyMassageSystem.EventManager.Instance.UnRegister(eventName, events[eventName]);
}
}
}
}
?Game
using System.Collections;
using UnityEngine;
public class MassageSystemEvents
{
public class Game
{
public const string NextLevel = "Game.NextLevel";
public const string Replay = "Game.Replay";
public const string ChangeGameStatus = "Game.ChangeGameStatus";
}
}
|