UITitleListView.lua 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. local UITitleListView = require("UITitle/UITitleListView_Generate")
  2. local TitleListItemCtr = require("Common/TitleListItemCtr")
  3. local TitleTypeList,TitleDataList
  4. local SortRuleList = {4,2,1,3}
  5. local currToggle = 0
  6. local lastToggle = -1
  7. function UITitleListView:OnAwake(data)
  8. self.controller = require("UITitle/UITitleListCtr"):new()
  9. self.controller:Init(self)
  10. self.controller:SetData(data)
  11. end
  12. function UITitleListView:AddEventListener()
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  14. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_TITLE_CHANGE, self, self.OnTitleDataChange)
  15. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.TITLE_ACTIVE_REDPOINT_NOTICE, self, self.ToggleRedPointNotice)
  16. end
  17. function UITitleListView:FillContent(data, uiBase)
  18. self.uiBase = uiBase
  19. local gameObject = self.uiBase:GetRoot()
  20. if gameObject ~= nil then
  21. self.gameObject = gameObject
  22. self.transform = gameObject.transform
  23. end
  24. self:InitGenerate(self.transform, data)
  25. self:Init()
  26. end
  27. function UITitleListView:GetShowItemByIdx(idx)
  28. local item = self.toggleList.loopGridView:GetShownItemByItemIndex(idx)
  29. if item then
  30. local itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "ToggleItem", item.gameObject)
  31. return itemlua
  32. end
  33. end
  34. function UITitleListView:RefreshTitleEndTime()
  35. self.titleList.loopGridView:RefreshListByIndex(TitleDataList and #TitleDataList or 0)
  36. end
  37. function UITitleListView:OnTitleDataChange(changeData)
  38. for i = 1, #TitleDataList do
  39. local id = TitleDataList[i].titleId
  40. if changeData[id] then
  41. TitleDataList[i] = changeData[id]
  42. end
  43. end
  44. self.titleList.loopGridView:RefreshListByIndex(TitleDataList and #TitleDataList or 0)
  45. if self.timer and self.timer.running then
  46. self.timer:Stop()
  47. end
  48. if not self.timer then
  49. self.timer = Timer.New(slot(self.RefreshTitleEndTime, self), 3600,-1)
  50. end
  51. if not self.timer.running then
  52. self.timer:Start()
  53. end
  54. end
  55. function UITitleListView:ToggleRedPointNotice()
  56. local redPointList = ManagerContainer.DataMgr.TitleData:GetTitleRedPointList()
  57. for i = 0, self.toggleContent.transform.childCount - 1 do
  58. local item = self.toggleContent.transform:GetChild(i)
  59. local parent = item
  60. local redPoint = parent:Find("redPoint")
  61. if redPoint then
  62. redPoint.gameObject:SetActive(redPointList[i])
  63. else
  64. if redPointList[i] then
  65. self:CreateRP(parent, redPoint, "redPoint", "Common/UIRedPointRP")
  66. end
  67. end
  68. end
  69. if redPointList and #redPointList > 0 then
  70. for i = 1, #redPointList do
  71. local itemLua = self:GetShowItemByIdx(i - 1)
  72. if not itemLua then
  73. return
  74. end
  75. local parent = itemLua.transform
  76. local redPoint = parent:Find("redPoint")
  77. if redPoint then
  78. redPoint.gameObject:SetActive(redPointList[i])
  79. else
  80. if redPointList[i] then
  81. self:CreateRP(parent, redPoint, "redPoint", "Common/UIRedPointRP")
  82. end
  83. end
  84. end
  85. end
  86. end
  87. function UITitleListView:CreateRP(parent, redPoint, name, path)
  88. local go = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIPath, path)
  89. if go then
  90. redPoint = go.transform
  91. redPoint:SetParent(parent)
  92. redPoint.localRotation = Quaternion.identity
  93. redPoint.localScale = Vector3.one
  94. local rectTransform = redPoint:GetComponent(Enum.TypeInfo.RectTransform)
  95. rectTransform.anchoredPosition3D = Vector3(90, 35, 0)
  96. go.name = name
  97. end
  98. end
  99. function UITitleListView:Init()
  100. local time = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  101. TitleTypeList = ManagerContainer.DataMgr.TitleData:GetTitleTypeList()
  102. local idx = self.controller:GetData()
  103. currToggle = idx and idx - 1 or 0
  104. lastToggle = -1
  105. local TitleDic = ManagerContainer.DataMgr.TitleData:GetTitleDataByType(currToggle + 1)
  106. TitleDataList = self:SortTitleData(TitleDic)
  107. self.titleList.scrollRect.enabled = false
  108. self.toggleList.scrollRect.enabled = false
  109. self.titleList.loopGridView:InitGridView(0, function(gridView, itemIndex, row, column)
  110. return self:GetTitleItemByRowColumn(gridView, itemIndex, row, column)
  111. end, nil)
  112. self.toggleList.loopGridView:InitGridView(0, function(gridView, itemIndex, row, column)
  113. return self:GetToggleItemByRowColumn(gridView, itemIndex, row, column)
  114. end, nil)
  115. self.titleList.loopGridView:RefreshListByIndex(TitleDataList and #TitleDataList or 0,0)
  116. self.toggleList.loopGridView:RefreshListByIndex(TitleTypeList and #TitleTypeList or 0,0)
  117. self:ToggleRedPointNotice()
  118. if self.timer and self.timer.running then
  119. self.timer:Stop()
  120. end
  121. if not self.timer then
  122. self.timer = Timer.New(slot(self.RefreshTitleEndTime, self), 3600,-1)
  123. end
  124. if not self.timer.running then
  125. self.timer:Start()
  126. end
  127. end
  128. function UITitleListView:OnPageInEnd()
  129. self.super.OnPageInEnd(self)
  130. self.titleList.scrollRect.enabled = true
  131. self.toggleList.scrollRect.enabled = true
  132. end
  133. function UITitleListView:GetToggleItemByRowColumn(gridView, itemIndex, row, column)
  134. local item = nil
  135. item = gridView:NewListViewItem('ToggleItem')
  136. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'ToggleItem', item.gameObject)
  137. self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnChangeToggleBtnClick, itemIndex)
  138. itemLua.on:SetActive(currToggle == itemIndex)
  139. itemLua.label.text.text = I18N.SetLanguageValue('TitleType_'..TitleTypeList[itemIndex + 1])
  140. local redPointList = ManagerContainer.DataMgr.TitleData:GetTitleRedPointList()
  141. local parent = itemLua.transform
  142. local redPoint = parent:Find("redPoint")
  143. if redPoint then
  144. redPoint.gameObject:SetActive(redPointList[itemIndex + 1])
  145. else
  146. if redPointList[itemIndex + 1] then
  147. self:CreateRP(parent, redPoint, "redPoint", "Common/UIRedPointRP")
  148. end
  149. end
  150. return item
  151. end
  152. function UITitleListView:OnChangeToggleBtnClick(button, params)
  153. local idx = params[0]
  154. if button then
  155. lastToggle = currToggle
  156. currToggle = idx
  157. self:Refresh(idx)
  158. end
  159. end
  160. function UITitleListView:Refresh(idx)
  161. if idx == lastToggle then
  162. return
  163. end
  164. local itemLua = self:GetShowItemByIdx(lastToggle)
  165. if itemLua then
  166. itemLua.on:SetActive(false)
  167. end
  168. local CurritemLua = self:GetShowItemByIdx(idx)
  169. if CurritemLua then
  170. CurritemLua.on:SetActive(true)
  171. end
  172. local TitleDic = ManagerContainer.DataMgr.TitleData:GetTitleDataByType(idx + 1)
  173. TitleDataList = self:SortTitleData(TitleDic)
  174. self.titleList.loopGridView:RefreshListByIndex(TitleDataList and #TitleDataList or 0,0)
  175. end
  176. function UITitleListView:GetTitleItemByRowColumn(gridView, itemIndex, row, column)
  177. local item = nil
  178. item = gridView:NewListViewItem('TitleListItem')
  179. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'TitleListItem', item.gameObject)
  180. TitleListItemCtr:SetData(self,itemLua,TitleDataList[itemIndex + 1])
  181. return item
  182. end
  183. function UITitleListView:OnPageInEnd()
  184. self.super.OnPageInEnd(self)
  185. self.titleList.scrollRect.enabled = true
  186. self.toggleList.scrollRect.enabled = true
  187. end
  188. function UITitleListView:OnBtnEquipClick(button,params)
  189. local param = params[0]
  190. self.controller:SendTitleOperateReq(2,param.titleId)
  191. end
  192. function UITitleListView:OnBtnActiveClick(button,params)
  193. local param = params[0]
  194. self.controller:SendTitleOperateReq(1,param.titleId)
  195. end
  196. function UITitleListView:OnBtnRemoveClick(button,params)
  197. local param = params[0]
  198. self.controller:SendTitleOperateReq(3,param.titleId)
  199. end
  200. function UITitleListView:SortTitleData(data)
  201. local titleList = {}
  202. for k, v in pairs(data) do
  203. table.insert(titleList,v)
  204. end
  205. table.sort(titleList,function(a,b)
  206. local titleDataA = ManagerContainer.CfgMgr:GetDesignationCfgById(a.titleId)
  207. local titleDataB = ManagerContainer.CfgMgr:GetDesignationCfgById(b.titleId)
  208. if SortRuleList[a.state] == SortRuleList[b.state] then
  209. if titleDataA.Sort == titleDataB.Sort then
  210. return a.titleId < b.titleId
  211. else
  212. return titleDataA.Sort > titleDataB.Sort
  213. end
  214. else
  215. return SortRuleList[a.state] < SortRuleList[b.state]
  216. end
  217. end)
  218. return titleList
  219. end
  220. function UITitleListView:RemoveEventListener()
  221. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  222. end
  223. function UITitleListView:AddUIEventListener()
  224. self.uiBase:AddButtonUniqueEventListener(self.btnClose.button, self, self.OnClickCloseBtn)
  225. self.uiBase:AddButtonUniqueEventListener(self.allAtrBtn.button, self, self.OnClickTotalAttrBtn)
  226. end
  227. function UITitleListView:OnClickTotalAttrBtn()
  228. local baseAttrs = {}
  229. local val = GlobalConfig.Instance:GetConfigStrValue(333)
  230. if val ~= "" and val ~= nil then
  231. local attrsTable = CommonUtil.DeserializeGlobalStrToNumberTable(val)
  232. for i = 1, #attrsTable do
  233. table.insert(baseAttrs,{attrsTable[i],0})
  234. end
  235. end
  236. local activeTitleList = ManagerContainer.DataMgr.TitleData:GetAllActiveTitleListAttrs()
  237. for i = 1, #baseAttrs do
  238. if activeTitleList[baseAttrs[i][1]] then
  239. baseAttrs[i][2] = activeTitleList[baseAttrs[i][1]]
  240. end
  241. end
  242. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIFashionTotal,{title="TitleTotalProperty", attrs=baseAttrs})
  243. end
  244. function UITitleListView:OnClickCloseBtn()
  245. self:UIClose()
  246. end
  247. function UITitleListView:OnHide()
  248. end
  249. function UITitleListView:OnShow(data)
  250. self.controller:SetData(data)
  251. end
  252. function UITitleListView:OnClose()
  253. if self.timer and self.timer.running then
  254. self.timer:Stop()
  255. end
  256. end
  257. function UITitleListView:OnDispose()
  258. self.toggleList.loopGridView:Dispose()
  259. self.titleList.loopGridView:Dispose()
  260. self.controller:OnDispose()
  261. end
  262. return UITitleListView