void AddToDestroyList(Chunk *chunk, int indexInChunk, int batchCount, int inputDestroyCount, ref UnsafeList entitiesList, ref int minBufferLength, ref int maxBufferLength) { int indexInArchetype = ChunkDataUtility.GetIndexInTypeArray(chunk->Archetype, m_LinkedGroupType); if (indexInArchetype != -1) { var baseHeader = ChunkDataUtility.GetComponentDataWithTypeRO(chunk, indexInChunk, m_LinkedGroupType); var stride = chunk->Archetype->SizeOfs[indexInArchetype]; for (int i = 0; i != batchCount; i++) { var header = (BufferHeader *)(baseHeader + stride * i); var entityGroupCount = header->Length - 1; if (entityGroupCount <= 0) { continue; } var entityGroupArray = (Entity *)BufferHeader.GetElementPointer(header) + 1; if (entitiesList.Capacity == 0) { entitiesList.SetCapacity <Entity>(inputDestroyCount * entityGroupCount /*, Allocator.TempJob*/); } entitiesList.AddRange <Entity>(entityGroupArray, entityGroupCount /*, Allocator.TempJob*/); minBufferLength = math.min(minBufferLength, entityGroupCount); maxBufferLength = math.max(maxBufferLength, entityGroupCount); } } }
public byte *GetComponentDataWithTypeRO(Entity entity, int typeIndex, ref int typeLookupCache) { var entityData = m_Entities + entity.Index; return(ChunkDataUtility.GetComponentDataWithTypeRO(entityData->Chunk, entityData->IndexInChunk, typeIndex, ref typeLookupCache)); }