ActivityDay7View.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. using System.Collections.Generic;
  2. using ET;
  3. using FairyGUI;
  4. using UI.ActivityDay7;
  5. using UI.CommonGame;
  6. using UI.Task;
  7. namespace GFGGame
  8. {
  9. public class ActivityDay7View : BaseWindow
  10. {
  11. private UI_ActivityDay7UI _ui;
  12. //7日活动配置
  13. private Activity7DaysTaskCfg[] cfgDataArray;
  14. //7日活动积分配置
  15. private Activity7DaysCfg[] activity7DaysCfgs;
  16. //选中的天数index 天数=index+1
  17. private int onClickDayIndex;
  18. public override void Dispose()
  19. {
  20. if (_ui != null)
  21. {
  22. _ui.Dispose();
  23. _ui = null;
  24. }
  25. base.Dispose();
  26. }
  27. protected override void OnInit()
  28. {
  29. base.OnInit();
  30. packageName = UI_ActivityDay7UI.PACKAGE_NAME;
  31. _ui = UI_ActivityDay7UI.Create();
  32. viewCom = _ui.target;
  33. isfullScreen = true;
  34. bringToFontOnClick = false;
  35. _ui.m_btnBack.onClick.Add(OnBtnBackClick);
  36. _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("qrhd_banner_yxzy");
  37. _ui.m_DayList.itemRenderer = DayListRenderer;
  38. _ui.m_TaskList.itemRenderer = TaskListRenderer;
  39. _ui.m_tip.onClick.Add(RuleController.ShowRuleView);
  40. _ui.m_tip.data = 300014;
  41. }
  42. private void OnBtnBackClick()
  43. {
  44. ViewManager.GoBackFrom(typeof(ActivityDay7View).FullName);
  45. }
  46. protected override void OnShown()
  47. {
  48. base.OnShown();
  49. onClickDayIndex = ActivityDay7DataManager.Instance.GetActivityDay7Day() - 1;
  50. SetScoreList();
  51. SetScore();
  52. SetDayList();
  53. SetTasks();
  54. SetTime();
  55. }
  56. public override void Hide()
  57. {
  58. Timers.inst.Remove(UpdateTime);
  59. base.Hide();
  60. }
  61. protected override void AddEventListener()
  62. {
  63. EventAgent.AddEventListener(ConstMessage.ITEM_CHANGED, OnItemChange);
  64. }
  65. private void OnItemChange(EventContext context)
  66. {
  67. var itemId = (int)context.data;
  68. if (itemId != ConstItemID.ACTIVITY_DAY_7_SCORE) return;
  69. SetScoreList();
  70. SetScore();
  71. }
  72. private void SetScore()
  73. {
  74. var score = ActivityDay7DataManager.Instance.GetScore();
  75. _ui.m_Score.text = score.ToString();
  76. _ui.m_ExpProcess.value = score;
  77. }
  78. //DayListRenderer
  79. private void DayListRenderer(int index, GObject obj)
  80. {
  81. var item = UI_ButtonDay.Proxy(obj);
  82. if (item.target.data == null)
  83. {
  84. var cfg = cfgDataArray[index];
  85. item.m_text.text = $"第{cfg.days}天";
  86. item.target.data = index;
  87. item.target.onClick.Add(OnClickDay);
  88. }
  89. //设置按钮状态
  90. item.m_c1.selectedIndex = index == onClickDayIndex ? 0 : 1;
  91. UI_ButtonDay.ProxyEnd();
  92. }
  93. //选中天数
  94. private void OnClickDay(EventContext context)
  95. {
  96. if (!(context.sender is GObject typeItem)) return;
  97. //检查天数
  98. var day = ActivityDay7DataManager.Instance.GetActivityDay7Day();
  99. if (day < (int)typeItem.data + 1)
  100. {
  101. PromptController.Instance.ShowFloatTextPrompt("未到开启时间");
  102. return;
  103. }
  104. onClickDayIndex = (int)typeItem.data;
  105. SetTasks();
  106. //设置其他按钮选中状态
  107. SetDayList();
  108. FreshGetStatus();
  109. }
  110. private void SetTasks()
  111. {
  112. var activity7DaysTaskCfg = Activity7DaysTaskCfgArray.Instance.GetCfg(onClickDayIndex + 1);
  113. var taskIdArr = activity7DaysTaskCfg.taskIdArr;
  114. //排序根据领取状态
  115. var taskCfgs = TaskDataManager.Instance.GetTaskCfgs(taskIdArr);
  116. _ui.m_TaskList.data = taskCfgs;
  117. _ui.m_TaskList.numItems = taskIdArr.Length;
  118. if (_ui.m_TaskList.numItems > 0)
  119. {
  120. _ui.m_TaskList.ScrollToView(0);
  121. }
  122. }
  123. //TaskListRenderer
  124. private void TaskListRenderer(int index, GObject obj)
  125. {
  126. var item = UI_TaskListItem.Proxy(obj);
  127. var tasks = (List<TaskCfg>)obj.parent.data;
  128. var taskCfg = tasks[index];
  129. item.m_c1.selectedIndex = TaskDataManager.Instance.GetTaskStateById(taskCfg.id);
  130. item.m_c2.selectedIndex = taskCfg.jumpId == "" ? 1 : 0;
  131. item.m_txtDesc.text = TaskDataManager.Instance.GetTaskDesc(taskCfg.id);
  132. item.m_txtCount.text =
  133. $"{TaskDataManager.Instance.GetTaskProgressById(taskCfg.id)}/{taskCfg.GetTargetCount()}";
  134. if (item.m_GetRewardBt.data == null)
  135. {
  136. item.m_GetRewardBt.onClick.Add(OnBtnGetClick);
  137. }
  138. item.m_GetRewardBt.data = taskCfg.id;
  139. if (item.m_ComeBt.data == null)
  140. {
  141. item.m_ComeBt.onClick.Add(OnBtnGoClick);
  142. }
  143. item.m_ComeBt.data = taskCfg.jumpId;
  144. if (item.m_listTaskReward.data == null)
  145. {
  146. item.m_listTaskReward.itemRenderer = ListTaskRewardItemRender;
  147. }
  148. item.m_listTaskReward.data = taskCfg.rewardsArr;
  149. item.m_listTaskReward.numItems = taskCfg.rewardsArr.Length;
  150. UI_TaskListItem.ProxyEnd();
  151. }
  152. private static void ListTaskRewardItemRender(int index, GObject obj)
  153. {
  154. var rewards = (int[][])obj.parent.data;
  155. ItemUtil.CreateItemView(rewards[index], obj as GComponent);
  156. }
  157. private void OnBtnGoClick(EventContext context)
  158. {
  159. Hide();
  160. var btnGo = context.sender as GObject;
  161. if (btnGo == null) return;
  162. ViewManager.Show($"GFGGame.{btnGo.data}", null, new[] { typeof(ActivityDay7View).FullName, viewData },
  163. true);
  164. }
  165. private List<GComponent> components = new List<GComponent>();
  166. //设置积分列表
  167. private void SetScoreList()
  168. {
  169. //7日活动配置
  170. activity7DaysCfgs = Activity7DaysCfgArray.Instance.dataArray;
  171. var maxCfg = activity7DaysCfgs[activity7DaysCfgs.Length - 1];
  172. var maxCfgID = maxCfg.id;
  173. var maxScore = maxCfg.score;
  174. var pos = _ui.m_StartIndex.position;
  175. var endY = _ui.m_EndIndex.position.y;
  176. _ui.m_ExpProcess.max = maxScore;
  177. //循环设置UI
  178. foreach (var cfg in activity7DaysCfgs)
  179. {
  180. var cfgScore = cfg.score;
  181. var item = UI_ExpProcessItem.Create();
  182. var target = item.target;
  183. components.Add(target);
  184. _ui.target.AddChild(target);
  185. // 根据 maxScore cfgScore pos.y endY 设置target 位置 x,z不变,y根据比例设置
  186. var y = pos.y + (endY - pos.y) * cfgScore / maxScore;
  187. target.SetPosition(pos.x, y, pos.z);
  188. item.m_Score.text = cfgScore.ToString();
  189. var cfgBonusArr = cfg.bonusArr;
  190. var itemCfg = ItemCfgArray.Instance.GetCfg(cfgBonusArr[0][0]);
  191. item.m_loaIcon.url = string.IsNullOrEmpty(itemCfg.res) ? "" : ResPathUtil.GetIconPath(itemCfg);
  192. item.m_Num.text = cfgBonusArr[0][1].ToString();
  193. item.m_c1.selectedIndex = cfg.id == maxCfgID ? 1 : 0;
  194. item.target.data = cfg;
  195. item.target.onClick.Add(OnClickReward);
  196. UI_ExpProcess.ProxyEnd();
  197. }
  198. }
  199. //设置天数列表
  200. private void SetDayList()
  201. {
  202. //7日活动配置
  203. cfgDataArray = Activity7DaysTaskCfgArray.Instance.dataArray;
  204. _ui.m_DayList.numItems = cfgDataArray.Length;
  205. }
  206. private void FreshGetStatus()
  207. {
  208. components.ForEach(com =>
  209. {
  210. var item = UI_ExpProcessItem.Create(com);
  211. var cfg = (Activity7DaysCfg)item.target.data;
  212. var cfgID = cfg.id;
  213. var state = ActivityDay7DataManager.Instance.GetActivityDay7RewardState(cfgID);
  214. item.m_c2.selectedIndex = state ? 1 : 0;
  215. });
  216. }
  217. private async void OnBtnGetClick(EventContext context)
  218. {
  219. if (!(context.sender is GObject btnGet)) return;
  220. var result = await TaskSProxy.GetTaskBonus((int)btnGet.data);
  221. if (!result) return;
  222. SetTasks();
  223. }
  224. private async void OnClickReward(EventContext context)
  225. {
  226. if (!(context.sender is GObject btnGet)) return;
  227. var activity7DaysCfg = (Activity7DaysCfg)btnGet.data;
  228. var id = activity7DaysCfg.id;
  229. var get = ActivityDay7DataManager.Instance.GetActivityDay7RewardState(id);
  230. if (get)
  231. {
  232. PromptController.Instance.ShowFloatTextPrompt("已领取过了");
  233. return;
  234. }
  235. //判断积分是否够
  236. var score = ActivityDay7DataManager.Instance.GetScore();
  237. if (score < activity7DaysCfg.score)
  238. {
  239. PromptController.Instance.ShowFloatTextPrompt("积分还不够");
  240. return;
  241. }
  242. var result = await ActivityDay7SProxy.ReqGetActivityDay7Reward(activity7DaysCfg);
  243. if (!result) return;
  244. FreshGetStatus();
  245. }
  246. private void SetTime()
  247. {
  248. Timers.inst.Add(1, 0, UpdateTime);
  249. }
  250. //UpdateTime
  251. private void UpdateTime(object param)
  252. {
  253. var endTime = ActivityDay7DataManager.Instance.GetEndTime();
  254. var leftTime = endTime - TimeHelper.ServerNow();
  255. if (leftTime <= 0)
  256. {
  257. Timers.inst.Remove(UpdateTime);
  258. return;
  259. }
  260. _ui.m_TimeStr.text = TimeUtil.FormattingTimeTo_DDHHmm((int)leftTime);
  261. }
  262. }
  263. }