2024-10-12 14:05:35 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using Framework;
|
2024-10-10 15:12:01 +08:00
|
|
|
|
using PhxhSDK;
|
|
|
|
|
|
using System.Collections.Generic;
|
2024-10-12 14:05:35 +08:00
|
|
|
|
using UnityEngine;
|
2024-10-10 15:12:01 +08:00
|
|
|
|
|
|
|
|
|
|
public class TeamMarkManager : Singlenton<TeamMarkManager>, IInitable
|
|
|
|
|
|
{
|
|
|
|
|
|
public class TeamMark
|
|
|
|
|
|
{
|
|
|
|
|
|
public int ID;
|
|
|
|
|
|
public int ItemID;
|
|
|
|
|
|
public string nameKey;
|
|
|
|
|
|
public string iconKey;
|
|
|
|
|
|
public string imgPathKey;
|
|
|
|
|
|
public string sourcePathKey;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private List<TeamMark> allMarks = new List<TeamMark>();
|
|
|
|
|
|
private List<TeamMark> ShowMarks = new();
|
2024-10-12 14:05:35 +08:00
|
|
|
|
|
|
|
|
|
|
private Dictionary<int, string> iconPath = new();
|
|
|
|
|
|
private Dictionary<int, string> imgPath = new();
|
|
|
|
|
|
|
2024-10-10 15:12:01 +08:00
|
|
|
|
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();
|
2024-10-12 14:05:35 +08:00
|
|
|
|
iconPath.Clear();
|
|
|
|
|
|
imgPath.Clear();
|
|
|
|
|
|
|
2024-10-10 15:12:01 +08:00
|
|
|
|
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);
|
2024-10-12 14:05:35 +08:00
|
|
|
|
iconPath.Add(mark.ID, mark.iconKey);
|
|
|
|
|
|
imgPath.Add(mark.ID, mark.imgPathKey);
|
2024-10-10 15:12:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
SetUnlockMarks();
|
|
|
|
|
|
initialized = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-10-12 13:24:18 +08:00
|
|
|
|
/// 调整ShowMarks的顺序,已解锁的放在前面
|
2024-10-10 15:12:01 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
void SetUnlockMarks()
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowMarks.Clear();
|
|
|
|
|
|
unlockMarksCnt = 0;
|
|
|
|
|
|
for (int i = 0; i < allMarks.Count; i++)
|
|
|
|
|
|
{
|
2024-10-12 13:24:18 +08:00
|
|
|
|
if (CategoryManager.Instance.GetItemCount(allMarks[i].ItemID) > 0)//已解锁
|
2024-10-10 15:12:01 +08:00
|
|
|
|
{
|
2024-10-12 13:24:18 +08:00
|
|
|
|
ShowMarks.Insert(unlockMarksCnt++, allMarks[i]);//已解锁的放在前面
|
2024-10-10 15:12:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2024-10-12 13:24:18 +08:00
|
|
|
|
ShowMarks.Add(allMarks[i]);//未解锁的放在后面
|
2024-10-10 15:12:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Init()
|
|
|
|
|
|
{
|
|
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.ItemChange, SetUnlockMarks);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Release()
|
|
|
|
|
|
{
|
|
|
|
|
|
EventManager.Instance.Unregister(EventManager.EventName.ItemChange, SetUnlockMarks);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-10-12 13:24:18 +08:00
|
|
|
|
/// 由TeamMarkChoose调起
|
2024-10-10 15:12:01 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<TeamMark> ShownList
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!initialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
initList();
|
|
|
|
|
|
}
|
|
|
|
|
|
return ShowMarks;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public int UnlockMarksCnt
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return unlockMarksCnt; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public int SelectedMarkIndex
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return selectedMarkIndex; }
|
|
|
|
|
|
set { selectedMarkIndex = value; }
|
|
|
|
|
|
}
|
2024-10-12 14:05:35 +08:00
|
|
|
|
|
|
|
|
|
|
public async UniTask<Sprite> GetMarkIcon(int MarkID)
|
|
|
|
|
|
{
|
|
|
|
|
|
initList();
|
|
|
|
|
|
if(iconPath.ContainsKey(MarkID))
|
|
|
|
|
|
{
|
|
|
|
|
|
return await AssetManager.Instance.LoadAssetAsync<Sprite>(iconPath[MarkID]);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("TeamMarkManager.GetMarkIcon: iconPath not found, index = " + MarkID);
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async UniTask<Sprite> GetMarkImg(int MarkID)
|
|
|
|
|
|
{
|
|
|
|
|
|
initList();
|
|
|
|
|
|
if (imgPath.ContainsKey(MarkID))
|
|
|
|
|
|
{
|
|
|
|
|
|
return await AssetManager.Instance.LoadAssetAsync<Sprite>(imgPath[MarkID]);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("TeamMarkManager.GetMarkImg: imgPath not found, MarkID = " + MarkID);
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-10-10 15:12:01 +08:00
|
|
|
|
}
|