Files
taptap2024_GJ_chidouren/Assets/Scripts/System/AchieveSystem/AchievementMgr.cs
2024-10-16 00:03:41 +08:00

97 lines
3.3 KiB
C#

using System.Collections.Generic;
using Framework.Save;
using Framework.UI;
using Framework.Utils.SingletonTemplate;
using Game;
using UnityEngine;
using Views;
namespace System.AchieveSystem
{
public class AchievementMgr : MgrBase<AchievementMgr>
{
public Queue<RofAchievementRow> CurAchievementCompletes;
protected override void OnCreateMge ()
{
CurAchievementCompletes = new Queue<RofAchievementRow>();
}
/// <summary>
/// 记录一个成就监听code
/// </summary>
/// <param name="code"></param>
/// <param name="count"></param>
public void Push(AchievementCode code , long count = 1)
{
Account.Instance.AccountGameData.AchievementData.AddCode(code , count);
CheckAchieve();
}
/// <summary>
/// 重新设置指定Code的数量
/// </summary>
/// <param name="code"></param>
/// <param name="count"></param>
public void UpdateCode(AchievementCode code , int count = 1)
{
Account.Instance.AccountGameData.AchievementData.SetCode(code , count);
CheckAchieve();
}
private void CheckAchieve()
{
var achievementData = Account.Instance.AccountGameData.AchievementData;
var rofAchievementTable = RofManagerConfig.Instance.AchievementTable;
// List<int> newUnlockIDs = new List<int>();
for (int i = 0; i < rofAchievementTable.RowNum; i++)
{
var info = rofAchievementTable.GetDataByRow(i);
if (!achievementData.HasAchievement(info.ID))
{
var code = (AchievementCode) info.AchievementCode;
var count = achievementData.GetCodeInfo(code).Count;
if (count >= info.TargetValue)
{
Debug.Log("达成 成就:" + info.Key);
CurAchievementCompletes.Enqueue(info);
achievementData.AchieveIDs.Add(info.ID);
this.CheckAwardGold(info);
}
}
}
if (this.CurAchievementCompletes.Count > 0)
{
Account.Instance.Save(SaveData.Game);
//todo 弹出成就提示
// UIManager.Instance.OpenView(UIPanel.AchievementTip);
}
}
private void CheckAwardGold(RofAchievementRow row)
{
// if (row.AwardGold > 0)
// {
// Account.Instance.AddG(CurrencyType.Gold , row.AwardGold , "成就解锁金币奖励: " + row.Key , null);
// }
}
/// <summary>
/// 获取指定成就id对应的完成数量
/// </summary>
/// <param name="achievementCode"></param>
/// <returns></returns>
public long GetAchieveCount(int achievementCode)
{
return Account.Instance.AccountGameData.AchievementData.GetCodeInfo((AchievementCode) achievementCode)
.Count;
}
public AchievementData GetAchievementData()
{
return Account.Instance.AccountGameData.AchievementData;
}
}
}