using System; using Cysharp.Threading.Tasks; using UnityEngine; #if YooAssets using YooAsset; #endif namespace Stary.Evo.TableTextConversion { public interface IUITableDataCore : ITableDataCore { UniTask GetUIAssetInfo(string uiid); UniTask GetSpriteAsset(string uiid); } #if YooAssets public class UITableDataCore : IUITableDataCore, IDisposable { public string TableName => "Config_UITableData"; public bool IsLoad { get; set; } private Stary.Evo.TableTextConversion.UITableData uiTableDatas; public async UniTask LoadData() { var handle = YooAssets.LoadAssetAsync(TableName); await handle.Task; uiTableDatas = handle.GetAssetObject(); if (uiTableDatas == null) { Debug.LogError($"加载UI表失败,请排查config下是否存在【{TableName}】表"); return; } IsLoad = true; } public async UniTask GetUIAssetInfo(string uiid) { if (!IsLoad) { await LoadData(); } var info = uiTableDatas.infos.Find(x => x.uiid == uiid); if (info != null && !info.filename.Contains("Sprites_")) { info.filename = "Sprites_" + info.filename; } return info; } public async UniTask GetSpriteAsset(string uiid) { if (!IsLoad) { await LoadData(); } var info = await GetUIAssetInfo(uiid); var handle = YooAssets.LoadAssetAsync(info.filename); await handle.Task; if (handle.Status == EOperationStatus.Succeed) { return handle.GetAssetObject(); } else { Debug.LogError( $"加载音频失败,错误的id为:{uiid},错误的音频名称为:{info.filename},错误的错误信息为:{handle.LastError}"); return null; } } public void Dispose() { uiTableDatas = null; } } #endif }