Load() 공개 메소드

Load an Asset. This should have previously matched using LoadMatch.
public Load ( AssetLoader loader ) : Asset
loader AssetLoader
리턴 Asset
예제 #1
0
        /// <summary>Load an <see cref="Asset"/>.</summary>
        /// <param name="loader"></param>
        /// <param name="formats"></param>
        /// <param name="resolveConflict"></param>
        /// <returns></returns>
        public static Asset LoadAsset(AssetLoader loader, IEnumerable <AssetFormat> formats, ResolveLoadConflictCallback resolveConflict = null)
        {
            LoadMatchStrength matchStrength;
            AssetFormat       format = LoadMatchAsset(out matchStrength, loader, formats, resolveConflict);

            if (loader.Context != null)
            {
                loader.Context.LoadErrors = loader.Errors;
            }
            return(format.Load(loader));
        }
예제 #2
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;
            }));
        }