using Cysharp.Threading.Tasks; using Framework; using PhxhSDK; using System.Collections.Generic; using UnityEngine; public class TeamMarkManager : Singlenton, IInitable { public class TeamMark { public int ID; public int ItemID; public string nameKey; public string iconKey; public string imgPathKey; public string sourcePathKey; } private List allMarks = new List(); private List ShowMarks = new(); private Dictionary iconPath = new(); private Dictionary imgPath = new(); private int unlockMarksCnt = 0; private int selectedMarkIndex = -1; private bool initialized = false; void initList() { if(initialized) { return; } var TeamMarkCfg = TableManager.Instance.Tables.TeamMark; allMarks.Clear(); iconPath.Clear(); imgPath.Clear(); foreach (var item in TeamMarkCfg.DataList) { TeamMark mark = new TeamMark(); mark.ID = item.ID; mark.ItemID = item.ItemID; mark.nameKey = item.NameLocal; mark.iconKey = item.PreviewIconPath; mark.imgPathKey = item.BGIconPath; mark.sourcePathKey = item.AchieveRequirement; allMarks.Add(mark); iconPath.Add(mark.ID, mark.iconKey); imgPath.Add(mark.ID, mark.imgPathKey); } SetUnlockMarks(); initialized = true; } /// /// 调整ShowMarks的顺序,已解锁的放在前面 /// void SetUnlockMarks() { ShowMarks.Clear(); unlockMarksCnt = 0; for (int i = 0; i < allMarks.Count; i++) { if (CategoryManager.Instance.GetItemCount(allMarks[i].ItemID) > 0)//已解锁 { ShowMarks.Insert(unlockMarksCnt++, allMarks[i]);//已解锁的放在前面 } else { ShowMarks.Add(allMarks[i]);//未解锁的放在后面 } } } public void Init() { EventManager.Instance.Register(EventManager.EventName.ItemChange, SetUnlockMarks); } public void Release() { EventManager.Instance.Unregister(EventManager.EventName.ItemChange, SetUnlockMarks); } /// /// 由TeamMarkChoose调起 /// public List ShownList { get { if (!initialized) { initList(); } return ShowMarks; } } public int UnlockMarksCnt { get { return unlockMarksCnt; } } public int SelectedMarkIndex { get { return selectedMarkIndex; } set { selectedMarkIndex = value; } } public async UniTask GetMarkIcon(int MarkID) { initList(); if(iconPath.ContainsKey(MarkID)) { return await AssetManager.Instance.LoadAssetAsync(iconPath[MarkID]); } else { DebugUtil.LogError("TeamMarkManager.GetMarkIcon: iconPath not found, index = " + MarkID); return null; } } public async UniTask GetMarkImg(int MarkID) { initList(); if (imgPath.ContainsKey(MarkID)) { return await AssetManager.Instance.LoadAssetAsync(imgPath[MarkID]); } else { DebugUtil.LogError("TeamMarkManager.GetMarkImg: imgPath not found, MarkID = " + MarkID); return null; } } }