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); }
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); }
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); }