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