using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace RichFrame.Event
{
///
/// 事件管理器
///
public class EventManager : Singleton
{
public Dictionary> eventsDic = new Dictionary>();
///
/// 监听一个事件
///
/// 事件名称
/// 监听方法
void ListenEvent(string eventName, Delegate listener)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
if (!listeners.Contains(listener))
{
listeners.Add(listener);
}
}
else
{
listeners = new List();
listeners.Add(listener);
eventsDic.Add(eventName, listeners);
}
}
///
/// 移除一个监听
///
/// 事件名
/// id
void RemoveEvent(string eventName, Delegate handler)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
listeners.Remove(handler);
if (listeners.Count == 0)
eventsDic.Remove(eventName);
}
}
#region 监听事件
public void ListenEvent(string eventName,Action handler)
{
ListenEvent(eventName, (Delegate)handler);
}
public void ListenEvent(string eventName,Action handler)
{
ListenEvent(eventName, (Delegate)handler);
}
public void ListenEvent(string eventName, Action handler)
{
ListenEvent(eventName, (Delegate)handler);
}
public void ListenEvent(string eventName, Action handler)
{
ListenEvent(eventName, (Delegate)handler);
}
public void ListenEvent(string eventName, Action handler)
{
ListenEvent(eventName, (Delegate)handler);
}
public void ListenEvent(string eventName, Action handler)
{
ListenEvent(eventName, (Delegate)handler);
}
public void ListenEvent(string eventName, Action handler)
{
ListenEvent(eventName, (Delegate)handler);
}
#endregion
#region 移除事件监听
public void RemoveListener(string eventName,Action handler)
{
RemoveEvent(eventName, handler);
}
public void RemoveListener(string eventName, Action handler)
{
RemoveEvent(eventName, handler);
}
public void RemoveListener(string eventName, Action handler)
{
RemoveEvent(eventName, handler);
}
public void RemoveListener(string eventName, Action handler)
{
RemoveEvent(eventName, handler);
}
public void RemoveListener(string eventName, Action handler)
{
RemoveEvent(eventName, handler);
}
public void RemoveListener(string eventName, Action handler)
{
RemoveEvent(eventName, handler);
}
#endregion
#region 执行事件
public void ExecuteEvent(string eventName)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
foreach (var item in listeners)
{
((Action)item)();
}
}
}
public void ExecuteEvent(string eventName,T arg0)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
foreach (var item in listeners)
{
((Action)item)(arg0);
}
}
}
public void ExecuteEvent(string eventName, T arg0, T1 arg1)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
foreach (var item in listeners)
{
((Action)item)(arg0,arg1);
}
}
}
public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
foreach (var item in listeners)
{
((Action)item)(arg0, arg1, arg2);
}
}
}
public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2, T3 arg3)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
foreach (var item in listeners)
{
((Action)item)(arg0, arg1, arg2, arg3);
}
}
}
public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
foreach (var item in listeners)
{
((Action)item)(arg0, arg1, arg2, arg3, arg4);
}
}
}
public void ExecuteEvent(string eventName, T arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
{
List listeners;
if (eventsDic.TryGetValue(eventName, out listeners))
{
foreach (var item in listeners)
{
((Action)item)(arg0, arg1, arg2, arg3, arg4, arg5);
}
}
}
#endregion
}
}