UIChangeHeadView.lua 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. local UIChangeHeadView = require("UIRoleMessage/UIChangeHeadView_Generate")
  2. function UIChangeHeadView:OnAwake(data)
  3. self.controller = require("UIRoleMessage/UIChangeHeadCtr")
  4. self.controller:Init(self)
  5. self.controller:SetData(data)
  6. end
  7. function UIChangeHeadView:AddEventListener()
  8. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.USER_HEADPROTRAIT_CHANGED, self, self.OnChangeHeadEvent)
  9. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.USER_HEADPROTRAIT_DATA_CHANGED, self, self.OnHeadDataChanged)
  10. end
  11. function UIChangeHeadView:FillContent(data, uiBase)
  12. self.uiBase = uiBase
  13. local gameObject = self.uiBase:GetRoot()
  14. if gameObject ~= nil then
  15. self.gameObject = gameObject
  16. self.transform = gameObject.transform
  17. end
  18. self:InitGenerate(self.transform, data)
  19. self:Init()
  20. end
  21. function UIChangeHeadView:Init()
  22. self.conditionTxts = { self.conditionTxt }
  23. --self:RefreshHeadIcon()
  24. self:OpenChangeHead()
  25. end
  26. function UIChangeHeadView:RemoveEventListener()
  27. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  28. end
  29. function UIChangeHeadView:AddUIEventListener()
  30. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  31. self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.OnClickCloseChangeHead)
  32. --self.uiBase:AddButtonEventListener(self.alpha.button, self, self.OnClickCloseChangeHead)
  33. self.uiBase:AddButtonEventListener(self.unlockBtn.button, self, self.OnClickChangeHeadUnlock)
  34. self.uiBase:AddButtonEventListener(self.usedBtn.button, self, self.OnClickChangeHeadUse)
  35. self.uiBase:AddButtonEventListener(self.AnyBtn.button, self, self.OnClickCloseChangeHead)
  36. end
  37. function UIChangeHeadView:OnHide()
  38. end
  39. function UIChangeHeadView:OnShow(data)
  40. self.controller:SetData(data)
  41. self:Init()
  42. end
  43. function UIChangeHeadView:OnClose()
  44. end
  45. function UIChangeHeadView:OnDispose()
  46. self.changeList.loopVerticalScrollRect:ClearCells()
  47. if self.conditionTxts then
  48. for _, value in pairs(self.conditionTxts) do
  49. -- self.changeHead.conditionTxt其它地方有释放,这里可处理,也可不处理,目前不处理
  50. if value ~= self.conditionTxt then
  51. if tolua.getpeer(value) then
  52. tolua.setpeer(value, nil)
  53. end
  54. end
  55. end
  56. end
  57. end
  58. ----Custom start----
  59. function UIChangeHeadView:OnChangeHeadEvent()
  60. --self:RefreshHeadIcon()
  61. self.controller:RefreshHeadPortraitsSort()
  62. self:RefreshGridView()
  63. self:RefreshContent()
  64. end
  65. function UIChangeHeadView:OnHeadDataChanged()
  66. self:RefreshContent();
  67. end
  68. function UIChangeHeadView:OnHeadDataEvent(isInit)
  69. self.controller:RefreshHeadPortraitsSort()
  70. if isInit then
  71. self:OpenChangeHead()
  72. else
  73. self:RefreshChangeHead()
  74. end
  75. end
  76. function UIChangeHeadView:OpenChangeHead()
  77. --[[
  78. if not ManagerContainer.DataMgr.HeadProtraitData:IsVaild() then
  79. ManagerContainer.DataMgr.HeadProtraitData:SendGetHeadInfo()
  80. return
  81. end
  82. ]]--
  83. -- 获得可换头像列表
  84. local datas = self.controller:GetHeadPortraits()
  85. self.curSelectHeadId = ManagerContainer.DataMgr.UserData:GetUserHeadPortraitId() or datas[1].cfgId
  86. self:RefreshContent()
  87. CommonUtil.LoopGridViewEleCreate(self,
  88. self.changeList.loopVerticalScrollRect,
  89. self.content.gridLayoutGroup,
  90. datas,
  91. 0,
  92. function(itemlua, idx)
  93. local data = datas[idx + 1]
  94. data.selected = (self.curSelectHeadId == data.cfgId)
  95. CommonUtil.UpdateItemPrefab(self, itemlua, data, nil, self, self.OnClickHeadItem)
  96. end)
  97. end
  98. --[[
  99. function UIChangeHeadView:RefreshHeadData(isInit)
  100. if isInit then
  101. self:OpenChangeHead()
  102. else
  103. self:RefreshChangeHead()
  104. end
  105. end
  106. ]]--
  107. function UIChangeHeadView:RefreshChangeHead()
  108. self:RefreshGridView()
  109. self:RefreshContent()
  110. end
  111. function UIChangeHeadView:OnClickHeadItem(btn, params)
  112. local cfgData = params[0]
  113. self.curSelectHeadId = cfgData.cfgId
  114. self:RefreshChangeHead()
  115. end
  116. function UIChangeHeadView:RefreshGridView()
  117. self.changeList.loopVerticalScrollRect:RefreshCells()
  118. end
  119. function UIChangeHeadView:RefreshContent()
  120. local HeadProtraitData = ManagerContainer.DataMgr.HeadProtraitData
  121. local state = HeadProtraitData:GetState(self.curSelectHeadId)
  122. local canUnlock = (state == Enum.TaskStateType.CompletedAndNoReceive)
  123. local unlocked = (state == Enum.TaskStateType.Received)
  124. local used = (ManagerContainer.DataMgr.UserData:GetUserHeadPortraitId() == self.curSelectHeadId)
  125. self.usedBtn.gameObject:SetActive(unlocked);
  126. self.unlockBtn.gameObject:SetActive(not unlocked);
  127. if unlocked then
  128. self.unlockConditions:SetActive(false)
  129. self.usedBtn.button.interactable = (not used);
  130. if used then
  131. self.text.text.text = I18N.T("BtnUsing"); --使用中
  132. else
  133. self.text.text.text = I18N.T("BtnChange"); --更换
  134. end
  135. else
  136. self.unlockConditions:SetActive(true)
  137. self.unlockBtn.button.interactable = canUnlock;
  138. local cfgData = ManagerContainer.CfgMgr:GetHeadPortraitDataById(self.curSelectHeadId)
  139. local conditions = nil
  140. local conditionId = nil
  141. if cfgData then
  142. conditionId = cfgData.UnlockCondition
  143. local unlockCondCfgData = ManagerContainer.CfgMgr:GetCondDataById(cfgData.UnlockCondition)
  144. if unlockCondCfgData then
  145. local condition = unlockCondCfgData.Condition
  146. if type(condition[1]) == 'table' then
  147. conditions = condition
  148. else
  149. conditions = {condition}
  150. end
  151. end
  152. end
  153. local count = #self.conditionTxts
  154. local vaildNum = conditions and #conditions or 0
  155. for i = 1, vaildNum do
  156. local txt = self.conditionTxts[i]
  157. if not txt then
  158. txt = UnityEngine.GameObject.Instantiate(self.conditionTxt)
  159. txt.transform.parent = self.conditionTxt.transform.parent
  160. txt.transform.localPosition = Vector3.zero
  161. txt.transform.localRotation = Quaternion.identity
  162. txt.transform.localScale = Vector3.one
  163. if tolua.getpeer(txt) == nil then
  164. tolua.setpeer(txt, {})
  165. end
  166. txt.text = txt:GetComponent(Enum.TypeInfo.Text)
  167. self.conditionTxts[i] = txt
  168. end
  169. local condition = conditions[i]
  170. local max = condition[3]
  171. local str
  172. local progress = HeadProtraitData:GetProgress(self.curSelectHeadId, conditionId, condition[1])
  173. if progress >= max or canUnlock then
  174. str = ' <color=#009900>(' .. progress .. '/' .. max .. ')</color>'
  175. else
  176. str = ' <color=#990000>(' .. progress .. '/' .. max .. ')</color>'
  177. end
  178. txt.text.text = CommonUtil.TaskDescParse(condition) .. str
  179. txt:SetActive(true)
  180. end
  181. -- 隐藏多余显示
  182. for i = vaildNum + 1, count do
  183. local txt = self.conditionTxts[i]
  184. if txt then
  185. txt:SetActive(false)
  186. end
  187. end
  188. end
  189. end
  190. function UIChangeHeadView:OnClickCloseChangeHead()
  191. ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIChangeHead);
  192. end
  193. function UIChangeHeadView:OnClickChangeHeadUnlock()
  194. local errorCode = self.controller:GetActiveHeadProtraitError(self.curSelectHeadId)
  195. if errorCode == 0 then
  196. ManagerContainer.DataMgr.HeadProtraitData:SendActiveHead(self.curSelectHeadId)
  197. else
  198. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
  199. end
  200. end
  201. function UIChangeHeadView:OnClickChangeHeadUse()
  202. local errorCode = self.controller:GetSetHeadProtraitError(self.curSelectHeadId)
  203. if errorCode == 0 then
  204. ManagerContainer.DataMgr.HeadProtraitData:SendSetHead(self.curSelectHeadId)
  205. else
  206. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
  207. end
  208. end
  209. return UIChangeHeadView