美文网首页
【Unity】事件中心

【Unity】事件中心

作者: 木心Sepith | 来源:发表于2019-01-12 18:02 被阅读14次

事件中心

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;

/// <summary>
/// 事件中心
/// </summary>
public class EventManager : SingletonTemplate<EventManager>
{
    /// <summary>
    /// 事件集合
    /// </summary>
    private Dictionary<string, List<Action<object>>> allHandler = new Dictionary<string, List<Action<object>>>();

    /// <summary>
    /// 添加监听事件
    /// </summary>
    /// <param name="_eventName"></param>
    /// <param name="_callback"></param>
    public void AddListener(string _eventName, Action<object> _callback)
    {
        if (_callback == null) return;

        List<Action<object>> _events = null;
        if (allHandler.TryGetValue(_eventName, out _events))
        {
            _events.Add(_callback);
        }
        else
        {
            _events = new List<Action<object>>();
            _events.Add(_callback);
            allHandler.Add(_eventName, _events);
        }
    }

    /// <summary>
    /// 移除监听事件
    /// </summary>
    /// <param name="_eventName"></param>
    /// <param name="_callback"></param>
    public void RemoveListener(string _eventName, Action<object> _callback)
    {
        if (_callback == null) return;

        List<Action<object>> _events = null;
        if (allHandler.TryGetValue(_eventName, out _events))
        {
            if (_events.Contains(_callback))
                _events.Remove(_callback);
        }
    }

    /// <summary>
    /// 移除该类型所有监听事件
    /// </summary>
    /// <param name="_eventName"></param>
    public void RemoveTheEvent(string _eventName)
    {
        List<Action<object>> _events = null;
        if (allHandler.TryGetValue(_eventName, out _events))
        {
            _events.Clear();
        }
    }

    /// <summary>
    /// 移除所有监听事件
    /// </summary>
    public void RemoveAllEvent()
    {
        allHandler.Clear();
    }

    /// <summary>
    /// 派发事件
    /// </summary>
    /// <param name="_eventName"></param>
    /// <param name="_param"></param>
    public void Dispatch(string _eventName, object _param)
    {
        List<Action<object>> _events = null;
        if (allHandler.TryGetValue(_eventName, out _events))
        {
            foreach (var v in _events)
            {
                v.Invoke(_param);
            }
        }
    }
}

相关文章

网友评论

      本文标题:【Unity】事件中心

      本文链接:https://www.haomeiwen.com/subject/rcmcdqtx.html