CultivateImmortal/Assets/Scripts/Framework/EventCenter/EventCenter.cs

145 lines
3.5 KiB
C#
Raw Normal View History

2024-11-14 18:15:51 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// <20><><EFBFBD><EFBFBD> <20><>ʽ<EFBFBD>滻ԭ<E6BBBB><D4AD> װ<><D7B0> <20><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
/// </summary>
public abstract class EventInfoBase{ }
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ӧ<EFBFBD>۲<EFBFBD><DBB2><EFBFBD> <20><><EFBFBD><EFBFBD>ί<EFBFBD>е<EFBFBD> <20><>
/// </summary>
/// <typeparam name="T"></typeparam>
public class EventInfo<T>:EventInfoBase
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>۲<EFBFBD><DBB2><EFBFBD> <20><>Ӧ<EFBFBD><D3A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public UnityAction<T> actions;
public EventInfo(UnityAction<T> action)
{
actions += action;
}
}
/// <summary>
/// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>޲<EFBFBD><DEB2>޷<EFBFBD><DEB7><EFBFBD>ֵί<D6B5><CEAF>
/// </summary>
public class EventInfo: EventInfoBase
{
public UnityAction actions;
public EventInfo(UnityAction action)
{
actions += action;
}
}
/// <summary>
/// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
/// </summary>
public class EventCenter: BaseManager<EventCenter>
{
//<2F><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>Ӧ<EFBFBD>¼<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ӧ<EFBFBD><D3A6><EFBFBD>߼<EFBFBD>
private Dictionary<E_EventType, EventInfoBase> eventDic = new Dictionary<E_EventType, EventInfoBase>();
private EventCenter() { }
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
/// </summary>
/// <param name="eventName"><3E>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD></param>
public void EventTrigger<T>(E_EventType eventName, T info)
{
//<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD> <20><>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
if(eventDic.ContainsKey(eventName))
{
//ȥִ<C8A5>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>߼<EFBFBD>
(eventDic[eventName] as EventInfo<T>).actions?.Invoke(info);
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD> <20>޲<EFBFBD><DEB2><EFBFBD>
/// </summary>
/// <param name="eventName"></param>
public void EventTrigger(E_EventType eventName)
{
//<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD> <20><>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
if (eventDic.ContainsKey(eventName))
{
//ȥִ<C8A5>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>߼<EFBFBD>
(eventDic[eventName] as EventInfo).actions?.Invoke();
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="eventName"></param>
/// <param name="func"></param>
public void AddEventListener<T>(E_EventType eventName, UnityAction<T> func)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ί<EFBFBD>м<EFBFBD>¼ ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
if (eventDic.ContainsKey(eventName))
{
(eventDic[eventName] as EventInfo<T>).actions += func;
}
else
{
eventDic.Add(eventName, new EventInfo<T>(func));
}
}
public void AddEventListener(E_EventType eventName, UnityAction func)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ί<EFBFBD>м<EFBFBD>¼ ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
if (eventDic.ContainsKey(eventName))
{
(eventDic[eventName] as EventInfo).actions += func;
}
else
{
eventDic.Add(eventName, new EventInfo(func));
}
}
/// <summary>
/// <20>Ƴ<EFBFBD><C6B3>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="eventName"></param>
/// <param name="func"></param>
public void RemoveEventListener<T>(E_EventType eventName, UnityAction<T> func)
{
if (eventDic.ContainsKey(eventName))
(eventDic[eventName] as EventInfo<T>).actions -= func;
}
public void RemoveEventListener(E_EventType eventName, UnityAction func)
{
if (eventDic.ContainsKey(eventName))
(eventDic[eventName] as EventInfo).actions -= func;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ļ<EFBFBD><C4BC><EFBFBD>
/// </summary>
public void Clear()
{
eventDic.Clear();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ijһ<C4B3><D2BB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
/// </summary>
/// <param name="eventName"></param>
public void Claer(E_EventType eventName)
{
if (eventDic.ContainsKey(eventName))
eventDic.Remove(eventName);
}
}