BattlePassTaskDataManager.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using ET;
  4. namespace GFGGame
  5. {
  6. public class BattlePassTaskDataManager : Singleton<BattlePassTaskDataManager>
  7. {
  8. //通行证赛季Id
  9. private int SeasonId = 0;
  10. //是否购买通行证
  11. private bool IsBuy = false;
  12. private long SeasonEndTime = 0;
  13. private SelectionCache<int, int> selectionCache;
  14. //已经领奖levelId
  15. private HashSet<int> NormalRewards = new HashSet<int>();
  16. //已经高级领奖levelId
  17. private HashSet<int> SuperRewards = new HashSet<int>();
  18. private List<KeyValuePair<int, long>> tempItems = new List<KeyValuePair<int, long>>();
  19. public int GetSeasonId()
  20. {
  21. return SeasonId;
  22. }
  23. public void AddNormalReward(int levelId)
  24. {
  25. NormalRewards.Add(levelId);
  26. }
  27. public void AddSuperReward(int levelId)
  28. {
  29. SuperRewards.Add(levelId);
  30. }
  31. public void SetSeasonId(int seasonId)
  32. {
  33. SeasonId = seasonId;
  34. //设置赛季结束时间
  35. //获取赛季配置
  36. var seasonCfg = BattlePassOpenCfgArray.Instance.GetCfg(seasonId);
  37. if (seasonCfg == null) return;
  38. SeasonEndTime = TimeUtil.GetResetTimeSec(seasonCfg.endTime);
  39. SetSpecialCfgCache();
  40. InitItemTemp();
  41. }
  42. public void SetIsBuy(bool isBuy)
  43. {
  44. IsBuy = isBuy;
  45. }
  46. public bool GetIsBuy()
  47. {
  48. return IsBuy;
  49. }
  50. //0:未完成 1:可领取 2:已领取 3:继续领取
  51. public int GetRewardState(int level)
  52. {
  53. var battlePassLevel = GetBattlePassLevel();
  54. if (level > battlePassLevel) return 0;
  55. if (!NormalRewards.Contains(level)) return 1;
  56. if (!IsBuy) return 2;
  57. return !SuperRewards.Contains(level) ? 3 : 2;
  58. }
  59. //检查普通领取状态
  60. public bool CheckLevelRewardGet(int levelId)
  61. {
  62. return NormalRewards.Contains(levelId);
  63. }
  64. //检查高级领取状态
  65. public bool CheckSuperLevelRewardGet(int levelId)
  66. {
  67. return SuperRewards.Contains(levelId);
  68. }
  69. //获取赛季结束时间
  70. public long GetSeasonEndTime()
  71. {
  72. return SeasonEndTime;
  73. }
  74. //获取通行证当前等级
  75. public int GetBattlePassLevel()
  76. {
  77. return GameGlobal.myNumericComponent.GetAsInt(NumericType.PassLevel);
  78. }
  79. //获取通行证当前经验
  80. public long GetBattlePassExp()
  81. {
  82. return ItemDataManager.GetItemNum(ConstItemID.BATTLE_PASS_CURRENCY);
  83. }
  84. public BattlePassCfg GetSpecialCfg(int level)
  85. {
  86. var targetLevel = selectionCache.GetValueNoCache(level);
  87. return BattlePassCfgArray.Instance.GetCfgByidAndlevel(SeasonId, targetLevel);
  88. }
  89. private void SetSpecialCfgCache()
  90. {
  91. var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByidAndisGood(GetSeasonId(), 1);
  92. var minIndex = 0;
  93. var selections = new List<Selection<int, int>>();
  94. foreach (var battlePassCfg in battlePassCfgs)
  95. {
  96. selections.Add(new Selection<int, int>(minIndex, battlePassCfg.level, battlePassCfg.level,
  97. Selection<int, int>.SelectionModel.AllInclude));
  98. minIndex = battlePassCfg.level + 1;
  99. }
  100. selectionCache = new SelectionCache<int, int>(battlePassCfgs[0].level);
  101. selectionCache.AddSelection(selections);
  102. }
  103. //获取所有特别奖励
  104. public List<KeyValuePair<int, long>> GetAllSpecialCfg()
  105. {
  106. return tempItems;
  107. }
  108. private void InitItemTemp()
  109. {
  110. tempItems.Clear();
  111. var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByid(GetSeasonId());
  112. var items = new Dictionary<int, long>();
  113. foreach (var itemsInfo in battlePassCfgs.SelectMany(battlePassCfg => battlePassCfg.bonusSpecialArr))
  114. {
  115. items.TryGetValue(itemsInfo[0], out var num);
  116. items[itemsInfo[0]] = num + itemsInfo[1];
  117. }
  118. // items 装成 KeyValuePair<int,long>
  119. foreach (var item in items)
  120. {
  121. tempItems.Add(item);
  122. }
  123. }
  124. }
  125. }