From 5d2ce2ae7eb14001453a7fdfdcdbbcdf84236885 Mon Sep 17 00:00:00 2001 From: hyunwoo Date: Wed, 16 Aug 2023 18:50:41 +0900 Subject: [PATCH] EventManager --- Assets/EventManager.meta | 8 +++ Assets/EventManager/Scripts.meta | 8 +++ Assets/EventManager/Scripts/CommonEvents.cs | 14 ++++ .../EventManager/Scripts/CommonEvents.cs.meta | 11 ++++ Assets/EventManager/Scripts/EventManager.cs | 65 +++++++++++++++++++ .../EventManager/Scripts/EventManager.cs.meta | 11 ++++ 6 files changed, 117 insertions(+) create mode 100644 Assets/EventManager.meta create mode 100644 Assets/EventManager/Scripts.meta create mode 100644 Assets/EventManager/Scripts/CommonEvents.cs create mode 100644 Assets/EventManager/Scripts/CommonEvents.cs.meta create mode 100644 Assets/EventManager/Scripts/EventManager.cs create mode 100644 Assets/EventManager/Scripts/EventManager.cs.meta diff --git a/Assets/EventManager.meta b/Assets/EventManager.meta new file mode 100644 index 0000000..3909008 --- /dev/null +++ b/Assets/EventManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 369587a5e18126349b07b3a1e7c9abe5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/EventManager/Scripts.meta b/Assets/EventManager/Scripts.meta new file mode 100644 index 0000000..101b222 --- /dev/null +++ b/Assets/EventManager/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8734ea3ee422854a8491e4ea1703e8f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/EventManager/Scripts/CommonEvents.cs b/Assets/EventManager/Scripts/CommonEvents.cs new file mode 100644 index 0000000..c66170d --- /dev/null +++ b/Assets/EventManager/Scripts/CommonEvents.cs @@ -0,0 +1,14 @@ +public class CommonEventBase +{ + private int _errorCode; + public int ErrorCode + { + get { return _errorCode; } + set { _errorCode = value; } + } +} + +public class CustomEvent : CommonEventBase +{ + +} \ No newline at end of file diff --git a/Assets/EventManager/Scripts/CommonEvents.cs.meta b/Assets/EventManager/Scripts/CommonEvents.cs.meta new file mode 100644 index 0000000..6924e9e --- /dev/null +++ b/Assets/EventManager/Scripts/CommonEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20c6a74d993d2514185dafb53f2b6ee9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/EventManager/Scripts/EventManager.cs b/Assets/EventManager/Scripts/EventManager.cs new file mode 100644 index 0000000..d918d93 --- /dev/null +++ b/Assets/EventManager/Scripts/EventManager.cs @@ -0,0 +1,65 @@ +using FirstVillain.Singleton; +using System; +using System.Collections.Generic; + +namespace FirstVillain.Event +{ + public class EventManager : UnitySingleton + { + public delegate void EventDelegate(T cEvent) where T : CommonEventBase; + private delegate void EventDelegate(CommonEventBase cEvent); + + private Dictionary _delegateDict = new(); + private Dictionary _delegateLookupDict = new(); + + private void AddListener(EventDelegate 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(EventDelegate 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(); + } + } +} + diff --git a/Assets/EventManager/Scripts/EventManager.cs.meta b/Assets/EventManager/Scripts/EventManager.cs.meta new file mode 100644 index 0000000..41be64e --- /dev/null +++ b/Assets/EventManager/Scripts/EventManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e9bec8da5b8dd848a2fe26b3a997ba1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: