public static void Diff( EntityMap left, EntityMap right, IEntityMapDiffHandler handler, string staticsticId, IGameEntityCompareAgent gameEntityComparator, bool skipMissHandle = false) { if (gameEntityComparator == null) { gameEntityComparator = new GameEntityDefaultCompareAgent(handler); } EntityMapComparaeStatisticOne oneStat = Diff(left, right, handler, gameEntityComparator, skipMissHandle); RecordStatistics(staticsticId, oneStat); }
public static EntityMapComparaeStatisticOne Diff(EntityMap left, EntityMap right, IEntityMapDiffHandler handler, IGameEntityCompareAgent 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 }); }