事件管理器

事件管理器(后续会不断完善)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public delegate void EventCallBack(params object[] args);
public class Single<T> : MonoBehaviour where T : Single<T>
{
    
    
    protected static T _instance;
    public static T Ins
    {
    
    
        get
        {
    
    
            return _instance;
        }
    }
    protected virtual void Awake()
    {
    
    
        _instance = (T)this;
    }
    protected virtual void OnDestroy()
    {
    
    
        if (_instance == this)
        {
    
    
            _instance = null;
        }
    }
}
public class EventModule : Single<EventModule>
{
    
    
    public Dictionary<ClientEvent, EventListener> _dic;
    public void Register(ClientEvent clientEvent, EventCallBack eventCallBack)
    {
    
    
        if (_dic == null)
        {
    
    
            _dic = new Dictionary<ClientEvent, EventListener>();
        }
        EventListener listener = null;
        if (!_dic.TryGetValue(clientEvent, out listener))
        {
    
    
            listener = new EventListener(eventCallBack);
            _dic.Add(clientEvent, listener);
        }
        else
        {
    
    
            listener.Add(eventCallBack);
        }

    }

    public void Remove(ClientEvent clientEvent, EventCallBack eventCallBack)
    {
    
    
        EventListener listener;
        if (_dic.TryGetValue(clientEvent, out listener))
        {
    
    
            listener.Remove(eventCallBack);
        }
    }
    public void Trigger(ClientEvent clientEvent, params object[] args)
    {
    
    
        EventListener listener;
        if (_dic.TryGetValue(clientEvent, out listener))
        {
    
    
            listener.Trigger(args);
        }
    }
    public void RemoveAll(ClientEvent clientEvent)
    {
    
    
        _dic?.Remove(clientEvent);
    }
    public void RemoveAll()
    {
    
    
        _dic.Clear();
    }
}
public class ClientEvent
{
    
    
    public void Register(EventCallBack callBack)
    {
    
    
        EventModule.Ins.Register(this, callBack);
    }
    public void Remove(EventCallBack callBack)
    {
    
    
        EventModule.Ins.Remove(this, callBack);
    }
    public void Trigger(params object[] args)
    {
    
    
        EventModule.Ins.Trigger(this, args);
    }
    public void RemoveAll()
    {
    
    
        EventModule.Ins?.RemoveAll(this);
    }
}
public class EventListener
{
    
    
    public EventCallBack eventCallBack;
    public EventListener(EventCallBack callBack)
    {
    
    
        this.eventCallBack = callBack;
    }
    public void Add(EventCallBack callBack)
    {
    
    
        eventCallBack += callBack;
    }
    public void Remove(EventCallBack callBack)
    {
    
    
        eventCallBack -= callBack;
    }
    public void Trigger(params object[] args)
    {
    
    
        eventCallBack(args);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39691716/article/details/121414084