BattlePassTaskDataManager.cs 7.0 KB

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