using System; using PhxhSDK; using Framework; using UnityEngine; using System.Linq; using Framework.Constants; using Cysharp.Threading.Tasks; using System.Collections.Generic; public class BuildSelectManager : Singlenton, IInitable { public class BuildSelectItem { public Sprite BuildSprite; public string BuildID; public string PathSprite; public int Index; } public Dictionary BuildSelectItems; private bool _isInit; public async UniTask InitAsync() { if (_isInit) return; try { BuildSelectItems = new Dictionary(); var buildConfig = TableManager.Instance.Tables.BuildConfig.DataMap; var index = 0; foreach (var build in buildConfig) { var id = build.Key; var path = string.Format(PathConstants.BuildSelect, id); var sprite = await AssetManager.Instance.LoadAssetAsync(path); var buildItem = new BuildSelectItem { BuildSprite = sprite, BuildID = id, PathSprite = path, Index = index }; BuildSelectItems.Add(id, buildItem); index++; } //添加敬请期待 var stayTurnSprite = await AssetManager.Instance.LoadAssetAsync(PathConstants.BuildSelectStayTurn); var buildStayTurnItem = new BuildSelectItem { BuildSprite = stayTurnSprite, BuildID = "None", PathSprite = PathConstants.BuildSelectStayTurn, Index = index }; BuildSelectItems.Add("None", buildStayTurnItem); _isInit = true; } catch (Exception e) { DebugUtil.LogError("BuildSelectManager.InitAsync Error: {0}", e); } } public BuildSelectItem GetBuildSelectItem(string buildID) { return BuildSelectItems.GetValueOrDefault(buildID); } public BuildSelectItem GetNextBuildSelectItem(int index) { return BuildSelectItems.Values.FirstOrDefault(item => item.Index == index + 1); } public BuildSelectItem GetPreviousBuildSelectItem(int index) { return BuildSelectItems.Values.FirstOrDefault(item => item.Index == index - 1); } public void Init() { } public void Release() { foreach (var buildSelectItem in BuildSelectItems) { AssetManager.Instance.Unload(buildSelectItem.Value.PathSprite); buildSelectItem.Value.BuildSprite = null; } BuildSelectItems = null; } }