| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | using System;using System.Collections;namespace YooAsset{	public abstract class OperationHandleBase : IEnumerator	{		private readonly AssetInfo _assetInfo;		internal ProviderBase Provider { private set; get; }		internal OperationHandleBase(ProviderBase provider)		{			Provider = provider;			_assetInfo = provider.MainAssetInfo;		}		internal abstract void InvokeCallback();		/// <summary>		/// 获取资源信息		/// </summary>		public AssetInfo GetAssetInfo()		{			return _assetInfo;		}		/// <summary>		/// 获取下载报告		/// </summary>		public DownloadReport GetDownloadReport()		{			if (IsValidWithWarning == false)			{				return DownloadReport.CreateDefaultReport();			}			return Provider.GetDownloadReport();		}		/// <summary>		/// 当前状态		/// </summary>		public EOperationStatus Status		{			get			{				if (IsValidWithWarning == false)					return EOperationStatus.None;				if (Provider.Status == ProviderBase.EStatus.Failed)					return EOperationStatus.Failed;				else if (Provider.Status == ProviderBase.EStatus.Succeed)					return EOperationStatus.Succeed;				else					return EOperationStatus.None;			}		}		/// <summary>		/// 最近的错误信息		/// </summary>		public string LastError		{			get			{				if (IsValidWithWarning == false)					return string.Empty;				return Provider.LastError;			}		}		/// <summary>		/// 加载进度		/// </summary>		public float Progress		{			get			{				if (IsValidWithWarning == false)					return 0;				return Provider.Progress;			}		}		/// <summary>		/// 是否加载完毕		/// </summary>		public bool IsDone		{			get			{				if (IsValidWithWarning == false)					return false;				return Provider.IsDone;			}		}		/// <summary>		/// 句柄是否有效		/// </summary>		public bool IsValid		{			get			{				if (Provider != null && Provider.IsDestroyed == false)					return true;				else					return false;			}		}		/// <summary>		/// 句柄是否有效		/// </summary>		internal bool IsValidWithWarning		{			get			{				if (Provider != null && Provider.IsDestroyed == false)				{					return true;				}				else				{					if (Provider == null)						YooLogger.Warning($"Operation handle is released : {_assetInfo.AssetPath}");					else if (Provider.IsDestroyed)						YooLogger.Warning($"Provider is destroyed : {_assetInfo.AssetPath}");					return false;				}			}		}		/// <summary>		/// 释放句柄		/// </summary>		internal void ReleaseInternal()		{			if (IsValidWithWarning == false)				return;			Provider.ReleaseHandle(this);			Provider = null;		}		#region 异步操作相关		/// <summary>		/// 异步操作任务		/// </summary>		public System.Threading.Tasks.Task Task		{			get { return Provider.Task; }		}		// 协程相关		bool IEnumerator.MoveNext()		{			return !IsDone;		}		void IEnumerator.Reset()		{		}		object IEnumerator.Current		{			get { return Provider; }		}		#endregion	}}
 |