示例#1
0
        /// <summary>
        /// Downloads all files asynchronously.
        /// </summary>
        public async Task DownloadAllAsync()
        {
            var skillTreeTask = DownloadSkillTreeToFileAsync();

            var treeString  = await skillTreeTask;
            var inTree      = new PassiveTreeViewModel(treeString);
            var spritesTask = DownloadSkillNodeSpritesAsync(inTree);
            var assetsTask  = DownloadAssetsAsync(inTree);

            await Task.WhenAll(spritesTask, assetsTask);
        }
示例#2
0
        /// <summary>
        /// Downloads the asset images mentioned in the provided tree asynchronously.
        /// Existing files are not overriden.
        /// </summary>
        /// <param name="inTree"></param>
        /// <param name="reportProgress">If specified, it is called to set this method's progress as a value
        /// from 0 to 1.</param>
        /// <returns></returns>
        internal async Task DownloadAssetsAsync(PassiveTreeViewModel inTree, Action <double>?reportProgress = null)
        {
            Directory.CreateDirectory(_tempAssetsPath);
            var zoomLevel        = inTree.ImageZoomLevels[inTree.MaxImageZoomLevelIndex].ToString(CultureInfo.InvariantCulture);
            var perAssetProgress = 1.0 / inTree.Assets.Count;
            var progress         = 0.0;

            foreach (var asset in inTree.Assets)
            {
                var path = _tempAssetsPath + asset.Key + ".png";
                var url  = asset.Value.GetValueOrDefault(zoomLevel, () => asset.Value.Values.First());
                await DownloadAsync(url, path);

                progress += perAssetProgress;
                reportProgress?.Invoke(progress);
            }
        }
示例#3
0
        /// <summary>
        /// Downloads the node sprite images mentioned in the provided tree asynchronously.
        /// Existing files are not overriden.
        /// </summary>
        /// <param name="inTree"></param>
        /// <param name="reportProgress">If specified, it is called to set this method's progress as a value
        /// from 0 to 1.</param>
        /// <returns></returns>
        internal async Task DownloadSkillNodeSpritesAsync(PassiveTreeViewModel inTree,
                                                          Action <double>?reportProgress = null)
        {
            Directory.CreateDirectory(_tempAssetsPath);
            var perSpriteProgress = 1.0 / inTree.SkillSprites.Count;
            var progress          = 0.0;

            foreach (var obj in inTree.SkillSprites)
            {
                var sprite = obj.Value[inTree.MaxImageZoomLevelIndex];
                var path   = _tempAssetsPath + sprite.FileName;
                var url    = SpriteUrl + sprite.FileName;
                if (path.Contains('?'))
                {
                    path = path.Remove(path.IndexOf('?'));
                }
                await DownloadAsync(url, path);

                progress += perSpriteProgress;
                reportProgress?.Invoke(progress);
            }
        }