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#
		
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | 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)(); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |