Example #1
0
        public static void Diff(
            EntityMap left,
            EntityMap right,
            IEntityMapCompareHandler handler,
            string staticsticId = "",
            IGameEntityComparator gameEntityComparator = null, bool skipMissHandle = false)
        {
            if (gameEntityComparator == null)
            {
                gameEntityComparator = new GameEntityComparator(handler);
            }

            EntityMapComparaeStatisticOne oneStat = UnsortedEntityMapComparator.Diff(left, right, handler, gameEntityComparator, skipMissHandle);

            RecordStatistics(staticsticId, oneStat);
        }
Example #2
0
        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
            });
        }