ActivityDay7View.cs 11 KB

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