You've already forked taptap2024_GJ_chidouren
97 lines
3.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |