public static EntityMapComparaeStatisticOne Diff(EntityMap left, EntityMap right, IEntityMapCompareHandler handler, IGameEntityComparator gameEntityComparator, bool skipMissHandle = false) { int entityCount = 0; int componentCount = 0; DateTime startTime = DateTime.Now; foreach (var rightEntry in right) { entityCount++; if (handler.IsBreak()) { break; } var entityKey = rightEntry.Key; var rightEntity = rightEntry.Value; IGameEntity leftEntity; left.TryGetValue(entityKey, out leftEntity); if (leftEntity == null) { if (!skipMissHandle) { handler.OnLeftEntityMissing(rightEntity); } continue; } componentCount += gameEntityComparator.Diff(leftEntity, rightEntity, skipMissHandle); } if (!handler.IsBreak() && !skipMissHandle) { foreach (var leftEntry in left) { var entityKey = leftEntry.Key; var leftEntity = leftEntry.Value; IGameEntity rightEntity; if (!right.TryGetValue(entityKey, out rightEntity)) { entityCount++; handler.OnRightEntityMissing(leftEntity); } } } return(new EntityMapComparaeStatisticOne { EntityCount = entityCount, ComponentCount = componentCount, CreateTime = DateTime.Now, Interval = (int)(startTime - startTime).TotalMilliseconds }); }
public void OnRightItemMissing(KeyValuePair <EntityKey, IGameEntity> leftItem) { _handler.OnRightEntityMissing(leftItem.Value); }