EventManager
This commit is contained in:
parent
a07dbf23a5
commit
5d2ce2ae7e
8
Assets/EventManager.meta
Normal file
8
Assets/EventManager.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 369587a5e18126349b07b3a1e7c9abe5
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/EventManager/Scripts.meta
Normal file
8
Assets/EventManager/Scripts.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a8734ea3ee422854a8491e4ea1703e8f
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
14
Assets/EventManager/Scripts/CommonEvents.cs
Normal file
14
Assets/EventManager/Scripts/CommonEvents.cs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
public class CommonEventBase
|
||||||
|
{
|
||||||
|
private int _errorCode;
|
||||||
|
public int ErrorCode
|
||||||
|
{
|
||||||
|
get { return _errorCode; }
|
||||||
|
set { _errorCode = value; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CustomEvent : CommonEventBase
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
11
Assets/EventManager/Scripts/CommonEvents.cs.meta
Normal file
11
Assets/EventManager/Scripts/CommonEvents.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 20c6a74d993d2514185dafb53f2b6ee9
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
65
Assets/EventManager/Scripts/EventManager.cs
Normal file
65
Assets/EventManager/Scripts/EventManager.cs
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
using FirstVillain.Singleton;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace FirstVillain.Event
|
||||||
|
{
|
||||||
|
public class EventManager : UnitySingleton<EventManager>
|
||||||
|
{
|
||||||
|
public delegate void EventDelegate<T>(T cEvent) where T : CommonEventBase;
|
||||||
|
private delegate void EventDelegate(CommonEventBase cEvent);
|
||||||
|
|
||||||
|
private Dictionary<Type, EventDelegate> _delegateDict = new();
|
||||||
|
private Dictionary<Delegate, EventDelegate> _delegateLookupDict = new();
|
||||||
|
|
||||||
|
private void AddListener<T>(EventDelegate<T> callback) where T : CommonEventBase
|
||||||
|
{
|
||||||
|
EventDelegate newDelegate = e => callback(e as T);
|
||||||
|
_delegateLookupDict[callback] = newDelegate;
|
||||||
|
|
||||||
|
var type = typeof(T);
|
||||||
|
if (!_delegateDict.TryGetValue(type, out EventDelegate tempDeletage))
|
||||||
|
{
|
||||||
|
_delegateDict[type] = tempDeletage;
|
||||||
|
}
|
||||||
|
|
||||||
|
_delegateDict[type] += newDelegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DelListener<T>(EventDelegate<T> callback) where T : CommonEventBase
|
||||||
|
{
|
||||||
|
if (_delegateLookupDict.TryGetValue(callback, out EventDelegate targetDelegate))
|
||||||
|
{
|
||||||
|
var type = typeof(T);
|
||||||
|
if (_delegateDict.TryGetValue(type, out EventDelegate tempDelegate))
|
||||||
|
{
|
||||||
|
tempDelegate -= targetDelegate;
|
||||||
|
if (tempDelegate == null)
|
||||||
|
{
|
||||||
|
_delegateDict.Remove(type);
|
||||||
|
_delegateLookupDict.Remove(callback);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_delegateDict[type] = tempDelegate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ExecuteEvent(CommonEventBase cEvent)
|
||||||
|
{
|
||||||
|
if (Instance._delegateDict.TryGetValue(cEvent.GetType(), out EventDelegate callback))
|
||||||
|
{
|
||||||
|
callback.Invoke(cEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
_delegateDict.Clear();
|
||||||
|
_delegateLookupDict.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
11
Assets/EventManager/Scripts/EventManager.cs.meta
Normal file
11
Assets/EventManager/Scripts/EventManager.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4e9bec8da5b8dd848a2fe26b3a997ba1
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user