示例#1
0
        public async Task <IEnumerable <Item> > LoadItems(IEnumerable <DestinyItemComponent> itemComponents,
                                                          IDictionary <long, DestinyItemInstanceComponent> itemInstances,
                                                          IDictionary <long, DestinyItemStatsComponent> itemStats,
                                                          IDictionary <long, DestinyItemSocketsComponent> itemSockets,
                                                          IEnumerable <Mod> mods, IEnumerable <Mod> shaders)
        {
            var tasks = itemComponents.Select(async itemComponent =>
            {
                var itemDef = await _cache.GetInventoryItemDef(itemComponent.ItemHash);
                var bucket  = await _cache.GetBucketDef(itemDef.Inventory.BucketTypeHash);

                return(new { itemComponent, itemDef, bucket });
            });

            var info = await Task.WhenAll(tasks);

            var info2 = info.Where(item => ShouldInclude(item.bucket));

            var itemTasks = info2.Select(async item =>
            {
                itemInstances.TryGetValue(item.itemComponent.ItemInstanceId, out var instance);
                itemStats.TryGetValue(item.itemComponent.ItemInstanceId, out var statsComponent);
                itemSockets.TryGetValue(item.itemComponent.ItemInstanceId, out var socketsComponent);

                var statsTask   = _statFactory.LoadStats(instance.PrimaryStat, statsComponent?.Stats);
                var socketsTask = _socketFactory.LoadActiveSockets(item.itemDef.Sockets, socketsComponent.Sockets);

                await Task.WhenAll(statsTask, socketsTask);

                return(new Item(_bungie.BaseUrl, item.itemDef, item.bucket, item.itemComponent.ItemInstanceId, instance,
                                statsTask.Result, socketsTask.Result));
            });

            var items = await Task.WhenAll(itemTasks);

            return(items);
        }