Exemple #1
0
    /// <summary>
    /// EntityManager.BeforeStructuralChange must be called before invoking this.
    /// ManagedComponentStore.Playback must be called after invoking this.
    /// EntityQueryManager.AddAdditionalArchetypes must be called after invoking this.
    /// Invoking this must be wrapped in ArchetypeChangeTracking.
    /// </summary>
    /// <param name="archetypeList"></param>
    /// <param name="filter"></param>
    /// <param name="componentType"></param>
    /// <exception cref="InvalidOperationException"></exception>
    public void RemoveComponentDuringStructuralChange(UnsafeMatchingArchetypePtrList archetypeList, EntityQueryFilter filter, ComponentType componentType)
    {
        if (!m_IsMainThread)
        {
            throw new InvalidOperationException("Must be called from the main thread");
        }

        using (var chunks = ChunkIterationUtility.CreateArchetypeChunkArray(archetypeList, Allocator.TempJob,
                                                                            ref filter, DependencyManager))
        {
            StructuralChange.RemoveComponentChunks(EntityComponentStore, (ArchetypeChunk *)NativeArrayUnsafeUtility.GetUnsafePtr(chunks), chunks.Length, componentType.TypeIndex);
        }
    }
Exemple #2
0
    internal void RemoveComponent(NativeArray <ArchetypeChunk> chunks, ComponentType componentType)
    {
        if (m_IsMainThread)
        {
            BeforeStructuralChange();
        }
        var archetypeChanges = EntityComponentStore->BeginArchetypeChangeTracking();

        StructuralChange.RemoveComponentChunks(EntityComponentStore, (ArchetypeChunk *)NativeArrayUnsafeUtility.GetUnsafePtr(chunks), chunks.Length, componentType.TypeIndex);

        EntityComponentStore->EndArchetypeChangeTracking(archetypeChanges, EntityQueryManager);
        PlaybackManagedChanges();
    }
Exemple #3
0
    internal void RemoveComponent(NativeArray <ArchetypeChunk> chunks, ComponentType componentType)
    {
        if (chunks.Length == 0)
        {
            return;
        }

        EntityComponentStore->AssertCanRemoveComponent(chunks, componentType);

        if (m_IsMainThread)
        {
            EntityManager.BeforeStructuralChange();
        }
        var archetypeChanges = EntityComponentStore->BeginArchetypeChangeTracking();

        StructuralChange.RemoveComponentChunks(EntityComponentStore, (ArchetypeChunk *)NativeArrayUnsafeUtility.GetUnsafePtr(chunks), chunks.Length, componentType.TypeIndex);

        var changedArchetypes = EntityComponentStore->EndArchetypeChangeTracking(archetypeChanges);

        EntityQueryManager.AddAdditionalArchetypes(changedArchetypes);
        ManagedComponentStore.Playback(ref EntityComponentStore->ManagedChangesTracker);
    }