private void DestroyEntityInternal(Entity *entities, int count) { CheckAccess(); m_Entities->AssertCanDestroy(entities, count); EntityDataManager.TryRemoveEntityId(entities, count, m_Entities, ArchetypeManager, SharedComponentDataManager); }
public void RemoveComponent(Entity entity, ComponentType type) { CheckAccess(); var groupManager = (EntityGroupManager)m_EntityGroupManager.Target; EntityDataManager.RemoveComponent(entity, type, m_Entities, ArchetypeManager, SharedComponentDataManager, groupManager); }
public static void MoveChunks(ArchetypeManager srcArchetypeManager, EntityDataManager *srcEntityDataManager, SharedComponentDataManager srcSharedComponents, ArchetypeManager dstArchetypeManager, EntityGroupManager dstGroupManager, SharedComponentDataManager dstSharedComponentDataManager, EntityDataManager *dstEntityDataManager, SharedComponentDataManager dstSharedComponents) { var entitiesArray = new NativeArray <Entity>(Chunk.kMaximumEntitiesPerChunk, Allocator.Temp); var entitiesPtr = (Entity *)entitiesArray.GetUnsafePtr(); var srcArchetype = srcArchetypeManager.m_LastArchetype; while (srcArchetype != null) { if (srcArchetype->EntityCount != 0) { if (srcArchetype->NumManagedArrays != 0) { throw new ArgumentException("MoveEntitiesFrom is not supported with managed arrays"); } var dstArchetype = dstArchetypeManager.GetOrCreateArchetype(srcArchetype->Types, srcArchetype->TypesCount, dstGroupManager); for (var c = srcArchetype->ChunkList.Begin; c != srcArchetype->ChunkList.End; c = c->Next) { Chunk *chunk = (Chunk *)c; EntityDataManager.FreeDataEntitiesInChunk(srcEntityDataManager, chunk, chunk->Count); dstEntityDataManager->AllocateEntities(dstArchetype, chunk, 0, chunk->Count, entitiesPtr); chunk->Archetype = dstArchetype; if (dstArchetype->NumSharedComponents > 0) { dstSharedComponents.MoveSharedComponents(srcSharedComponents, chunk->SharedComponentValueArray, dstArchetype->NumSharedComponents); } } //@TODO: Patch Entity references in IComponentData... UnsafeLinkedListNode.InsertListBefore(dstArchetype->ChunkList.End, &srcArchetype->ChunkList); UnsafeLinkedListNode.InsertListBefore(dstArchetype->ChunkListWithEmptySlots.End, &srcArchetype->ChunkListWithEmptySlots); dstArchetype->EntityCount += srcArchetype->EntityCount; srcArchetype->EntityCount = 0; } srcArchetype = srcArchetype->PrevArchetype; } entitiesArray.Dispose(); }