public void ConstructChunk(Archetype *archetype, Chunk *chunk, int *sharedComponentDataIndices) { chunk->Archetype = archetype; chunk->Count = 0; chunk->Capacity = archetype->ChunkCapacity; chunk->ChunkListNode = new UnsafeLinkedListNode(); chunk->ChunkListWithEmptySlotsNode = new UnsafeLinkedListNode(); chunk->SharedComponentValueArray = (int *)((byte *)(chunk) + Chunk.GetSharedComponentOffset(archetype->NumSharedComponents)); archetype->ChunkList.Add(&chunk->ChunkListNode); archetype->ChunkListWithEmptySlots.Add(&chunk->ChunkListWithEmptySlotsNode); Assert.IsTrue(!archetype->ChunkList.IsEmpty); Assert.IsTrue(!archetype->ChunkListWithEmptySlots.IsEmpty); Assert.IsTrue(chunk == (Chunk *)(archetype->ChunkList.Back)); Assert.IsTrue(chunk == GetChunkFromEmptySlotNode(archetype->ChunkListWithEmptySlots.Back)); if (archetype->NumManagedArrays > 0) { chunk->ManagedArrayIndex = m_ManagedArrays.Count; var man = new ManagedArrayStorage(); man.Chunk = chunk; man.ManagedArray = new object[archetype->NumManagedArrays * chunk->Capacity]; m_ManagedArrays.Add(man); } else { chunk->ManagedArrayIndex = -1; } if (archetype->NumSharedComponents <= 0) { return; } var sharedComponentValueArray = chunk->SharedComponentValueArray; CopySharedComponentDataIndexArray(sharedComponentValueArray, sharedComponentDataIndices, chunk->Archetype->NumSharedComponents); if (sharedComponentDataIndices == null) { return; } for (var i = 0; i < archetype->NumSharedComponents; ++i) { m_SharedComponentManager.AddReference(sharedComponentValueArray[i]); } }
public void AddExistingChunk(Chunk *chunk) { var archetype = chunk->Archetype; archetype->ChunkList.Add(&chunk->ChunkListNode); archetype->ChunkCount += 1; archetype->EntityCount += chunk->Count; for (var i = 0; i < archetype->NumSharedComponents; ++i) { m_SharedComponentManager.AddReference(chunk->SharedComponentValueArray[i]); } if (chunk->Count < chunk->Capacity) { if (archetype->NumSharedComponents == 0) { archetype->ChunkListWithEmptySlots.Add(&chunk->ChunkListWithEmptySlotsNode); } else { archetype->FreeChunksBySharedComponents.Add(chunk); } } }