75 lines
2.7 KiB
C#
75 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Bytes
|
|
{
|
|
public class EventManager : MonoBehaviour
|
|
{
|
|
public const string AllNamespace = "All";
|
|
private static EventManager Instance;
|
|
|
|
private Dictionary<string, Dictionary<string, List<Action<BytesData>>>> _eventListeners = new Dictionary<string, Dictionary<string, List<Action<BytesData>>>>();
|
|
|
|
private void Awake()
|
|
{
|
|
Instance = this;
|
|
}
|
|
|
|
public static void RemoveEventListener(string pEventName, Action<BytesData> pFunctionToCall)
|
|
{
|
|
RemoveEventListener(AllNamespace, pEventName, pFunctionToCall);
|
|
}
|
|
|
|
public static void RemoveEventListener(string pEventNamespace, string pEventName, Action<BytesData> pFunctionToCall)
|
|
{
|
|
Instance._eventListeners[pEventNamespace][pEventName].Remove(pFunctionToCall);
|
|
}
|
|
|
|
public static void AddEventListener(string pEventName, Action<BytesData> pFunctionToCall)
|
|
{
|
|
AddEventListener(AllNamespace, pEventName, pFunctionToCall);
|
|
}
|
|
|
|
public static void AddEventListener(string pEventNamespace, string pEventName, Action<BytesData> pFunctionToCall)
|
|
{
|
|
var eventListeners = Instance._eventListeners;
|
|
|
|
if (!eventListeners.ContainsKey(pEventNamespace))
|
|
{
|
|
eventListeners[pEventNamespace] = new Dictionary<string, List<Action<BytesData>>>();
|
|
}
|
|
|
|
if (eventListeners[pEventNamespace].ContainsKey(pEventName))
|
|
{
|
|
eventListeners[pEventNamespace][pEventName].Add(pFunctionToCall);
|
|
return;
|
|
}
|
|
eventListeners[pEventNamespace].Add(pEventName, new List<Action<BytesData>>() { pFunctionToCall });
|
|
}
|
|
|
|
public static void Dispatch(string pEventName, BytesData pBytesData = null)
|
|
{
|
|
Dispatch(AllNamespace, pEventName, pBytesData);
|
|
}
|
|
|
|
public static void Dispatch(string pEventNamespace, string pEventName, BytesData pBytesData = null)
|
|
{
|
|
if (!Instance._eventListeners[pEventNamespace].ContainsKey(pEventName))
|
|
{
|
|
return;
|
|
}
|
|
Instance.CleanEventsFromNull(pEventNamespace, pEventName);
|
|
List<Action<BytesData>> functions = new List<Action<BytesData>>(Instance._eventListeners[pEventNamespace][pEventName]);
|
|
foreach (Action<BytesData> functionToCall in functions)
|
|
{
|
|
functionToCall(pBytesData);
|
|
}
|
|
}
|
|
|
|
private void CleanEventsFromNull(string pEventNamespace, string pEventName)
|
|
{
|
|
Instance._eventListeners[pEventNamespace][pEventName].RemoveAll(item => item == null);
|
|
}
|
|
}
|
|
} |