// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2022-02-23
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
using UnityEngine;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;
namespace G.UI
{
///
///
///
public class ChaWidget : KUIWidget
{
#region Auto Generate
#pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
#pragma warning restore CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
#endregion
#region Field
string _lastChaAsset;
string _lastWeaponAsset;
AsyncOperationHandle _chaHandle;
AsyncOperationHandle _weaponHandle;
#endregion
#region Method
///
///
///
///
///
///
public void Show(string chaSkinAsset, string weaponSkinAsset, Callback2 callback)
{
StartCoroutine(ShowSkinCO(chaSkinAsset, weaponSkinAsset, callback));
}
///
///
///
///
///
///
private System.Collections.IEnumerator ShowSkinCO(string chaAsset, string weaponAsset, Callback2 callback)
{
Sprite mainWeaponSprite = null;
Sprite subWeaponSprite = null;
AsyncOperationHandle lastWeaponHandle = default;
if (!_weaponHandle.IsValid() || _weaponHandle.Result.name != weaponAsset)
{
//if (_weaponHandle.IsValid())
//{
// AssetProxy.Instance.Release(_weaponHandle);
//}
lastWeaponHandle = _weaponHandle;
if (!string.IsNullOrEmpty(weaponAsset))
{
_weaponHandle = AssetProxy.Instance.GetAssetAsync(weaponAsset);
yield return _weaponHandle;
if (_weaponHandle.Status == AsyncOperationStatus.Succeeded)
{
mainWeaponSprite = _weaponHandle.Result.mainHand;
subWeaponSprite = _weaponHandle.Result.subHand;
}
}
}
if (!_chaHandle.IsValid() || _chaHandle.Result.name != chaAsset)
{
if (_chaHandle.IsValid())
{
AssetProxy.Instance.ReleaseInstance(_chaHandle);
}
_chaHandle = AssetProxy.Instance.InstantiateAsync(chaAsset, this.transform);
yield return _chaHandle;
_chaHandle.Result.name = chaAsset;
if (_weaponHandle.IsValid())
{
mainWeaponSprite = _weaponHandle.Result.mainHand;
subWeaponSprite = _weaponHandle.Result.subHand;
}
}
if (_chaHandle.IsValid() && mainWeaponSprite != null)
{
var es = _chaHandle.Result.GetComponent();
es.Equip(mainWeaponSprite, EquipSystem.EquipType.MainWp);
if (subWeaponSprite != null)
{
es.Equip(subWeaponSprite, EquipSystem.EquipType.SubWp);
}
}
if (lastWeaponHandle.IsValid())
{
AssetProxy.Instance.Release(lastWeaponHandle);
}
callback?.Invoke(0, "");
}
#endregion
#region Unity
///
///
///
private void Awake()
{
SetViewData();
}
#endregion
}
}