2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
namespace Game
{
public delegate void EventHandler<TParam>(TParam eventParam);
public delegate void EventVoidHandler();
public class EventManager : ManagerBase<EventManager>
{
private Dictionary<EEvent, Delegate> _mEventDict;
public EventManager() { }
public override void OnCreate()
{
_mEventDict = new Dictionary<EEvent, Delegate>();
}
public override void Update()
{
}
public override void OnDestroy()
{
}
public void AddEvent<TParam>(EEvent eventType, EventHandler<TParam> callback)
{
if (_mEventDict.TryGetValue(eventType, out var handler))
{
_mEventDict[eventType] = (EventHandler<TParam>)handler + callback;
}
else
{
_mEventDict[eventType] = callback;
}
}
public void RemoveEvent<TParam>(EEvent eventType, EventHandler<TParam> callback)
{
if (_mEventDict.TryGetValue(eventType, out var handler))
{
_mEventDict[eventType] = (EventHandler<TParam>)handler - callback;
}
}
public void SendEvent<TParam>(EEvent eventType, TParam param)
{
if (_mEventDict.TryGetValue(eventType, out var handler))
{
if (handler == null)
{
return;
}
foreach (var callback in handler.GetInvocationList())
{
((EventHandler<TParam>)callback)(param);
}
}
}
public void AddEvent(EEvent eventType, EventVoidHandler callback)
{
if (_mEventDict.TryGetValue(eventType, out var handler))
{
_mEventDict[eventType] = (EventVoidHandler)handler + callback;
}
else
{
_mEventDict[eventType] = callback;
}
}
public void RemoveEvent(EEvent eventType, EventVoidHandler callback)
{
if (_mEventDict.TryGetValue(eventType, out var handler))
{
_mEventDict[eventType] = (EventVoidHandler)handler - callback;
}
}
public void SendEvent(EEvent eventType)
{
if (_mEventDict.TryGetValue(eventType, out var handler))
{
if (handler == null)
{
return;
}
foreach (var callback in handler.GetInvocationList())
{
((EventVoidHandler)callback)();
}
}
}
}
}