/*******************************************************************
Description: 通用事件管理器
********************************************************************/
using System;
using System.Collections.Generic;
namespace Miss
{
public delegate void MyEventHandler(params object[] args);
public static class EventSystem<T> where T: Enum
{
private static Dictionary<T, MyEventHandler> listenerEventDic = new Dictionary<T, MyEventHandler>();
/// <summary>
/// 注册事件
/// </summary>
/// <param name="t"></param>
/// <param name="handle"></param>
public static void RegisterEvent(T t,MyEventHandler handle)
{
if (handle == null)
return;
if (listenerEventDic.ContainsKey(t))
{
listenerEventDic[t] += handle;
}
else
{
listenerEventDic.Add(t,handle);
}
}
/// <summary>
/// 移除事件
/// </summary>
/// <param name="t"></param>
/// <param name="handle"></param>
public static void RemoveEvent(T t, MyEventHandler handle)
{
if (handle == null)
return;
if (listenerEventDic.ContainsKey(t))
{
listenerEventDic[t] -= handle;
}
else
{
UnityEngine.Debug.LogError($"字典中无该类型的事件注册:{t.GetType()}");
}
}
/// <summary>
/// 抛出事件
/// </summary>
/// <param name="t"></param>
/// <param name="handle"></param>
public static void DispitchEvent(T t,params object[] args)
{
MyEventHandler handle = null;
if (listenerEventDic.TryGetValue(t,out handle))
{
handle?.Invoke(args);
}
}
}
}
namespace Miss
{
public enum CommonEvent
{
/// <summary>
/// 开始游戏
/// </summary>
StartGame = 1,
/// <summary>
/// 状态更改
/// </summary>
ChangeState
}
public enum TaskStateEvent
{
/// <summary>
/// 完成
/// </summary>
Finish = 0,
}
}