UIPetRelationsView.lua 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. local UIPetRelationsView = require("UIPet/UIPetRelationsView_Generate")
  2. local initHeight = 300
  3. local curSelectedIdx
  4. function UIPetRelationsView:OnAwake(data)
  5. self.controller = require("UIPet/UIPetRelationsCtr"):new()
  6. self.controller:Init(self)
  7. self.controller:SetData(data)
  8. end
  9. function UIPetRelationsView:AddEventListener()
  10. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.PET_FRIEND_SUPPORT_OPEN_NTF, self, self.OpenFriendSupport)
  11. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.PET_RELATION_CHANGE_NTF, self, self.OnPetRelationNeedChangeNtf)
  12. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.PET_RELATION_CHANGE_SUCCESS_NTF, self, self.OnPetRelationChangeSuccessNtf)
  13. end
  14. function UIPetRelationsView:FillContent(data, uiBase)
  15. self.uiBase = uiBase
  16. local gameObject = self.uiBase:GetRoot()
  17. if gameObject ~= nil then
  18. self.gameObject = gameObject
  19. self.transform = gameObject.transform
  20. end
  21. self:InitGenerate(self.transform, data)
  22. self:Init()
  23. end
  24. function UIPetRelationsView:Init()
  25. self:InitGrid()
  26. -- self:Refresh()
  27. end
  28. function UIPetRelationsView:OnPageInEnd()
  29. self.super.OnPageInEnd(self)
  30. if not self.timer then
  31. self.timer = FrameTimer.New(slot(self.Refresh, self), 1)
  32. end
  33. if not self.timer.running then
  34. self.timer:Start()
  35. end
  36. end
  37. function UIPetRelationsView:InitGrid()
  38. initHeight = self.petRelationItem.rectTransform.sizeDelta.y
  39. self.scrollView.loopListView:InitListView(0, function(gridView, itemIndex, row, column)
  40. return self:GetItemByRowColumn(gridView, itemIndex, row, column)
  41. end, nil)
  42. end
  43. function UIPetRelationsView:Refresh(resetPos)
  44. self.controller:RefreshRelationDatas()
  45. self.controller:RefreshAllAttrs()
  46. local loopListView = self.scrollView.loopListView
  47. local length = self.controller:GetRelationDataLength()
  48. if resetPos then
  49. loopListView:SetListItemCount(length, 0)
  50. else
  51. loopListView:SetListItemCount(length)
  52. end
  53. loopListView:RefreshAllShownItem()
  54. -- if not self.delayTimer then
  55. -- self.delayTimer = FrameTimer.New(slot(self.RefreshAllRPShow, self), 1)
  56. -- end
  57. -- if not self.delayTimer.running then
  58. -- self.delayTimer:Start()
  59. -- end
  60. end
  61. function UIPetRelationsView:GetItemByRowColumn(gridView, itemIndex, row, column)
  62. local length = self.controller:GetRelationDataLength()
  63. if (itemIndex < 0 or itemIndex >= length) then
  64. return nil
  65. end
  66. local showData = self.controller:GetRelationShowDataByIdx(itemIndex)
  67. local item = gridView:NewListViewItem("PetRelationItem")
  68. local itemlua = CommonUtil.BindGridViewItem2Lua(self, "PetRelationItem", item.gameObject)
  69. itemlua.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, initHeight);
  70. itemlua.grid:SetActive(curSelectedIdx == itemIndex)
  71. itemlua.down:SetActive(curSelectedIdx ~= itemIndex)
  72. itemlua.up:SetActive(curSelectedIdx == itemIndex)
  73. local count = CommonUtil.UpdateItemPrefab(self, itemlua, showData, nil, self, self.OnPetItemClick, curSelectedIdx == itemIndex)
  74. self.uiBase:AddButtonUniqueEventListener(itemlua.btnexpand.button, self, self.OnRelationClick, itemIndex)
  75. if curSelectedIdx == itemIndex then
  76. local girdHeight = count * itemlua.relationAttr1.rectTransform.sizeDelta.y + 80
  77. itemlua.grid.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, girdHeight);
  78. local newY = girdHeight + itemlua.rectTransform.sizeDelta.y
  79. itemlua.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, newY);
  80. end
  81. if not self.relationPars then
  82. self.relationPars = {}
  83. end
  84. for i = 1, 3 do
  85. local goId = itemlua['relationAttr'..i].gameObject:GetInstanceID()
  86. if not self.relationPars[goId] then
  87. self.relationPars[goId] = itemlua['relationAttr'..i].uIEffectCfg
  88. end
  89. end
  90. self:RefreshRelationRPStateByCfgId(itemlua, showData.Id)
  91. return item
  92. end
  93. function UIPetRelationsView:RefreshAllRPShow()
  94. local relationCfgs = self.controller:RefreshRelationDatas()
  95. for i = 1, #relationCfgs do
  96. local cfgId = relationCfgs[i].Id
  97. local itemlua = self:GetRelationItemByIdx(i)
  98. LogHRWarning("RefreshAllRPShow "..i)
  99. self:RefreshRelationRPStateByCfgId(itemlua, cfgId)
  100. end
  101. end
  102. function UIPetRelationsView:RefreshRelationRPStateByCfgId(itemlua, cfgId)
  103. local relationRPStates = self.controller:GetRelationRPStates()
  104. if not relationRPStates then
  105. return
  106. end
  107. if itemlua then
  108. local rpState = relationRPStates[cfgId]
  109. if rpState then
  110. for i = 1, 3 do
  111. local parent = itemlua['item'..i].transform
  112. local redPoint = parent:Find("redPoint")
  113. if redPoint then
  114. redPoint.gameObject:SetActive(rpState[i])
  115. else
  116. if rpState[i] then
  117. local go = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIPath, "Common/UIRedPointRP")
  118. if go then
  119. redPoint = go.transform
  120. redPoint:SetParent(parent)
  121. redPoint.localRotation = Quaternion.identity
  122. redPoint.localScale = Vector3.one
  123. local rectTransform = redPoint:GetComponent(Enum.TypeInfo.RectTransform)
  124. rectTransform.anchoredPosition3D = Vector3(60, 60, 0)
  125. go.name = "redPoint"
  126. end
  127. end
  128. end
  129. end
  130. else
  131. for i = 1, 3 do
  132. local parent = itemlua['item'..i].transform
  133. local redPoint = parent:Find("redPoint")
  134. if redPoint then
  135. redPoint.gameObject:SetActive(false)
  136. end
  137. end
  138. end
  139. end
  140. end
  141. function UIPetRelationsView:OnPetItemClick(button, params)
  142. local data = params[2]
  143. local cfgId = data[1]
  144. self.selectedIdx = data[2]
  145. --
  146. --local data = {relationCfgId = cfgId, relationIdx = idx, fromUIId = self.uiData.id}
  147. --ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPetMats, data)
  148. ManagerContainer.DataMgr.PetDataMgr:QueryAssistList(cfgId)
  149. end
  150. function UIPetRelationsView:OnRelationClick(button, params)
  151. local idx = params[0]
  152. local loopListView =self.scrollView.loopListView
  153. if curSelectedIdx == idx then
  154. curSelectedIdx = nil
  155. else
  156. local oldIdx = curSelectedIdx
  157. curSelectedIdx = idx
  158. if oldIdx then
  159. loopListView:RefreshItemByItemIndex(oldIdx)
  160. end
  161. end
  162. loopListView:RefreshItemByItemIndex(idx)
  163. local length = self.controller:GetRelationDataLength()
  164. if curSelectedIdx and curSelectedIdx + 1 == length then
  165. self.scrollView.loopListView:MovePanelToItemIndex(curSelectedIdx, 0)
  166. end
  167. end
  168. function UIPetRelationsView:GetRelationItemByIdx(idx)
  169. local item = self.scrollView.loopListView:GetShownItemByItemIndex(idx - 1)
  170. if item then
  171. local itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "PetRelationItem", item.gameObject)
  172. return itemlua
  173. end
  174. end
  175. function UIPetRelationsView:OpenFriendSupport(cfgId)
  176. local data = {relationCfgId = cfgId, curRelationIdx = self.selectedIdx, fromUIId = self.uiData.id, enterType = Enum.ItemIEnterType.PetRelation}
  177. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPetMats, data)
  178. end
  179. function UIPetRelationsView:OnPetRelationNeedChangeNtf(data)
  180. local relationCfgId = data.relationCfgId
  181. local petData = data.petData
  182. self.controller:SetRelationDataByRelationIdAndSlotIdx(relationCfgId, self.selectedIdx, petData)
  183. self.selectedIdx = nil
  184. end
  185. function UIPetRelationsView:OnPetRelationChangeSuccessNtf()
  186. --self.scrollView.loopListView:RefreshItemByItemIndex(cfgId - 1)
  187. self.controller:RefreshAllAttrs()
  188. self:Refresh()
  189. end
  190. function UIPetRelationsView:OnClickAllAttrBtn()
  191. local datas = self.controller:GetAllAttrs()
  192. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIFashionTotal, {title="PetTotalProperty", attrs=datas})
  193. end
  194. function UIPetRelationsView:RemoveEventListener()
  195. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  196. end
  197. function UIPetRelationsView:AddUIEventListener()
  198. self.uiBase:AddButtonEventListener(self.btnBack.button, self, self.OnCloseClick)
  199. self.uiBase:AddButtonEventListener(self.btnRelation.button, self, self.OnMySupportClick)
  200. self.uiBase:AddButtonEventListener(self.btnPlayRule.button, self, self.OnClickPlayRuleBtn)
  201. self.uiBase:AddButtonEventListener(self.btnRelations.button, self, self.OnClickAllAttrBtn)
  202. end
  203. function UIPetRelationsView:OnClickPlayRuleBtn()
  204. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', "PetText003"})
  205. end
  206. function UIPetRelationsView:OnCloseClick()
  207. self:UIClose()
  208. end
  209. function UIPetRelationsView:OnMySupportClick()
  210. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPetMySupport)
  211. end
  212. function UIPetRelationsView:OnHide()
  213. end
  214. function UIPetRelationsView:OnShow(data)
  215. self.controller:SetData(data)
  216. end
  217. function UIPetRelationsView:OnClose()
  218. if self.relationPars then
  219. for i = 1, #self.relationPars do
  220. local effect = self.relationPars[i]
  221. effect:Clean()
  222. end
  223. end
  224. self.relationPars = nil
  225. if self.timer then
  226. self.timer:Stop()
  227. self.timer = nil
  228. end
  229. if self.delayTimer then
  230. self.delayTimer:Stop()
  231. self.delayTimer = nil
  232. end
  233. end
  234. function UIPetRelationsView:OnDispose()
  235. self.scrollView.loopListView:Dispose()
  236. self.controller:OnDispose()
  237. end
  238. return UIPetRelationsView