public static T[] ToComponentArray <T>(this EntityQuery group) where T : Component { int entityCount = group.CalculateEntityCount(); var arr = new T[entityCount]; var iterator = group.GetArchetypeChunkIterator(); var indexInEntityQuery = group.GetIndexInEntityQuery(TypeManager.GetTypeIndex <T>()); var entityCounter = 0; while (iterator.MoveNext()) { var chunk = iterator.CurrentArchetypeChunk; for (int entityIndex = 0; entityIndex < chunk.Count; ++entityIndex) { arr[entityCounter++] = (T)iterator.GetManagedObject(group.ManagedComponentStore, indexInEntityQuery, entityIndex); } } return(arr); }
public static T[] ToComponentArray <T>(this EntityQuery group) where T : Component { int length = group.CalculateLength(); ComponentChunkIterator iterator = group.GetComponentChunkIterator(); var indexInComponentGroup = group.GetIndexInEntityQuery(TypeManager.GetTypeIndex <T>()); iterator.IndexInEntityQuery = indexInComponentGroup; var arr = new T[length]; var cache = default(ComponentChunkCache); for (int i = 0; i < length; ++i) { if (i < cache.CachedBeginIndex || i >= cache.CachedEndIndex) { iterator.MoveToEntityIndexAndUpdateCache(i, out cache, true); } arr[i] = (T)iterator.GetManagedObject(group.ManagedComponentStore, cache.CachedBeginIndex, i); } return(arr); }