Пример #1
0
        internal void GetComponentChunkIterators(ForEachComponentGroupFilter forEachFilter)
        {
            var numFilters = forEachFilter.SharedComponentIndex.Length;

            var firstArchetype     = new NativeArray <IntPtr>(numFilters, Allocator.Temp);
            var firstNonEmptyChunk = new NativeArray <IntPtr>(numFilters, Allocator.Temp);

            ComponentChunkIterator.CalculateInitialChunkIterators(m_GroupData->FirstMatchingArchetype,
                                                                  forEachFilter.IndexInComponentGroup, forEachFilter.SharedComponentIndex,
                                                                  firstArchetype, firstNonEmptyChunk, forEachFilter.ItemLength);

            for (var i = 0; i < numFilters; ++i)
            {
                var filter = new ComponentGroupFilter();
                filter.Type         = FilterType.SharedComponent;
                filter.Shared.Count = 1;
                filter.Shared.IndexInComponentGroup[0] = forEachFilter.IndexInComponentGroup;
                filter.Shared.SharedComponentIndex[0]  = forEachFilter.SharedComponentIndex[i];

                forEachFilter.ItemIterator[i] = new ComponentChunkIterator((MatchingArchetypes *)firstArchetype[i],
                                                                           m_EntityDataManager->GlobalSystemVersion, ref filter);
            }

            firstArchetype.Dispose();
            firstNonEmptyChunk.Dispose();
        }
Пример #2
0
        public EntityArray GetEntityArray(ForEachComponentGroupFilter filter, int filterIdx)
        {
            EntityArray res;
            var         iterator = filter.ItemIterator[filterIdx];

            GetEntityArray(ref iterator, filter.ItemLength[filterIdx], out res);
            return(res);
        }
Пример #3
0
        public ComponentDataArray <T> GetComponentDataArray <T>(ForEachComponentGroupFilter filter, int filterIdx)
            where T : struct, IComponentData
        {
            var indexInComponentGroup = GetIndexInComponentGroup(TypeManager.GetTypeIndex <T>());

            ComponentDataArray <T> res;
            var iterator = filter.ItemIterator[filterIdx];

            GetComponentDataArray(ref iterator, indexInComponentGroup, filter.ItemLength[filterIdx], out res);
            return(res);
        }
Пример #4
0
        public ForEachComponentGroupFilter CreateForEachFilter <SharedComponent1>(
            List <SharedComponent1> sharedComponent1)
            where SharedComponent1 : struct, ISharedComponentData
        {
            var forEachFilter = new ForEachComponentGroupFilter();

            forEachFilter.TypeManager  = ArchetypeManager;
            forEachFilter.ItemIterator =
                new NativeArray <ComponentChunkIterator>(sharedComponent1.Count, Allocator.Temp);
            forEachFilter.ItemLength            = new NativeArray <int>(sharedComponent1.Count, Allocator.Temp);
            forEachFilter.SharedComponentIndex  = new NativeArray <int>(sharedComponent1.Count, Allocator.Temp);
            forEachFilter.IndexInComponentGroup =
                GetIndexInComponentGroup(TypeManager.GetTypeIndex <SharedComponent1>());
            for (var i = 0; i < sharedComponent1.Count; ++i)
            {
                forEachFilter.SharedComponentIndex[i] = ArchetypeManager.GetSharedComponentDataManager()
                                                        .InsertSharedComponent(sharedComponent1[i]);
            }

            m_ComponentGroupData.GetComponentChunkIterators(forEachFilter);

            return(forEachFilter);
        }