Exemple #1
0
        /// <summary>Load an <see cref="Asset"/>.</summary>
        /// <param name="loader"></param>
        /// <param name="formats"></param>
        /// <param name="resolveConflict"></param>
        /// <param name="progress"></param>
        /// <param name="progressUpdateRate"></param>
        /// <returns></returns>
        public static Task <Asset> LoadAssetAsync(AssetLoader loader, IEnumerable <AssetFormat> formats, ResolveLoadConflictCallback resolveConflict = null, AssetLoaderProgressCallback progress = null, TimeSpan?progressUpdateRate = null)
        {
            TimeSpan          progressUpdateRateValue = progressUpdateRate.GetValueOrDefault(TimeSpan.FromSeconds(0.1));
            LoadMatchStrength matchStrength;
            AssetFormat       format = LoadMatchAsset(out matchStrength, loader, formats, resolveConflict);

            if (loader.Context != null)
            {
                loader.Context.LoadErrors = loader.Errors;
            }

            return(new Task <Asset>(() => {
                Asset asset = null;
                bool complete = false;

                Thread loadThread = new Thread(() => {
                    asset = format.Load(loader);
                    complete = true;
                });

                loadThread.Start();

                while (!complete)
                {
                    if (!loadThread.IsAlive)
                    {
                        throw new InvalidOperationException("The load operation failed.");
                    }
                    Thread.Sleep(progressUpdateRateValue);
                    if (progress != null)
                    {
                        progress.Invoke(loader);
                    }
                }

                return asset;
            }));
        }
Exemple #2
0
 /// <summary>Load an <see cref="Asset"/> asynchronously.</summary>
 /// <param name="reader"></param>
 /// <param name="name"></param>
 /// <param name="fileManager">The <see cref="FileManager"/> to use. If <c>null</c> (the default), the system file manager is used.</param>
 /// <param name="context"></param>
 /// <param name="conflictResolver"></param>
 /// <param name="progressMonitor"></param>
 /// <param name="progressUpdateRate"></param>
 /// <returns></returns>
 public Task <Asset> LoadAsync(BinaryReader reader, string name, FileManager fileManager, Asset context = null, ResolveLoadConflictCallback conflictResolver = null, AssetLoaderProgressCallback progressMonitor = null, TimeSpan?progressUpdateRate = null)
 {
     return(AssetFormat.LoadAssetAsync(new AssetLoader(this, reader, name, fileManager, context), AllEnabledFormats, conflictResolver, progressMonitor, progressUpdateRate));
 }
Exemple #3
0
        /// <summary>Load an <see cref="Asset"/> from a file asynchronously.</summary>
        /// <param name="path"></param>
        /// <param name="fileManager">The <see cref="FileManager"/> to use. If <c>null</c> (the default), the system file manager is used.</param>
        /// <param name="context"></param>
        /// <param name="byteOrder"></param>
        /// <param name="conflictResolver"></param>
        /// <param name="progressMonitor"></param>
        /// <param name="progressUpdateRate"></param>
        /// <returns></returns>
        public Task <Asset> LoadFileAsync(string path, FileManager fileManager = null, Asset context = null, ByteOrder byteOrder = ByteOrder.LittleEndian, ResolveLoadConflictCallback conflictResolver = null, AssetLoaderProgressCallback progressMonitor = null, TimeSpan?progressUpdateRate = null)
        {
            if (fileManager == null)
            {
                fileManager = FileManager.System;
            }
            Stream stream = fileManager.OpenRead(path);

            return(LoadAsync(stream, path, fileManager, context, byteOrder, conflictResolver, progressMonitor, progressUpdateRate));
        }
Exemple #4
0
 /// <summary>Load an <see cref="Asset"/> asynchronously.</summary>
 /// <param name="stream"></param>
 /// <param name="name"></param>
 /// <param name="fileManager">The <see cref="FileManager"/> to use. If <c>null</c> (the default), the system file manager is used.</param>
 /// <param name="context"></param>
 /// <param name="byteOrder"></param>
 /// <param name="conflictResolver"></param>
 /// <param name="progressMonitor"></param>
 /// <param name="progressUpdateRate"></param>
 /// <returns></returns>
 public Task <Asset> LoadAsync(Stream stream, string name, FileManager fileManager = null, Asset context = null, ByteOrder byteOrder = ByteOrder.LittleEndian, ResolveLoadConflictCallback conflictResolver = null, AssetLoaderProgressCallback progressMonitor = null, TimeSpan?progressUpdateRate = null)
 {
     return(LoadAsync(BigEndianBinaryReader.Create(byteOrder, stream), name, fileManager, context, conflictResolver, progressMonitor, progressUpdateRate));
 }
        /// <summary>Load an <see cref="Asset"/>.</summary>
        /// <param name="loader"></param>
        /// <param name="formats"></param>
        /// <param name="resolveConflict"></param>
        /// <param name="progress"></param>
        /// <param name="progressUpdateRate"></param>
        /// <returns></returns>
        public static Task<Asset> LoadAssetAsync(AssetLoader loader, IEnumerable<AssetFormat> formats, ResolveLoadConflictCallback resolveConflict = null, AssetLoaderProgressCallback progress = null, TimeSpan? progressUpdateRate = null)
        {
            TimeSpan progressUpdateRateValue = progressUpdateRate.GetValueOrDefault(TimeSpan.FromSeconds(0.1));
            LoadMatchStrength matchStrength;
            AssetFormat format = LoadMatchAsset(out matchStrength, loader, formats, resolveConflict);
            if (loader.Context != null)
                loader.Context.LoadErrors = loader.Errors;

            return new Task<Asset>(() => {
                Asset asset = null;
                bool complete = false;

                Thread loadThread = new Thread(() => {
                    asset = format.Load(loader);
                    complete = true;
                });

                loadThread.Start();

                while (!complete) {
                    if (!loadThread.IsAlive)
                        throw new InvalidOperationException("The load operation failed.");
                    Thread.Sleep(progressUpdateRateValue);
                    if (progress != null)
                        progress.Invoke(loader);
                }

                return asset;
            });
        }