using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
namespace AdonFramework
{
///
/// 事件中心
///
public class EventCenter : BaseManager
{
///
/// 事件字典,存储注册事件
///
private Dictionary EventDic = new Dictionary();
///
/// 有参数注册事件
///
/// 参数类型
///
///
public void AddEventListener(string name, UnityAction action)
{
if (EventDic.ContainsKey(name))
{
(EventDic[name] as EventInfo).action += action;
}
else
{
EventDic.Add(name, new EventInfo(action));
}
}
///
/// 注册事件
///
/// 事件名
/// 事件执行函数
public void AddEventListener(string name, UnityAction action)
{
if (EventDic.ContainsKey(name))
{
(EventDic[name] as EventInfo).action += action;
}
else
{
EventDic.Add(name, new EventInfo(action));
}
}
///
/// 移除监听事件
/// 当注册对象销毁事调用(OnDestroy)
///
/// 事件名
/// 对应的事件函数
public void RemoveEventListener(string name,UnityAction action)
{
if (EventDic.ContainsKey(name))
(EventDic[name] as EventInfo).action -= action;
}
///
/// 移除监听事件
/// 当注册对象销毁事调用(OnDestroy)
///
/// 事件名
/// 对应的事件函数
public void RemoveEventListener(string name, UnityAction action)
{
if (EventDic.ContainsKey(name))
(EventDic[name] as EventInfo).action -= action;
}
///
/// 触发参数
///
/// 事件名
/// 事件参数
public void EventTrigger(string name , T info)
{
if (EventDic.ContainsKey(name))
{
if((EventDic[name] as EventInfo).action != null)
(EventDic[name] as EventInfo).action.Invoke(info);
}
}
///
/// 触发参数
///
/// 事件名
/// 事件参数
public void EventTrigger(string name)
{
if (EventDic.ContainsKey(name))
{
if ((EventDic[name] as EventInfo).action != null)
(EventDic[name] as EventInfo).action.Invoke();
}
}
///
/// 清空
/// 场景切换时调用
///
public void Clear()
{
EventDic.Clear();
}
}
///
/// 事件信息接口,解决传递参数装箱拆箱对性能损耗
///
public interface IEventInfo
{
}
///
/// 有参数事件信息类
///
///
public class EventInfo:IEventInfo
{
public EventInfo(UnityAction _action)
{
action += _action;
}
public UnityAction action;
}
///
/// 无参数事件信息类
///
public class EventInfo : IEventInfo
{
public EventInfo(UnityAction _action)
{
action += _action;
}
public UnityAction action;
}
}