internal void DestroyInstance() { PreDisposeCheck(); #if ENABLE_UNITY_COLLECTIONS_CHECKS m_UniversalQuery._DisallowDisposing = null; m_UniversalQueryWithChunks._DisallowDisposing = null; #endif m_UniversalQuery.Dispose(); m_UniversalQueryWithChunks.Dispose(); m_UniversalQuery = null; m_UniversalQueryWithChunks = null; m_DependencyManager->Dispose(); UnsafeUtility.Free(m_DependencyManager, Allocator.Persistent); m_DependencyManager = null; Entities.EntityComponentStore.Destroy(m_EntityComponentStore); m_EntityComponentStore = null; Entities.EntityQueryManager.Destroy(m_EntityQueryManager); m_EntityQueryManager = null; m_EntityQueryManager = null; m_ExclusiveEntityTransaction.OnDestroy(); m_ManagedComponentStore.Dispose(); m_World = null; m_Debug = null; }
public EntityDataAccess(EntityManager entityManager, bool isMainThread) { m_EntityManager = GCHandle.Alloc(entityManager, GCHandleType.Weak); EntityComponentStore = entityManager.EntityComponentStore; EntityQueryManager = entityManager.EntityQueryManager; DependencyManager = entityManager.DependencyManager; m_IsMainThread = isMainThread; m_EntityOnlyArchetype = default; }
internal EntityManager(World world) { TypeManager.Initialize(); StructuralChange.Initialize(); EntityCommandBuffer.Initialize(); m_World = world; m_DependencyManager = (ComponentDependencyManager *)UnsafeUtility.Malloc(sizeof(ComponentDependencyManager), 64, Allocator.Persistent); m_DependencyManager->OnCreate(); m_EntityComponentStore = Entities.EntityComponentStore.Create(world.SequenceNumber << 32); m_EntityQueryManager = Unity.Entities.EntityQueryManager.Create(m_DependencyManager); m_ManagedComponentStore = new ManagedComponentStore(); m_EntityDataAccess = new EntityDataAccess(this, true); m_ExclusiveEntityTransaction = new ExclusiveEntityTransaction(this); m_UniversalQuery = CreateEntityQuery( new EntityQueryDesc { Options = EntityQueryOptions.IncludePrefab | EntityQueryOptions.IncludeDisabled } ); m_UniversalQueryWithChunks = CreateEntityQuery( new EntityQueryDesc { All = new[] { ComponentType.ReadWrite <ChunkHeader>() }, Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab }, new EntityQueryDesc { Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab } ); #if ENABLE_UNITY_COLLECTIONS_CHECKS m_UniversalQuery._DisallowDisposing = "EntityManager.UniversalQuery may not be disposed"; m_UniversalQueryWithChunks._DisallowDisposing = "EntityManager.UniversalQuery may not be disposed"; #endif }
public static void Create(EntityQueryManager *queryManager, ComponentDependencyManager *dependencyManager) { queryManager->m_DependencyManager = dependencyManager; queryManager->m_GroupDataChunkAllocator = new BlockAllocator(AllocatorManager.Persistent, 16 * 1024 * 1024); // 16MB should be enough ref var groupCache = ref UnsafeUtility.As <UntypedUnsafeHashMap, UnsafeMultiHashMap <int, int> >(ref queryManager->m_EntityGroupDataCacheUntyped);