using System; using Cysharp.Threading.Tasks; using UnityEngine; using YooAsset; namespace Stary.Evo.TableTextConversion { public interface IUITableDataCore : ITableDataCore { UniTask GetUIInfo(string uiid); UniTask GetSprite(string uiid); } 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 GetUIInfo(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 GetSprite(string uiid) { if (!IsLoad) { await LoadData(); } var info = await GetUIInfo(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; } } }