Ejemplo n.º 1
0
        static unsafe int GenerateRemapInfo(EntityManager entityManager, EntityArchetype[] archetypeArray, NativeArray <EntityRemapUtility.EntityRemapInfo> entityRemapInfos)
        {
            int nextEntityId = 1; //0 is reserved for Entity.Null;

            int totalChunkCount = 0;

            for (int archetypeIndex = 0; archetypeIndex < archetypeArray.Length; ++archetypeIndex)
            {
                var archetype = archetypeArray[archetypeIndex].Archetype;
                for (int i = 0; i < archetype->Chunks.Count; ++i)
                {
                    var chunk = archetype->Chunks.p[i];
                    for (int iEntity = 0; iEntity < chunk->Count; ++iEntity)
                    {
                        var entity = *(Entity *)ChunkDataUtility.GetComponentDataRO(chunk, iEntity, 0);
                        EntityRemapUtility.AddEntityRemapping(ref entityRemapInfos, entity, new Entity {
                            Version = 0, Index = nextEntityId
                        });
                        ++nextEntityId;
                    }

                    totalChunkCount += 1;
                }
            }

            return(totalChunkCount);
        }
Ejemplo n.º 2
0
        static unsafe int GenerateRemapInfo(EntityManager entityManager, EntityArchetype[] archetypeArray, out NativeArray <EntityRemapUtility.EntityRemapInfo> entityRemapInfos)
        {
            int nextEntityId = 1; //0 is reserved for Entity.Null;

            entityRemapInfos = new NativeArray <EntityRemapUtility.EntityRemapInfo>(entityManager.EntityCapacity, Allocator.Temp);

            int totalChunkCount = 0;

            for (int archetypeIndex = 0; archetypeIndex < archetypeArray.Length; ++archetypeIndex)
            {
                var archetype = archetypeArray[archetypeIndex].Archetype;
                for (var c = (Chunk *)archetype->ChunkList.Begin; c != archetype->ChunkList.End; c = (Chunk *)c->ChunkListNode.Next)
                {
                    for (int iEntity = 0; iEntity < c->Count; ++iEntity)
                    {
                        var entity = *(Entity *)ChunkDataUtility.GetComponentDataRO(c, iEntity, 0);
                        EntityRemapUtility.AddEntityRemapping(ref entityRemapInfos, entity, new Entity {
                            Version = 0, Index = nextEntityId
                        });
                        ++nextEntityId;
                    }

                    totalChunkCount += 1;
                }
            }

            return(totalChunkCount);
        }
Ejemplo n.º 3
0
        private static unsafe int GenerateRemapInfo(EntityManager entityManager, EntityArchetype[] archetypeArray, NativeArray <EntityRemapUtility.EntityRemapInfo> entityRemapInfos)
        {
            int num   = 1;
            int num2  = 0;
            int index = 0;

            while (index < archetypeArray.Length)
            {
                Archetype *archetype = archetypeArray[index].Archetype;
                Chunk *    begin     = (Chunk *)archetype->ChunkList.Begin;
                while (true)
                {
                    if (begin == archetype->ChunkList.End)
                    {
                        index++;
                        break;
                    }
                    int num4 = 0;
                    while (true)
                    {
                        if (num4 >= begin->Count)
                        {
                            num2++;
                            begin = (Chunk *)begin->ChunkListNode.Next;
                            break;
                        }
                        Entity source = *((Entity *)ChunkDataUtility.GetComponentDataRO(begin, num4, 0));
                        Entity target = new Entity {
                            Version = 0,
                            Index   = num
                        };
                        EntityRemapUtility.AddEntityRemapping(ref entityRemapInfos, source, target);
                        num++;
                        num4++;
                    }
                }
            }
            return(num2);
        }