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.
		
		
		
		
		
			
		
			
	
	
		
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using System; | ||
|  | using System.Collections.Generic; | ||
|  | 
 | ||
|  | namespace Game | ||
|  | { | ||
|  |     public class MetaDataHandler | ||
|  |     { | ||
|  |         private readonly Dictionary<IMetaData, List<Delegate>> _metaDataDict= new Dictionary<IMetaData, List<Delegate>>(); | ||
|  |          | ||
|  |         protected virtual void OnCreateBind() { } | ||
|  |         protected void CreateBind() | ||
|  |         { | ||
|  |             OnCreateBind(); | ||
|  |         } | ||
|  |         protected void ClearBind() | ||
|  |         { | ||
|  |             foreach (var kvp in _metaDataDict) | ||
|  |             { | ||
|  |                 var metaData = kvp.Key; | ||
|  |                 foreach (var handler in kvp.Value) | ||
|  |                 { | ||
|  |                     metaData.RemoveEvent(handler); | ||
|  |                 } | ||
|  |             } | ||
|  |             _metaDataDict.Clear(); | ||
|  |         } | ||
|  |         protected void ReBindData<TData>(MetaBase<TData> metaData, EventMetaData<TData> handler) | ||
|  |         { | ||
|  |             UnbindData(metaData); | ||
|  |             BindData(metaData, handler); | ||
|  |         } | ||
|  |         protected void BindData<TData>(MetaBase<TData> metaData, EventMetaData<TData> handler) | ||
|  |         { | ||
|  |             metaData.AddEvent(handler); | ||
|  |             var metaInter = (IMetaData)metaData; | ||
|  |             if (!_metaDataDict.ContainsKey(metaInter)) | ||
|  |             { | ||
|  |                 _metaDataDict[metaInter] = new List<Delegate>(); | ||
|  |             } | ||
|  |             _metaDataDict[metaInter].Add(handler); | ||
|  |         } | ||
|  |         protected void UnbindData<TData>(MetaBase<TData> metaData) | ||
|  |         { | ||
|  |             var metaInter = (IMetaData)metaData; | ||
|  |             if (_metaDataDict.ContainsKey(metaInter)) | ||
|  |             { | ||
|  |                 foreach (var handler in _metaDataDict[metaInter]) | ||
|  |                 { | ||
|  |                     metaData.RemoveEvent(handler); | ||
|  |                 } | ||
|  |                 _metaDataDict[metaInter].Clear(); | ||
|  |             } | ||
|  |             _metaDataDict.Remove(metaInter); | ||
|  |         } | ||
|  |     } | ||
|  | } |