123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- namespace YooAsset
- {
- public sealed class AssetOperationHandle : OperationHandleBase, IDisposable
- {
- private System.Action<AssetOperationHandle> _callback;
- internal AssetOperationHandle(ProviderBase provider) : base(provider)
- {
- }
- internal override void InvokeCallback()
- {
- _callback?.Invoke(this);
- }
- /// <summary>
- /// 完成委托
- /// </summary>
- public event System.Action<AssetOperationHandle> Completed
- {
- add
- {
- if (IsValidWithWarning == false)
- throw new System.Exception($"{nameof(AssetOperationHandle)} is invalid");
- if (Provider.IsDone)
- value.Invoke(this);
- else
- _callback += value;
- }
- remove
- {
- if (IsValidWithWarning == false)
- throw new System.Exception($"{nameof(AssetOperationHandle)} is invalid");
- _callback -= value;
- }
- }
- /// <summary>
- /// 等待异步执行完毕
- /// </summary>
- public void WaitForAsyncComplete()
- {
- if (IsValidWithWarning == false)
- return;
- Provider.WaitForAsyncComplete();
- }
- /// <summary>
- /// 释放资源句柄
- /// </summary>
- public void Release()
- {
- this.ReleaseInternal();
- }
- /// <summary>
- /// 释放资源句柄
- /// </summary>
- public void Dispose()
- {
- this.ReleaseInternal();
- }
- /// <summary>
- /// 资源对象
- /// </summary>
- public UnityEngine.Object AssetObject
- {
- get
- {
- if (IsValidWithWarning == false)
- return null;
- return Provider.AssetObject;
- }
- }
- /// <summary>
- /// 获取资源对象
- /// </summary>
- /// <typeparam name="TAsset">资源类型</typeparam>
- public TAsset GetAssetObject<TAsset>() where TAsset : UnityEngine.Object
- {
- if (IsValidWithWarning == false)
- return null;
- return Provider.AssetObject as TAsset;
- }
- /// <summary>
- /// 同步初始化游戏对象
- /// </summary>
- public GameObject InstantiateSync()
- {
- return InstantiateSyncInternal(false, Vector3.zero, Quaternion.identity, null, false);
- }
- public GameObject InstantiateSync(Transform parent)
- {
- return InstantiateSyncInternal(false, Vector3.zero, Quaternion.identity, parent, false);
- }
- public GameObject InstantiateSync(Transform parent, bool worldPositionStays)
- {
- return InstantiateSyncInternal(false, Vector3.zero, Quaternion.identity, parent, worldPositionStays);
- }
- public GameObject InstantiateSync(Vector3 position, Quaternion rotation)
- {
- return InstantiateSyncInternal(true, position, rotation, null, false);
- }
- public GameObject InstantiateSync(Vector3 position, Quaternion rotation, Transform parent)
- {
- return InstantiateSyncInternal(true, position, rotation, parent, false);
- }
- /// <summary>
- /// 异步初始化游戏对象
- /// </summary>
- public InstantiateOperation InstantiateAsync()
- {
- return InstantiateAsyncInternal(false, Vector3.zero, Quaternion.identity, null, false);
- }
- public InstantiateOperation InstantiateAsync(Transform parent)
- {
- return InstantiateAsyncInternal(false, Vector3.zero, Quaternion.identity, parent, false);
- }
- public InstantiateOperation InstantiateAsync(Transform parent, bool worldPositionStays)
- {
- return InstantiateAsyncInternal(false, Vector3.zero, Quaternion.identity, parent, worldPositionStays);
- }
- public InstantiateOperation InstantiateAsync(Vector3 position, Quaternion rotation)
- {
- return InstantiateAsyncInternal(true, position, rotation, null, false);
- }
- public InstantiateOperation InstantiateAsync(Vector3 position, Quaternion rotation, Transform parent)
- {
- return InstantiateAsyncInternal(true, position, rotation, parent, false);
- }
- private GameObject InstantiateSyncInternal(bool setPositionAndRotation, Vector3 position, Quaternion rotation, Transform parent, bool worldPositionStays)
- {
- if (IsValidWithWarning == false)
- return null;
- if (Provider.AssetObject == null)
- return null;
- return InstantiateOperation.InstantiateInternal(Provider.AssetObject, setPositionAndRotation, position, rotation, parent, worldPositionStays);
- }
- private InstantiateOperation InstantiateAsyncInternal(bool setPositionAndRotation, Vector3 position, Quaternion rotation, Transform parent, bool worldPositionStays)
- {
- InstantiateOperation operation = new InstantiateOperation(this, setPositionAndRotation, position, rotation, parent, worldPositionStays);
- OperationSystem.StartOperation(operation);
- return operation;
- }
- }
- }
|