UIFashionSuitesTipsView.lua 8.9 KB

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