2
0
Fork 0
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#

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);
}
}
}