public IAsyncEnumerable <Item> GetItemsByIds( IReadOnlyCollection <int> itemIds, Language?language = default, MissingMemberBehavior missingMemberBehavior = default, IProgress <ICollectionContext>?progress = default, CancellationToken cancellationToken = default ) { var producer = SplitQuery.Create <int, Item>( async(range, ct) => { var request = new ItemsByIdsRequest(range) { Language = language, MissingMemberBehavior = missingMemberBehavior }; var response = await request.SendAsync(http, ct).ConfigureAwait(false); return(response.Values); }, progress ); return(producer.QueryAsync(itemIds, cancellationToken: cancellationToken)); }
// provides a closure around a split query private static Query CloseQuery(SplitQuery split) { return entity => split( entity.GetComponent<PositionComponent>(), entity.GetComponent<MovementComponent>(), entity.GetComponent<SpriteComponent>(), entity.GetComponent<InputComponent>(), entity.GetComponent<CollisionComponent>(), entity.GetComponent<LadderComponent>(), entity.GetComponent<TimerComponent>(), entity.GetComponent<HealthComponent>(), entity.GetComponent<StateComponent>(), entity.GetComponent<WeaponComponent>(), Game.CurrentGame.Player ); }