BattlePassTaskView.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. using System.Collections.Generic;
  2. using ET;
  3. using FairyGUI;
  4. using UI.Task;
  5. namespace GFGGame
  6. {
  7. public class BattlePassTaskView : BaseWindow
  8. {
  9. private UI_BattlePassRewardUI _ui;
  10. private List<BattlePassCfg> _rewardCfgs;
  11. public override void Dispose()
  12. {
  13. if (_ui != null)
  14. {
  15. _ui.Dispose();
  16. _ui = null;
  17. }
  18. base.Dispose();
  19. }
  20. protected override void OnInit()
  21. {
  22. base.OnInit();
  23. packageName = UI_BattlePassRewardUI.PACKAGE_NAME;
  24. _ui = UI_BattlePassRewardUI.Create();
  25. viewCom = _ui.target;
  26. isfullScreen = true;
  27. clickBlankToClose = false;
  28. _ui.m_btnOpen.onClick.Add(OnBtnOpenClick);
  29. _ui.m_btnBuyLevel.onClick.Add(OnBtnBuyLevel);
  30. _ui.m_btnGetAll.onClick.Add(OnBtnGetAllClick);
  31. _ui.m_RewardList.itemRenderer = ListBoxRewardItemRender;
  32. _ui.m_RewardList.SetVirtual();
  33. _ui.m_SpecialReward.m_RewardList.itemRenderer = SpecialRewardRender;
  34. }
  35. protected override void OnHide()
  36. {
  37. base.OnHide();
  38. Timers.inst.Remove(UpdateTime);
  39. }
  40. protected override void OnShown()
  41. {
  42. base.OnShown();
  43. oldLevel = 0;
  44. SetSeasonLeftTime();
  45. SetBattlePassLevel();
  46. SetOpenBattlePassBtnStatus();
  47. FreshSpecialReward(oldLevel);
  48. }
  49. protected override void AddEventListener()
  50. {
  51. base.AddEventListener();
  52. //监听通行证等级变化
  53. EventAgent.AddEventListener(ConstMessage.BATTLEPASS_LEVEL_CHANGE, SetBattlePassLevel);
  54. }
  55. protected override void RemoveEventListener()
  56. {
  57. base.RemoveEventListener();
  58. EventAgent.RemoveEventListener(ConstMessage.BATTLEPASS_LEVEL_CHANGE, SetBattlePassLevel);
  59. }
  60. //开启通行证
  61. private void OnBtnOpenClick(EventContext context)
  62. {
  63. ViewManager.Show<OpenBattlePassView>(null, new object[] { typeof(BattlePassTaskView).FullName, null });
  64. }
  65. private void OnBtnBuyLevel(EventContext context)
  66. {
  67. ViewManager.Show<BuyBattlePassLevelView>(null, new object[] { typeof(BattlePassTaskView).FullName, null });
  68. }
  69. //领取奖励
  70. private async void OnBtnGetClick(EventContext context)
  71. {
  72. if (!(context.sender is GObject obj)) return;
  73. var id = (int)obj.data;
  74. var get = await BattlePassTaskSProxy.GetBattlePassReward(id);
  75. if (!get) return;
  76. SetBattlePassLevel();
  77. }
  78. //继续领取
  79. private async void OnBtnContinueClick(EventContext context)
  80. {
  81. if (!(context.sender is GObject obj)) return;
  82. var id = (int)obj.data;
  83. var get = await BattlePassTaskSProxy.GetBattlePassReward(id);
  84. if (!get) return;
  85. SetBattlePassLevel();
  86. }
  87. //领取全部奖励
  88. private async void OnBtnGetAllClick(EventContext context)
  89. {
  90. var get = await BattlePassTaskSProxy.GetAllBattlePassReward();
  91. if (!get) return;
  92. SetBattlePassLevel();
  93. }
  94. //前往
  95. private void OnBtnGoClick(EventContext context)
  96. {
  97. Hide();
  98. var btnGo = context.sender as GObject;
  99. if (btnGo == null) return;
  100. ViewManager.Show($"GFGGame.{btnGo.data}", null, new[] { typeof(TaskView).FullName, viewData }, true);
  101. }
  102. private void ListBoxRewardItemRender(int index, GObject obj)
  103. {
  104. var item = UI_BattlePassRewardItem.Proxy(obj);
  105. var level = index + 1;
  106. //这里跳过为0的第一个配置
  107. var battlePassCfg = _rewardCfgs[level];
  108. //设置等级
  109. item.m_Level.text = battlePassCfg.level.ToString();
  110. //设置奖励
  111. var bonusNormalArr = battlePassCfg.bonusNormalArr;
  112. if (bonusNormalArr != null && bonusNormalArr.Length > 0)
  113. {
  114. var itemCfg = ItemCfgArray.Instance.GetCfg(bonusNormalArr[0][0]);
  115. if (itemCfg != null)
  116. {
  117. item.m_NormalReward.m_loaIcon.url = ResPathUtil.GetCommonGameResPath(itemCfg.res);
  118. item.m_NormalReward.m_num.text = bonusNormalArr[0][1].ToString();
  119. }
  120. }
  121. if (item.m_RewardList.data == null)
  122. {
  123. item.m_RewardList.itemRenderer = SpecialRewardRender;
  124. }
  125. item.m_RewardList.data = battlePassCfg.bonusSpecialArr;
  126. item.m_RewardList.numItems = battlePassCfg.bonusSpecialArr.Length;
  127. //获取玩家当前的通行证等级
  128. var state = BattlePassTaskDataManager.Instance.GetRewardState(level);
  129. //设置按钮状态
  130. SetBtnState(item, battlePassCfg.id, state);
  131. item.target.data = battlePassCfg;
  132. UI_BattlePassRewardItem.ProxyEnd();
  133. FreshSpecialReward(level);
  134. }
  135. //SpecialRewardRender
  136. private static void SpecialRewardRender(int index, GObject obj)
  137. {
  138. var item = UI_RewardIconYellow.Proxy(obj);
  139. var parentData = (int[][])obj.parent.data;
  140. var itemInfo = parentData[index];
  141. var itemId = itemInfo[0];
  142. var num = itemInfo[1];
  143. var itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  144. if (itemCfg != null)
  145. {
  146. item.m_loaIcon.url = ResPathUtil.GetCommonGameResPath(itemCfg.res);
  147. item.m_num.text = num.ToString();
  148. }
  149. UI_RewardIconYellow.ProxyEnd();
  150. }
  151. //根据状态设置按钮
  152. private void SetBtnState(UI_BattlePassRewardItem item, int id, int state)
  153. {
  154. item.m_c1.selectedIndex = state;
  155. if (item.m_GetRewardBt.data == null)
  156. {
  157. item.m_GetRewardBt.onClick.Add(OnBtnGetClick);
  158. }
  159. item.m_GetRewardBt.data = id;
  160. //继续领取
  161. if (item.m_ContinueBt.data == null)
  162. {
  163. item.m_ContinueBt.onClick.Add(OnBtnContinueClick);
  164. }
  165. item.m_ContinueBt.data = id;
  166. //前往
  167. if (item.m_ComeBt.data == null)
  168. {
  169. item.m_ComeBt.onClick.Add(OnBtnGoClick);
  170. }
  171. item.m_ComeBt.data = id;
  172. }
  173. //设置赛季剩余时间
  174. private void SetSeasonLeftTime()
  175. {
  176. //获取赛季结束时间
  177. Timers.inst.Add(1, 0, UpdateTime);
  178. }
  179. //UpdateTime
  180. private void UpdateTime(object param)
  181. {
  182. var seasonEndTime = BattlePassTaskDataManager.Instance.GetSeasonEndTime();
  183. var leftTime = seasonEndTime - TimeHelper.ServerNow();
  184. if (leftTime <= 0)
  185. {
  186. Timers.inst.Remove(UpdateTime);
  187. return;
  188. }
  189. _ui.m_LeftTime.text = TimeUtil.FormattingTime(TimeHelper.ServerNow(), seasonEndTime);
  190. }
  191. private void SetBattlePassLevel()
  192. {
  193. //获取玩家当前的通行证等级
  194. var dataManager = BattlePassTaskDataManager.Instance;
  195. var battlePassLevel = dataManager.GetBattlePassLevel();
  196. var seasonId = dataManager.GetSeasonId();
  197. var uiExpProcess = _ui.m_LevelProcess;
  198. uiExpProcess.m_Level.text = battlePassLevel.ToString();
  199. //获取当前等级的经验
  200. var battlePassCfg =
  201. BattlePassCfgArray.Instance.GetCfgByidAndlevel(seasonId, dataManager.GetBattlePassLevel());
  202. uiExpProcess.target.max = battlePassCfg.value;
  203. uiExpProcess.target.value = dataManager.GetBattlePassExp();
  204. uiExpProcess.m_NumProcess.SetVar("value", dataManager.GetBattlePassExp().ToString())
  205. .SetVar("maxValue", battlePassCfg.value.ToString()).FlushVars();
  206. //刷新奖励列表
  207. _rewardCfgs = new List<BattlePassCfg>(BattlePassCfgArray.Instance.GetCfgsByid(seasonId));
  208. //去掉第一个为0的配置
  209. _ui.m_RewardList.numItems = _rewardCfgs.Count - 1;
  210. }
  211. private void SetOpenBattlePassBtnStatus()
  212. {
  213. //通行证是否购买
  214. var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
  215. _ui.m_c1.selectedIndex = isBuy ? 1 : 0;
  216. }
  217. private int oldLevel;
  218. //刷新特别大奖展示
  219. private void FreshSpecialReward(int level)
  220. {
  221. var battlePassCfg = BattlePassTaskDataManager.Instance.GetSpecialCfg(level);
  222. var uiBattlePassReward = _ui.m_SpecialReward;
  223. if (battlePassCfg == null)
  224. {
  225. uiBattlePassReward.target.visible = false;
  226. return;
  227. }
  228. var newLeve = battlePassCfg.level;
  229. if (newLeve == oldLevel) return;
  230. oldLevel = newLeve;
  231. uiBattlePassReward.target.visible = true;
  232. uiBattlePassReward.m_Level.text = newLeve.ToString();
  233. //设置奖励
  234. var bonusNormalArr = battlePassCfg.bonusNormalArr;
  235. if (bonusNormalArr != null && bonusNormalArr.Length > 0)
  236. {
  237. var itemCfg = ItemCfgArray.Instance.GetCfg(bonusNormalArr[0][0]);
  238. if (itemCfg != null)
  239. {
  240. uiBattlePassReward.m_NormalReward.m_loaIcon.url = ResPathUtil.GetCommonGameResPath(itemCfg.res);
  241. uiBattlePassReward.m_NormalReward.m_num.text = bonusNormalArr[0][1].ToString();
  242. }
  243. }
  244. uiBattlePassReward.m_RewardList.data = battlePassCfg.bonusSpecialArr;
  245. uiBattlePassReward.m_RewardList.numItems = battlePassCfg.bonusSpecialArr.Length;
  246. }
  247. }
  248. }