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 { public Queue CurAchievementCompletes; protected override void OnCreateMge () { CurAchievementCompletes = new Queue(); } /// /// 记录一个成就监听code /// /// /// public void Push(AchievementCode code , long count = 1) { Account.Instance.AccountGameData.AchievementData.AddCode(code , count); CheckAchieve(); } /// /// 重新设置指定Code的数量 /// /// /// 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 newUnlockIDs = new List(); 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); // } } /// /// 获取指定成就id对应的完成数量 /// /// /// public long GetAchieveCount(int achievementCode) { return Account.Instance.AccountGameData.AchievementData.GetCodeInfo((AchievementCode) achievementCode) .Count; } public AchievementData GetAchievementData() { return Account.Instance.AccountGameData.AchievementData; } } }