Exemple #1
0
        internal void GetSharedComponentDataArray <T>(ref ComponentChunkIterator iterator, int indexInComponentGroup, int length, out SharedComponentDataArray <T> output) where T : struct, ISharedComponentData
        {
            iterator.IndexInComponentGroup = indexInComponentGroup;
#if ENABLE_UNITY_COLLECTIONS_CHECKS
            var typeIndex = m_ComponentGroupData.ComponentTypeIndex(indexInComponentGroup);
            output = new SharedComponentDataArray <T>(m_TypeManager.GetSharedComponentDataManager(), indexInComponentGroup, iterator, length, m_SafetyManager.GetSafetyHandle(typeIndex, true));
#else
            output = new SharedComponentDataArray <T>(m_TypeManager.GetSharedComponentDataManager(), indexInComponentGroup, iterator, length);
#endif
        }
Exemple #2
0
        internal ComponentGroupData GetVariation <SharedComponent1, SharedComponent2>(ArchetypeManager typeManager, SharedComponent1 sharedComponent1, SharedComponent2 sharedComponent2)
            where SharedComponent1 : struct, ISharedComponentData
            where SharedComponent2 : struct, ISharedComponentData
        {
            var       componentIndex1 = GetIndexInComponentGroup(TypeManager.GetTypeIndex <SharedComponent1>());
            var       componentIndex2 = GetIndexInComponentGroup(TypeManager.GetTypeIndex <SharedComponent2>());
            const int filteredCount   = 2;

            var filtered = (int *)UnsafeUtility.Malloc((filteredCount * 2 + 1) * sizeof(int), sizeof(int), Allocator.Temp);

            filtered[0] = filteredCount;
            filtered[1] = componentIndex1;
            filtered[2] = typeManager.GetSharedComponentDataManager().InsertSharedComponent(sharedComponent1);
            filtered[3] = componentIndex2;
            filtered[4] = typeManager.GetSharedComponentDataManager().InsertSharedComponent(sharedComponent2);

            return(new ComponentGroupData(this, filtered));
        }
Exemple #3
0
 public void Dispose()
 {
     for (var i = 0; i < SharedComponentIndex.Length; ++i)
     {
         TypeManager.GetSharedComponentDataManager().RemoveReference(SharedComponentIndex[i]);
     }
     ItemIterator.Dispose();
     ItemLength.Dispose();
     SharedComponentIndex.Dispose();
 }
        internal void ResetFilter(ArchetypeManager typeManager)
        {
            var filteredCount = m_Filter.FilterCount;

            fixed(int *sharedComponentIndexPtr = m_Filter.SharedComponentIndex)
            {
                for (var i = 0; i < filteredCount; ++i)
                {
                    typeManager.GetSharedComponentDataManager().RemoveReference(sharedComponentIndexPtr[i]);
                }
            }
        }
Exemple #5
0
        internal void RemoveFiterReferences(ArchetypeManager typeManager)
        {
            if (m_FilteredSharedComponents == null)
            {
                return;
            }

            var filteredCount = m_FilteredSharedComponents[0];
            var filtered      = m_FilteredSharedComponents + 1;

            for (var i = 0; i < filteredCount; ++i)
            {
                var sharedComponentIndex = filtered[i * 2 + 1];
                typeManager.GetSharedComponentDataManager().RemoveReference(sharedComponentIndex);
            }

            UnsafeUtility.Free(m_FilteredSharedComponents, Allocator.Temp);
        }