BattlePassTaskDataManager.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using ET;
  4. namespace GFGGame
  5. {
  6. public class BattlePassTaskDataManager : SingletonBase<BattlePassTaskDataManager>
  7. {
  8. //是否初始化服务器数据
  9. private bool initedFromServer;
  10. //通行证赛季Id
  11. private int SeasonId;
  12. //是否购买通行证
  13. private bool IsBuy;
  14. private long SeasonEndTime;
  15. private SelectionCache<int, int> selectionCache;
  16. //已经领奖levelId
  17. private HashSet<int> NormalRewards = new HashSet<int>();
  18. //已经高级领奖levelId
  19. private HashSet<int> SuperRewards = new HashSet<int>();
  20. //所有特别奖励
  21. private List<KeyValuePair<int, int>> tempItems = new List<KeyValuePair<int, int>>();
  22. public int GetSeasonId()
  23. {
  24. return SeasonId;
  25. }
  26. public void AddNormalReward(int levelId)
  27. {
  28. NormalRewards.Add(levelId);
  29. initedFromServer = true;
  30. }
  31. public void AddSuperReward(int levelId)
  32. {
  33. SuperRewards.Add(levelId);
  34. }
  35. public void SetSeasonId(int seasonId)
  36. {
  37. SeasonId = seasonId;
  38. //设置赛季结束时间
  39. //获取赛季配置
  40. var seasonCfg = BattlePassOpenCfgArray.Instance.GetCfg(seasonId);
  41. if (seasonCfg == null) return;
  42. SeasonEndTime = TimeUtil.GetResetTimeSec(seasonCfg.endTime);
  43. SetSpecialCfgCache();
  44. InitItemTemp();
  45. }
  46. public void SetIsBuy(bool isBuy)
  47. {
  48. IsBuy = isBuy;
  49. }
  50. public bool GetIsBuy()
  51. {
  52. return IsBuy;
  53. }
  54. //0:未完成 1:可领取 2:已领取 3:继续领取
  55. public int GetRewardState(int level)
  56. {
  57. var battlePassLevel = GetBattlePassLevel();
  58. if (level > battlePassLevel) return 0;
  59. if (!NormalRewards.Contains(level)) return 1;
  60. if (!IsBuy) return 3;
  61. return SuperRewards.Contains(level) ? 2 : 1;
  62. }
  63. //检查普通领取状态
  64. public bool CheckLevelRewardGet(int levelId)
  65. {
  66. return NormalRewards.Contains(levelId);
  67. }
  68. //检查高级领取状态
  69. public bool CheckSuperLevelRewardGet(int levelId)
  70. {
  71. return SuperRewards.Contains(levelId);
  72. }
  73. //获取赛季结束时间
  74. public long GetSeasonEndTime()
  75. {
  76. return SeasonEndTime;
  77. }
  78. //获取通行证当前等级
  79. public int GetBattlePassLevel()
  80. {
  81. return GameGlobal.myNumericComponent.GetAsInt(NumericType.PassLevel);
  82. }
  83. //获取通行证当前经验
  84. public long GetBattlePassExp()
  85. {
  86. return ItemDataManager.GetItemNum(ConstItemID.BATTLE_PASS_CURRENCY);
  87. }
  88. public BattlePassCfg GetSpecialCfg(int level)
  89. {
  90. var targetLevel = selectionCache.GetValueNoCache(level);
  91. return BattlePassCfgArray.Instance.GetCfgByidAndlevel(SeasonId, targetLevel);
  92. }
  93. private void SetSpecialCfgCache()
  94. {
  95. var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByidAndisGood(GetSeasonId(), 1);
  96. var minIndex = 0;
  97. var selections = new List<Selection<int, int>>();
  98. foreach (var battlePassCfg in battlePassCfgs)
  99. {
  100. selections.Add(new Selection<int, int>(minIndex, battlePassCfg.level, battlePassCfg.level,
  101. Selection<int, int>.SelectionModel.AllInclude));
  102. minIndex = battlePassCfg.level + 1;
  103. }
  104. selectionCache = new SelectionCache<int, int>(battlePassCfgs[0].level);
  105. selectionCache.AddSelection(selections);
  106. }
  107. //获取所有特别奖励
  108. public List<KeyValuePair<int, int>> GetAllSpecialCfg()
  109. {
  110. return tempItems;
  111. }
  112. private void InitItemTemp()
  113. {
  114. tempItems.Clear();
  115. var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByid(GetSeasonId());
  116. var items = new Dictionary<int, int>();
  117. foreach (var itemsInfo in battlePassCfgs.SelectMany(battlePassCfg => battlePassCfg.bonusSpecialArr))
  118. {
  119. items.TryGetValue(itemsInfo[0], out var num);
  120. items[itemsInfo[0]] = num + itemsInfo[1];
  121. }
  122. foreach (var item in items)
  123. {
  124. tempItems.Add(item);
  125. }
  126. }
  127. //获取升级奖励
  128. public int[][] GetUpLevelReward(int upLevel)
  129. {
  130. var battlePassLevel = GetBattlePassLevel();
  131. var seasonId = GetSeasonId();
  132. int[][] rs = null;
  133. for (var i = upLevel; i > 0; i--)
  134. {
  135. var passLevel = battlePassLevel + i;
  136. var cfg = BattlePassCfgArray.Instance.GetCfgByidAndlevel(seasonId, passLevel);
  137. if (cfg == null) continue;
  138. var mergeBonus = ItemUtil.MergeBonus(cfg.bonusNormalArr, cfg.bonusSpecialArr);
  139. rs = ItemUtil.MergeBonus(rs, mergeBonus);
  140. }
  141. return rs;
  142. }
  143. public bool GetHadCanGetReward()
  144. {
  145. if(!initedFromServer)
  146. {
  147. return false;
  148. }
  149. var battlePassLevel = GetBattlePassLevel();
  150. var isBuy = GetIsBuy();
  151. for (var i = 1; i <= battlePassLevel; i++)
  152. {
  153. if (!NormalRewards.Contains(i)) return true;
  154. if (!isBuy) continue;
  155. if (!SuperRewards.Contains(i)) return true;
  156. }
  157. return false;
  158. }
  159. public void Clear()
  160. {
  161. SeasonId = 0;
  162. IsBuy = false;
  163. SeasonEndTime = 0;
  164. selectionCache = null;
  165. NormalRewards.Clear();
  166. SuperRewards.Clear();
  167. tempItems.Clear();
  168. initedFromServer = false;
  169. }
  170. }
  171. }