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

142 lines
3.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Cysharp.Threading.Tasks;
using Framework;
using PhxhSDK;
using System.Collections.Generic;
using UnityEngine;
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();
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;
}
/// <summary>
/// 调整ShowMarks的顺序已解锁的放在前面
/// </summary>
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);
}
/// <summary>
/// 由TeamMarkChoose调起
/// </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;
}
}
}