UIFashionSuitesTipsView.lua 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. local UIFashionSuitesTipsView = require("UIFashion/UIFashionSuitesTipsView_Generate")
  2. local userSex
  3. function UIFashionSuitesTipsView:OnAwake(data)
  4. self.controller = require("UIFashion/UIFashionSuitesTipsCtr"):new()
  5. self.controller:Init(self)
  6. self.controller:SetData(data)
  7. end
  8. function UIFashionSuitesTipsView:AddEventListener()
  9. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  10. end
  11. function UIFashionSuitesTipsView: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 UIFashionSuitesTipsView:Init()
  22. self.fashionSuitList = {}
  23. userSex = ManagerContainer.DataMgr.UserData:GetSex()
  24. self:InitGrid()
  25. end
  26. function UIFashionSuitesTipsView:OnPageInEnd()
  27. self.super.OnPageInEnd(self)
  28. self:Refresh()
  29. end
  30. function UIFashionSuitesTipsView:Refresh(resetPos)
  31. local loopListView = self.suitesScrollView.loopListView
  32. local length = self.controller:GetShowDataLength()
  33. if resetPos then
  34. loopListView:SetListItemCount(length + 1, true)
  35. else
  36. loopListView:SetListItemCount(length + 1)
  37. end
  38. end
  39. function UIFashionSuitesTipsView:InitGrid()
  40. self.suitesScrollView.loopListView:InitListView(0, function(gridView, itemIndex, row, column)
  41. return self:GetItemByRowColumn(gridView, itemIndex, row, column)
  42. end, nil)
  43. self.controller:RefreshSuites()
  44. end
  45. function UIFashionSuitesTipsView:GetItemByRowColumn(gridView, itemIndex, row, column)
  46. local item
  47. if itemIndex == 0 then
  48. item = gridView:NewListViewItem('Empty')
  49. else
  50. local suitId = self.controller:GetShowData(itemIndex)
  51. local suitCfgData = ManagerContainer.CfgMgr:GetFashionSuitDataById(suitId)
  52. local suitLv = self.controller:GetSuitLvById(suitId)
  53. local lv = suitLv > 0 and suitLv or 1
  54. local height = 360
  55. if suitCfgData then
  56. item = gridView:NewListViewItem('FashionSuitesItem')
  57. local itemlua = CommonUtil.BindGridViewItem2Lua(self, 'FashionSuitesItem', item.gameObject)
  58. CommonUtil.CloseUIClearAsyncSeqIds(itemlua)
  59. local fashionIds = suitCfgData.FashionId
  60. if fashionIds then
  61. local length = #fashionIds
  62. local listView = itemlua.goodsList.loopListView
  63. if listView.ListViewInited then
  64. listView:Dispose()
  65. end
  66. listView:InitListView(0, function(gridView1, itemIndex1, row1, column1)
  67. local GetItemByRowColumn1 = function (gridView1, itemIndex1, row1, column1)
  68. local item1
  69. if itemIndex1 == 0 then
  70. item1 = gridView1:NewListViewItem('Empty')
  71. else
  72. local cfgId = fashionIds[itemIndex1]
  73. local fashionCfgData = ManagerContainer.CfgMgr:GetFashionById(cfgId)
  74. if not fashionCfgData then
  75. return item1
  76. end
  77. if userSex ~= fashionCfgData.FashionSex and fashionCfgData.FashionSex > 0 then
  78. return item1
  79. end
  80. item1 = gridView1:NewListViewItem('FashionWearItem')
  81. local itemlua1 = CommonUtil.GetBindGridViewItem2Lua(self, 'FashionWearItem', item1.gameObject)
  82. if not itemlua1 then
  83. itemlua1 = CommonUtil.BindGridViewItem2Lua(self, 'FashionWearItem', item1.gameObject)
  84. else
  85. CommonUtil.CloseUIClearAsyncSeqIds(itemlua1)
  86. end
  87. self:RefreshFashionItem(cfgId, itemlua1)
  88. end
  89. return item1
  90. end
  91. return GetItemByRowColumn1(gridView1, itemIndex1, row1, column1)
  92. end, nil)
  93. if not CommonUtil.EleInTable(listView, self.fashionSuitList) then
  94. self.fashionSuitList[#self.fashionSuitList + 1] = listView
  95. end
  96. listView:SetListItemCount(length + 1, true)
  97. listView:RefreshAllShownItem()
  98. itemlua.suitesLv.activity:SetActive(suitLv > 0)
  99. itemlua.nextCondition:SetActive(suitLv < #suitCfgData.LevelCondition)
  100. itemlua.nextAttr:SetActive(suitLv < #suitCfgData.LevelCondition)
  101. if suitLv <= #suitCfgData.LevelCondition then
  102. if suitLv < #suitCfgData.LevelCondition then
  103. local condition = suitCfgData.LevelCondition[suitLv + 1]
  104. local count = 0
  105. for _,v in pairs(fashionIds) do
  106. local fashionLogicData = ManagerContainer.DataMgr.FashionData:GetFashionById(v)
  107. if fashionLogicData then
  108. if fashionLogicData.lv >= condition then
  109. count = count + 1
  110. end
  111. end
  112. end
  113. itemlua.nextCondition.condition.text.text = I18N.SetLanguageValue("SuitNeedLevel", condition)
  114. itemlua.nextCondition.num.text.text = count.."/"..#fashionIds
  115. end
  116. --当前属性
  117. local curAttrs = suitCfgData.Attribute[lv]
  118. itemlua.currentAttr:SetActive(suitLv > 0 and curAttrs ~= nil)
  119. if suitLv == 0 or curAttrs == nil then
  120. height = height - 30
  121. end
  122. if curAttrs then
  123. local attrCount = 0
  124. for i = 1, 4 do
  125. local attrItem = itemlua.currentAttr["attr"..i]
  126. local attr = curAttrs[i]
  127. if attrItem then
  128. attrItem:SetActive(attr ~= nil)
  129. if attr then
  130. attrCount = attrCount + 1
  131. local str = string.split(attr, '-')
  132. local key = tonumber(str[1])
  133. local val = tonumber(str[2])
  134. attrItem.text.text.text = I18N.T("Attr_" .. key)
  135. val = key > 21 and CommonUtil.GetPreciseDecimal(val*0.0001, 3) or math.floor(val)
  136. attrItem.num.text.text = CommonUtil.HeroAttrFormatValue(key, val, true)
  137. end
  138. end
  139. end
  140. if attrCount > 2 then
  141. height = height + 30
  142. end
  143. end
  144. --下一级属性
  145. local nextAttrs = suitCfgData.Attribute[lv + 1]
  146. itemlua.nextAttr:SetActive(nextAttrs ~= nil)
  147. if nextAttrs == nil then
  148. height = height - 30
  149. end
  150. if suitLv == 0 then
  151. nextAttrs = suitCfgData.Attribute[lv]
  152. end
  153. if nextAttrs then
  154. local attrCount = 0
  155. for i = 1, 4 do
  156. local attrItem = itemlua.nextAttr["attr"..i]
  157. local attr = nextAttrs[i]
  158. if attrItem then
  159. attrItem:SetActive(attr ~= nil)
  160. if attr then
  161. attrCount = attrCount + 1
  162. local str = string.split(attr, '-')
  163. local key = tonumber(str[1])
  164. local val = tonumber(str[2])
  165. attrItem.text.text.text = I18N.T("Attr_" .. key)
  166. val = key > 21 and CommonUtil.GetPreciseDecimal(val*0.0001, 3) or math.floor(val)
  167. attrItem.num.text.text = CommonUtil.HeroAttrFormatValue(key, val, true)
  168. end
  169. end
  170. end
  171. if attrCount > 2 then
  172. height = height + 30
  173. end
  174. end
  175. end
  176. itemlua.rectTransform:SetSizeWithCurrentAnchors(UnityEngine.RectTransform.Axis.Vertical, height);
  177. end
  178. itemlua.suitesLv.suitesName.text.text = I18N.T(suitCfgData.SuitName)
  179. itemlua.suitesLv.numlv.text.text = lv
  180. end
  181. end
  182. return item
  183. end
  184. function UIFashionSuitesTipsView:RefreshFashionItem(fashionId, itemlua)
  185. local fashionCfgData = ManagerContainer.CfgMgr:GetFashionById(fashionId)
  186. if not fashionCfgData then
  187. return
  188. end
  189. itemlua.transform.localScale = Vector3.New(0.8, 0.8, 0.8)
  190. itemlua.icon.image.sprite = nil
  191. itemlua.icon.image.enabled = false
  192. itemlua.icon:SetActive(false)
  193. itemlua.frame.image.sprite = nil
  194. itemlua.frame.image.enabled = false
  195. CommonUtil.LoadIcon(self, fashionCfgData.FashionIcon, function (sprite)
  196. itemlua.icon.image.sprite = sprite
  197. itemlua.icon.image.enabled = true
  198. itemlua.icon:SetActive(true)
  199. end, itemlua, "FashionWearItemIconAsyncIdx")
  200. CommonUtil.LoadIcon(self, Constant.Quality_Frame_Icons[fashionCfgData.FashionQuality], function (sprite)
  201. itemlua.frame.image.sprite = sprite
  202. itemlua.frame.image.enabled = true
  203. end, itemlua, "FashionWearItemFrameAsyncIdx")
  204. itemlua.bg:SetActive(true)
  205. itemlua.frame:SetActive(true)
  206. itemlua.selected:SetActive(false)
  207. itemlua.selected2:SetActive(false)
  208. itemlua.disable:SetActive(false)
  209. itemlua.redPoint:SetActive(false)
  210. itemlua.bg.button.onClick:RemoveAllListeners()
  211. itemlua.fashionName.text.text = I18N.T(fashionCfgData.FashionName)
  212. local fashionLogicData = self.controller:GetFashionLogicData(fashionCfgData.FashionId)
  213. itemlua.num.text.text = "Lv "..(fashionLogicData and fashionLogicData.lv or 1)
  214. CommonUtil.SetTotalChildrenGray(itemlua.gameObject, fashionLogicData == nil)
  215. end
  216. function UIFashionSuitesTipsView:RemoveEventListener()
  217. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  218. end
  219. function UIFashionSuitesTipsView:AddUIEventListener()
  220. self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.OnClickClose)
  221. self.uiBase:AddButtonEventListener(self.AnyBtn.button, self, self.OnClickClose)
  222. end
  223. function UIFashionSuitesTipsView:OnClickClose()
  224. self:UIClose()
  225. end
  226. function UIFashionSuitesTipsView:OnHide()
  227. end
  228. function UIFashionSuitesTipsView:OnShow(data)
  229. self.controller:SetData(data)
  230. end
  231. function UIFashionSuitesTipsView:OnClose()
  232. for _,v in pairs(self.fashionSuitList) do
  233. v:Dispose()
  234. end
  235. self.fashionSuitList = nil
  236. self.suitesScrollView.loopListView:Dispose()
  237. end
  238. function UIFashionSuitesTipsView:OnDispose()
  239. self.controller:OnDispose()
  240. end
  241. return UIFashionSuitesTipsView