Update AssetSystem

This commit is contained in:
hevinci
2022-03-21 23:43:11 +08:00
parent fa0009685d
commit 2bf36ebd8b
18 changed files with 383 additions and 446 deletions

View File

@@ -1,69 +1,19 @@
using System.Collections;
using UnityEngine;
using UnityEngine;
namespace YooAsset
{
public struct AssetOperationHandle : IEnumerator
public class AssetOperationHandle : OperationHandleBase
{
private IAssetProvider _provider;
private System.Action<AssetOperationHandle> _callback;
internal AssetOperationHandle(IAssetProvider provider)
internal AssetOperationHandle(AssetProviderBase provider) : base(provider)
{
_provider = provider;
}
/// <summary>
/// 句柄是否有效AssetFileLoader销毁会导致所有句柄失效
/// </summary>
public bool IsValid
internal override void InvokeCallback()
{
get
if (IsValid)
{
return _provider != null && _provider.IsValid;
}
}
/// <summary>
/// 当前状态
/// </summary>
public EOperationStatus Status
{
get
{
if (IsValid == false)
return EOperationStatus.None;
if (_provider.Status == AssetProviderBase.EStatus.Fail)
return EOperationStatus.Failed;
else if (_provider.Status == AssetProviderBase.EStatus.Success)
return EOperationStatus.Succeed;
else
return EOperationStatus.None;
}
}
/// <summary>
/// 加载进度
/// </summary>
public float Progress
{
get
{
if (IsValid == false)
return 0;
return _provider.Progress;
}
}
/// <summary>
/// 是否加载完毕
/// </summary>
public bool IsDone
{
get
{
if (IsValid == false)
return false;
return _provider.IsDone;
_callback?.Invoke(this);
}
}
@@ -79,13 +29,13 @@ namespace YooAsset
if (_provider.IsDone)
value.Invoke(this);
else
_provider.Callback += value;
_callback += value;
}
remove
{
if (IsValid == false)
throw new System.Exception($"{nameof(AssetOperationHandle)} is invalid");
_provider.Callback -= value;
_callback -= value;
}
}
@@ -102,32 +52,6 @@ namespace YooAsset
}
}
/// <summary>
/// 资源对象集合
/// </summary>
public UnityEngine.Object[] AllAssets
{
get
{
if (IsValid == false)
return null;
return _provider.AllAssets;
}
}
/// <summary>
/// 扩展的实例对象
/// </summary>
public IAssetInstance AssetInstance
{
get
{
if (IsValid == false)
return null;
return _provider.AssetInstance;
}
}
/// <summary>
/// 初始化的游戏对象只限于请求的资源对象类型为GameObject
/// </summary>
@@ -143,17 +67,6 @@ namespace YooAsset
}
}
/// <summary>
/// 释放资源句柄
/// </summary>
public void Release()
{
if (IsValid == false)
return;
_provider.Release();
_provider = null;
}
/// <summary>
/// 等待异步执行完毕
/// </summary>
@@ -163,28 +76,5 @@ namespace YooAsset
return;
_provider.WaitForAsyncComplete();
}
#region
/// <summary>
/// 异步操作任务
/// </summary>
public System.Threading.Tasks.Task<object> Task
{
get { return _provider.Task; }
}
// 协程相关
bool IEnumerator.MoveNext()
{
return !IsDone;
}
void IEnumerator.Reset()
{
}
object IEnumerator.Current
{
get { return AssetObject; }
}
#endregion
}
}

View File

@@ -0,0 +1,104 @@
using System.Collections;
namespace YooAsset
{
public abstract class OperationHandleBase : IEnumerator
{
internal AssetProviderBase _provider { private set; get; }
internal OperationHandleBase(AssetProviderBase provider)
{
_provider = provider;
}
internal abstract void InvokeCallback();
/// <summary>
/// 当前状态
/// </summary>
public EOperationStatus Status
{
get
{
if (IsValid == false)
return EOperationStatus.None;
if (_provider.Status == AssetProviderBase.EStatus.Fail)
return EOperationStatus.Failed;
else if (_provider.Status == AssetProviderBase.EStatus.Success)
return EOperationStatus.Succeed;
else
return EOperationStatus.None;
}
}
/// <summary>
/// 加载进度
/// </summary>
public float Progress
{
get
{
if (IsValid == false)
return 0;
return _provider.Progress;
}
}
/// <summary>
/// 是否加载完毕
/// </summary>
public bool IsDone
{
get
{
if (IsValid == false)
return false;
return _provider.IsDone;
}
}
/// <summary>
/// 句柄是否有效
/// </summary>
public bool IsValid
{
get
{
return _provider != null && _provider.IsDestroyed == false;
}
}
/// <summary>
/// 释放句柄
/// </summary>
public void Release()
{
if (IsValid == false)
return;
_provider.ReleaseHandle(this);
_provider = null;
}
#region
/// <summary>
/// 异步操作任务
/// </summary>
public System.Threading.Tasks.Task<object> Task
{
get { return _provider.Task; }
}
// 协程相关
bool IEnumerator.MoveNext()
{
return !IsDone;
}
void IEnumerator.Reset()
{
}
object IEnumerator.Current
{
get { return _provider; }
}
#endregion
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a9f5acda1a4584648af7b47e19a0d24f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,73 @@

namespace YooAsset
{
public class SceneOperationHandle : OperationHandleBase
{
private System.Action<SceneOperationHandle> _callback;
internal SceneOperationHandle(AssetProviderBase provider) : base(provider)
{
}
internal override void InvokeCallback()
{
if (IsValid)
{
_callback?.Invoke(this);
}
}
/// <summary>
/// 完成委托
/// </summary>
public event System.Action<SceneOperationHandle> Completed
{
add
{
if (IsValid == false)
throw new System.Exception($"{nameof(SceneOperationHandle)} is invalid");
if (_provider.IsDone)
value.Invoke(this);
else
_callback += value;
}
remove
{
if (IsValid == false)
throw new System.Exception($"{nameof(SceneOperationHandle)} is invalid");
_callback -= value;
}
}
/// <summary>
/// 场景对象
/// </summary>
public UnityEngine.SceneManagement.Scene Scene
{
get
{
if (IsValid == false)
return new UnityEngine.SceneManagement.Scene();
return _provider.Scene;
}
}
/// <summary>
/// 激活场景
/// </summary>
public bool ActivateScene()
{
if (IsValid == false)
return false;
if (Scene.IsValid() && Scene.isLoaded)
{
return UnityEngine.SceneManagement.SceneManager.SetActiveScene(Scene);
}
else
{
YooLogger.Warning($"Scene is invalid or not loaded : {Scene.name}");
return false;
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c5d788ba2dd3c5243ae2e0be8e780825
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: