UITaskView.lua 13 KB

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