UITaskView.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. local UITaskView = require("UITask/UITaskView_Generate")
  2. local IconItemCtr = require("Common/IconItemCtr")
  3. local TaskJumpCtr = require("Common/TaskJumpCtr")
  4. local TaskItemMainCtr = require("Common/TaskItemMainCtr")
  5. local TaskItemRefreshCtr = require("Common/TaskItemRefreshCtr")
  6. function UITaskView:OnAwake(data)
  7. self.controller = require("UITask/UITaskCtr"):new()
  8. self.controller:Init(self)
  9. self.controller:SetData(data)
  10. end
  11. function UITaskView:AddEventListener()
  12. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.UI_TASK_CHANGE, self, self.RefreshTask)
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.UI_CLOSE_TASK_PAGE, self, self.OnCloseClick)
  14. end
  15. function UITaskView:FillContent(data, uiBase)
  16. self.uiBase = uiBase
  17. local gameObject = self.uiBase:GetRoot()
  18. if gameObject ~= nil then
  19. self.gameObject = gameObject
  20. self.transform = gameObject.transform
  21. end
  22. self:InitGenerate(self.transform, data)
  23. self:Init()
  24. end
  25. function UITaskView:Init()
  26. self._timer = nil;
  27. self._actLevelMax = 5; --活跃度的最高等级
  28. self.curOpenType = 0
  29. self._boxCount = 5; --周常和日常任务的可领取的宝箱的个数
  30. if not self._box then
  31. self._box = {};
  32. local _boxOriginal = self.refreshTaskParent.totalScore.box1;
  33. _boxOriginal.gameObject:SetActive(false);
  34. local _boxOriginalPos = _boxOriginal.transform.localPosition;
  35. for _i = 1, self._boxCount do
  36. local _go = CommonUtil.Instantiate(_boxOriginal, self.refreshTaskParent.totalScore.transform);
  37. local _move = Vector3.New(_boxOriginalPos.x + 148 * _i, _boxOriginalPos.y, _boxOriginalPos.z);
  38. _go.transform.localPosition = _go.transform.localPosition + _move;
  39. local _numText = _go.transform:Find("Num").gameObject:GetComponent(Enum.TypeInfo.TextMeshProUGUI);
  40. _numText.text = tostring(_i * 20);
  41. table.insert(self._box, _go);
  42. end
  43. end
  44. local _curOpenType = self.controller:GetCurOpenTaskType();
  45. if Constant.OpenPay then
  46. self.toggle1:SetActive(true)
  47. self.toggle2:SetActive(true)
  48. self.toggle3:SetActive(true)
  49. else
  50. self.toggle1:SetActive(false)
  51. self.toggle2:SetActive(false)
  52. self.toggle3:SetActive(true)
  53. _curOpenType = Enum.TaskTag.Main
  54. end
  55. for _i = 1, Enum.TaskTag.Main do
  56. local _show = _curOpenType == _i;
  57. self["toggle" .. tostring(_i)].toggle.isOn = _show;
  58. end
  59. --self:SetTaskDataByType(_curOpenType);
  60. self.refreshTaskParent.gameObject:SetActive(false);
  61. self.mainTaskParent.gameObject:SetActive(false);
  62. self:RefreshRedPoint(Enum.TaskTag.Daily);
  63. self:RefreshRedPoint(Enum.TaskTag.Weekly);
  64. self:RefreshRedPoint(Enum.TaskTag.Main);
  65. end
  66. function UITaskView:OnPageInEnd()
  67. local _curOpenType = self.controller:GetCurOpenTaskType();
  68. if not Constant.OpenPay then
  69. _curOpenType = Enum.TaskTag.Main
  70. end
  71. self:SetTaskDataByType(_curOpenType);
  72. self.super.OnPageInEnd(self)
  73. end
  74. function UITaskView:RemoveEventListener()
  75. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  76. end
  77. function UITaskView:AddUIEventListener()
  78. self.uiBase:AddButtonEventListener(self.BtnClose.button, self, self.OnCloseClick);
  79. self.uiBase:AddButtonEventListener(self.AnyBtn.button, self, self.OnCloseClick);
  80. self.uiBase:AddButtonUniqueEventListener(self.refreshTaskParent.totalScore.item.button, self, self.OnClickTotalScoreItem)
  81. self.uiBase:AddToggleEventListener(self.toggle1.toggle, self, self.OnPageToggleClick, Enum.TaskTag.Daily);
  82. self.uiBase:AddToggleEventListener(self.toggle2.toggle, self, self.OnPageToggleClick, Enum.TaskTag.Weekly);
  83. self.uiBase:AddToggleEventListener(self.toggle3.toggle, self, self.OnPageToggleClick, Enum.TaskTag.Main);
  84. end
  85. function UITaskView:OnHide()
  86. end
  87. function UITaskView:OnShow(data)
  88. self.controller:SetData(data)
  89. end
  90. function UITaskView:OnClose()
  91. self.mainTaskParent.scrollViewMain.loopVerticalScrollRect:ClearCells()
  92. self.refreshTaskParent.scrollViewRefresh.loopVerticalScrollRect:ClearCells()
  93. self:RemoveTimer();
  94. self._actLevelMax = nil;
  95. --清除所有的item对象
  96. for i = #self._box, 0, -1 do
  97. CommonUtil.DestroyGO(self._box[i]);
  98. end
  99. self._box = nil;
  100. end
  101. function UITaskView:OnDispose()
  102. self.controller:OnDispose()
  103. end
  104. function UITaskView:OnCloseClick()
  105. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UI_CLOSEED_TASK_PAGE)
  106. self:UIClose()
  107. end
  108. function UITaskView:OnClickTotalScoreItem()
  109. if self.curOpenType == Enum.TaskTag.Daily then
  110. ManagerContainer.LuaUIMgr:ShowMinTips('DayTaskTips2')
  111. elseif self.curOpenType == Enum.TaskTag.Weekly then
  112. ManagerContainer.LuaUIMgr:ShowMinTips('WeekTaskTips2')
  113. end
  114. end
  115. function UITaskView:RefreshRedPoint(_type)
  116. local _canGet = ManagerContainer.DataMgr.TaskDataNew:JudgeCanGetByType(_type);
  117. local _taskEnum;
  118. if _type == Enum.TaskTag.Daily then
  119. _taskEnum = Enum.RPNotifyType.TaskDaily;
  120. elseif _type == Enum.TaskTag.Weekly then
  121. _taskEnum = Enum.RPNotifyType.TaskWeekly;
  122. else
  123. _taskEnum = Enum.RPNotifyType.TaskMain;
  124. end
  125. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, _taskEnum, _canGet);
  126. end
  127. function UITaskView:OnPageToggleClick(_toggle, _params)
  128. if _toggle.isOn then
  129. if self.curOpenType ~= _params then
  130. self.mainTaskParent.scrollViewMain.loopVerticalScrollRect:ClearCells()
  131. self.refreshTaskParent.scrollViewRefresh.loopVerticalScrollRect:ClearCells()
  132. self:SetTaskDataByType(_params);
  133. end
  134. end
  135. end
  136. function UITaskView:RefreshTask()
  137. self:SetTaskDataByType(self.curOpenType)
  138. self:RefreshRedPoint(self.curOpenType);
  139. end
  140. function UITaskView:SetTaskDataByType(_type)
  141. self.curOpenType = _type
  142. local _isMain = (self.curOpenType == Enum.TaskTag.Main);
  143. self:SetScrollLoop();
  144. self.refreshTaskParent.gameObject:SetActive(not _isMain);
  145. self.mainTaskParent.gameObject:SetActive(_isMain);
  146. self.refreshTaskParent.dailyShow.gameObject:SetActive(self.curOpenType == Enum.TaskTag.Daily)
  147. self.refreshTaskParent.weeklyShow.gameObject:SetActive(self.curOpenType == Enum.TaskTag.Weekly)
  148. self.refreshTaskParent.tipsTxt.gameObject:SetActive(true);
  149. if self.curOpenType == Enum.TaskTag.Daily then
  150. self.refreshTaskParent.tipsTxt.RefreshTips.text.text = I18N.T("DayTaskTips")
  151. elseif self.curOpenType == Enum.TaskTag.Weekly then
  152. self.refreshTaskParent.tipsTxt.RefreshTips.text.text = I18N.T("WeekTaskTips")
  153. end
  154. if not _isMain then
  155. self:SetTime();
  156. self:SetActReward();
  157. end
  158. end
  159. --清除时间
  160. function UITaskView:RemoveTimer()
  161. if self._timer then
  162. ManagerContainer.LuaTimerMgr:RemoveTimer(self._timer);
  163. self._timer = nil;
  164. end
  165. end
  166. --设置时间
  167. function UITaskView:SetTime()
  168. if self.curOpenType == Enum.TaskTag.Daily then
  169. self:RemoveTimer();
  170. if ManagerContainer.DataMgr.TaskDataNew.dailyTaskEndTime > ManagerContainer.LuaTimerMgr:GetTimeSecond() then
  171. self:RefreshLeftTime()
  172. self._timer = ManagerContainer.LuaTimerMgr:AddTimer(1000, -1, self, self.RefreshLeftTime, nil);
  173. else
  174. self.time.text.text = ""
  175. end
  176. elseif self.curOpenType == Enum.TaskTag.Weekly then
  177. self:RemoveTimer();
  178. if ManagerContainer.DataMgr.TaskDataNew.weeklyTaskEndTime > ManagerContainer.LuaTimerMgr:GetTimeSecond() then
  179. self:RefreshLeftTime()
  180. self._timer = ManagerContainer.LuaTimerMgr:AddTimer(1000, -1, self, self.RefreshLeftTime, nil);
  181. else
  182. self.time.text.text = ""
  183. end
  184. end
  185. end
  186. function UITaskView:RefreshLeftTime()
  187. local endTime = 0
  188. if self.curOpenType == Enum.TaskTag.Daily then
  189. endTime = ManagerContainer.DataMgr.TaskDataNew.dailyTaskEndTime
  190. elseif self.curOpenType == Enum.TaskTag.Weekly then
  191. endTime = ManagerContainer.DataMgr.TaskDataNew.weeklyTaskEndTime
  192. end
  193. if endTime <= ManagerContainer.LuaTimerMgr:GetTimeSecond() then
  194. self:RemoveTimer()
  195. self.time.text.text = ""
  196. else
  197. local leftTime = endTime - ManagerContainer.LuaTimerMgr:GetTimeSecond()
  198. if leftTime < 1 then
  199. self:RemoveTimer()
  200. self.time.text.text = ""
  201. else
  202. local day,hour,minute,second = ConvertTimeForm(leftTime)
  203. local timeStr = ""
  204. if day > 0 then
  205. timeStr = string.format("%02d天%02d时", day, hour)
  206. else
  207. if hour > 0 then
  208. timeStr = string.format("%02d时%02d分", hour, minute)
  209. else
  210. timeStr = string.format("%02d分%02d秒", minute, second)
  211. end
  212. end
  213. self.time.text.text = string.formatbykey("RefreshTime",timeStr)
  214. end
  215. end
  216. end
  217. --设置活跃度奖励的显示
  218. function UITaskView:SetActReward()
  219. local _taskMessage = ManagerContainer.DataMgr.TaskDataNew:GetTaskMessage(self.curOpenType);
  220. self.refreshTaskParent.totalScore.item.num.text.text = tostring(_taskMessage._score);
  221. local _max = _taskMessage._rewardList[self._actLevelMax]._data.Active;
  222. local _progress = _taskMessage._score / _max;
  223. self.refreshTaskParent.totalScore.scrollbar.scrollbar.size = _progress;
  224. for _i = 1, self._actLevelMax do
  225. local _data = _taskMessage._rewardList[_i];
  226. local _box = self._box[_i];
  227. _box.gameObject:SetActive(true);
  228. local _boxTra = _box.transform:Find("Box")
  229. local _animator = _boxTra.gameObject:GetComponent(Enum.TypeInfo.Animator);
  230. if not _data._state then --未领取
  231. local _canGet = ManagerContainer.DataMgr.TaskDataNew:JudgeRewardByIndex(self.curOpenType, _i);
  232. if _canGet then
  233. _animator:Play("BoxGlow");
  234. else
  235. _animator:Play("BoxClose");
  236. end
  237. else --已经领取
  238. _animator:Play("BoxOpened");
  239. end
  240. local _boxButton = _boxTra.gameObject:GetComponent(Enum.TypeInfo.Button);
  241. self.uiBase:AddButtonUniqueEventListener(_boxButton, self, function (buttton, params)
  242. local _canGet = ManagerContainer.DataMgr.TaskDataNew:JudgeRewardByIndex(self.curOpenType, _i);
  243. if _canGet then
  244. ManagerContainer.DataMgr.TaskDataNew:CSGetTaskScoreRewardReq(self.curOpenType, _data._data.ID);
  245. else
  246. for i = 1, #_data._data.Reward do
  247. _data._data.Reward[i][3] = _data._state
  248. end
  249. ManagerContainer.LuaUIMgr:ShowMinRewardTips(_data._data.Reward)
  250. end
  251. end)
  252. end
  253. end
  254. --点击tips上的iconitem之后弹出对应的item的tip
  255. function UITaskView:ShowItemTips(button, params)
  256. ManagerContainer.LuaUIMgr:OpenTips(params[0]);
  257. end
  258. --设置滚动列表
  259. function UITaskView:SetScrollLoop()
  260. if self.curOpenType == Enum.TaskTag.Main then
  261. local taskList = ManagerContainer.DataMgr.TaskDataNew:GetTasksDataByType(self.curOpenType)
  262. if taskList ~= nil and #taskList > 0 then
  263. CommonUtil.LoopGridViewEleCreateNew(self,
  264. self.mainTaskParent.scrollViewMain.loopVerticalScrollRect,
  265. self.mainTaskParent.scrollViewMain.content.verticalLayoutGroup,
  266. taskList,
  267. 0,
  268. self,
  269. self.UpdateTaskItem);
  270. else
  271. self.mainTaskParent.scrollViewMain.loopVerticalScrollRect:ClearCells()
  272. end
  273. else
  274. local taskList = ManagerContainer.DataMgr.TaskDataNew:GetTasksDataByType(self.curOpenType)
  275. if taskList ~= nil and #taskList > 0 then
  276. CommonUtil.LoopGridViewEleCreateNew(self,
  277. self.refreshTaskParent.scrollViewRefresh.loopVerticalScrollRect,
  278. self.refreshTaskParent.scrollViewRefresh.content.verticalLayoutGroup,
  279. taskList,
  280. 0,
  281. self,
  282. self.UpdateTaskItem);
  283. else
  284. self.refreshTaskParent.scrollViewRefresh.loopVerticalScrollRect:ClearCells()
  285. end
  286. end
  287. end
  288. --设置单个对象
  289. function UITaskView:UpdateTaskItem(_itemLua, _idx,_data)
  290. if _data then
  291. local _logicData = self.controller:CreateLogicData(_data, self.curOpenType);
  292. if self.curOpenType == Enum.TaskTag.Main then
  293. TaskItemMainCtr:SetData(self, _itemLua, _logicData, self, self.OnMainTaskItemClick);
  294. else
  295. _logicData.fakeIcon = self.refreshTaskParent.fakeIcon;
  296. TaskItemRefreshCtr:SetData(self, _itemLua, _logicData, self, self.OnRefreshItemClick);
  297. end
  298. else
  299. LogError(Inspect(self.controller:GetTaskData()));
  300. end
  301. end
  302. function UITaskView:OnMainTaskItemClick(button, params)
  303. button.interactable = false;
  304. local _itemData = params[0].itemData;
  305. if _itemData:JudgeCanGet() then
  306. ManagerContainer.DataMgr.TaskDataNew:CSGetTaskRewardReq(_itemData._id);
  307. else
  308. local _jumpType = _itemData._cfgData.SkipInterface or 0;
  309. if _jumpType > 0 then
  310. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UI_TASK_JUMP)
  311. TaskJumpCtr:JumpBuyCfgId(_itemData._cfgData.SkipInterface)
  312. end
  313. end
  314. end
  315. function UITaskView:OnRefreshItemClick(button, params)
  316. local _fun = params[1];
  317. if type(_fun) == "function" then
  318. _fun();
  319. end
  320. local _itemData = params[0].itemData;
  321. if _itemData:JudgeCanGet() then
  322. button.interactable = false;
  323. ManagerContainer.DataMgr.TaskDataNew:CSGetTaskRewardReq(_itemData._id);
  324. else
  325. local _jumpType = _itemData._cfgData.SkipInterface or 0;
  326. if _jumpType > 0 then
  327. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UI_TASK_JUMP)
  328. TaskJumpCtr:JumpBuyCfgId(_itemData._cfgData.SkipInterface);
  329. end
  330. end
  331. end
  332. function UITaskView:FindTaskCompeleted(id, owner, ownerCB)
  333. local content = self.refreshTaskParent.scrollViewRefresh.content.transform
  334. if content.childCount == 0 then
  335. if owner and ownerCB then
  336. ownerCB(owner)
  337. end
  338. return
  339. end
  340. local itemGo = content:GetChild(0).gameObject
  341. local itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "TaskItemRefresh", itemGo)
  342. if not itemlua then
  343. if owner and ownerCB then
  344. ownerCB(owner)
  345. end
  346. return
  347. end
  348. local target = itemlua.btnGet
  349. if target == nil then
  350. if owner and ownerCB then
  351. ownerCB(owner)
  352. end
  353. return
  354. end
  355. if owner and ownerCB then
  356. ownerCB(owner, target)
  357. end
  358. end
  359. return UITaskView