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(); }
public EntityArray GetEntityArray(ForEachComponentGroupFilter filter, int filterIdx) { EntityArray res; var iterator = filter.ItemIterator[filterIdx]; GetEntityArray(ref iterator, filter.ItemLength[filterIdx], out res); return(res); }
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); }
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); }