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