Exemple #1
0
        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;
        }
Exemple #2
0
    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);