NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/PVE/TeamMarkManager.cs

142 lines
3.6 KiB
C#
Raw Normal View History

using Cysharp.Threading.Tasks;
using Framework;
2024-10-10 15:12:01 +08:00
using PhxhSDK;
using System.Collections.Generic;
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();
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();
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);
iconPath.Add(mark.ID, mark.iconKey);
imgPath.Add(mark.ID, mark.imgPathKey);
2024-10-10 15:12:01 +08:00
}
SetUnlockMarks();
initialized = true;
}
/// <summary>
/// 调整ShowMarks的顺序已解锁的放在前面
2024-10-10 15:12:01 +08:00
/// </summary>
void SetUnlockMarks()
{
ShowMarks.Clear();
unlockMarksCnt = 0;
for (int i = 0; i < allMarks.Count; i++)
{
if (CategoryManager.Instance.GetItemCount(allMarks[i].ItemID) > 0)//已解锁
2024-10-10 15:12:01 +08:00
{
ShowMarks.Insert(unlockMarksCnt++, allMarks[i]);//已解锁的放在前面
2024-10-10 15:12:01 +08:00
}
else
{
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>
/// 由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; }
}
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
}