private void MergeJitterBuffer()
{
var netObjects = _jitterBuffer.Get();
if (netObjects != null)
{
foreach(var netObj in netObjects)
{
var entity = netObj.Item1;
var objB = netObj.Item2;
if (objB == null)
{
//TODO : LOG => should never happen
continue;
}
var objType = objB.GetType();
var compType = ComponentTypeManager.GetTypeFor(objType);
if (netObj.Item2 is DefinitionNetworkObject)
{
if ((netObj.Item2 as DefinitionNetworkObject).Destroy)
{
var defObA = entity.GetComponent(compType);
if (defObA != null)
{
var ditem = DataLookupTable.Get(objType.GetTypeInfo());
foreach (var prop in ditem.Properties)
{
if (prop.ChildProperty != null)
{
prop.UnDefineObject(defObA as NetworkObject, entity);
}
}
ObjectMapper.UnDefineObject(defObA, entity.UniqueId);
}
continue;
}
else
{
var ditem = DataLookupTable.Get(objType.GetTypeInfo());
foreach (var prop in ditem.Properties)
{
if (prop.ChildProperty != null)
{
prop.DefineObject(objB, entity);
}
}
ObjectMapper.DefineObject(objB, entity.UniqueId);
}
}
var objA = entity.GetComponent(compType);
if (objA == null)
{
objB.Owner = entity;
entity.AddComponent(objB as IComponent);
}
else
{
var ditem = DataLookupTable.Get(objType.GetTypeInfo());
ditem.Merge((NetworkObject)objA, objB);
}
}
}
}