UIFashionPaperTipsView.lua 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. local UIFashionPaperTipsView = require("UIFashion/UIFashionPaperTipsView_Generate")
  2. function UIFashionPaperTipsView:OnAwake(data)
  3. self.controller = require("UIFashion/UIFashionPaperTipsCtr")
  4. self.controller:Init(self)
  5. self.controller:SetData(data)
  6. end
  7. function UIFashionPaperTipsView:AddEventListener()
  8. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.COIN_CHANGED, self, self.RefreshMoney)
  9. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.DIAMOND_CHANGED, self, self.RefreshMoney)
  10. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.ITEM_CHANGE, self, self.RefreshItem)
  11. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.FASHION_LIST_CHANGE, self, self.RefreshOwnSign)
  12. end
  13. function UIFashionPaperTipsView:FillContent(data, uiBase)
  14. self.uiBase = uiBase
  15. local gameObject = self.uiBase:GetRoot()
  16. if gameObject ~= nil then
  17. self.gameObject = gameObject
  18. self.transform = gameObject.transform
  19. end
  20. self:InitGenerate(self.transform, data)
  21. self:Init()
  22. end
  23. function UIFashionPaperTipsView:Init()
  24. local cfgId = self.controller:GetCfgId()
  25. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  26. -- 道具图标
  27. ManagerContainer.GoPoolMgr:SpawnItemGo(itemCfgData.ResType, function(itemlua)
  28. CommonUtil.BatchCreateItems(self, itemlua, self.contentItem.transform, self.controller:GetData())
  29. end)
  30. -- 道具名称
  31. self.textName.text.text = itemCfgData.Name
  32. -- 道具类型
  33. self.textType.uILocalizeScript:SetContent("ItemTypeDes_" .. itemCfgData.ResType)
  34. -- 道具描述
  35. self.desTxt.text.text = itemCfgData.Describe
  36. local fashionPaperCfgData = ManagerContainer.CfgMgr:GetFashionPaperById(cfgId)
  37. local fashionCfgData = ManagerContainer.CfgMgr:GetFashionById(fashionPaperCfgData.FashionId)
  38. local fashionQuality = fashionCfgData.FashionQuality
  39. -- 一条属性的时候
  40. if type(fashionQuality[1]) == 'number' then
  41. fashionQuality = {fashionQuality}
  42. end
  43. for i = 1, #fashionQuality do
  44. ManagerContainer.GoPoolMgr:SpawnGo(Enum.PrefabNames.EquipBaseAttrItem, function(itemlua)
  45. CommonUtil.BatchCreateItems(self, itemlua, self.equipBox.attrs.grid.transform, fashionQuality[i], Enum.ItemIEnterType.ItemTips)
  46. end)
  47. end
  48. -- 显示材料
  49. self:RefreshMakeMaterials()
  50. self:RefreshOwnSign()
  51. end
  52. function UIFashionPaperTipsView:RemoveEventListener()
  53. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  54. end
  55. function UIFashionPaperTipsView:AddUIEventListener()
  56. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  57. self.uiBase:AddButtonUniqueEventListener(self.btnClose.button, self, function()
  58. ManagerContainer.LuaUIMgr:Hide(self.uiData.id)
  59. end)
  60. self.uiBase:AddUIEventHandlerClickListener(self.uIEventHandler, function (go)
  61. if go and go.transform:IsChildOf(self.transform) then
  62. return
  63. end
  64. ManagerContainer.LuaUIMgr:Hide(self.uiData.id)
  65. end)
  66. self.uiBase:AddButtonEventListener(self.composeBtn.button, self, self.OnClickComposeBtn)
  67. self.uiBase:AddButtonEventListener(self.decomposeBtn.button, self, self.OnClickDecomposeBtn)
  68. end
  69. function UIFashionPaperTipsView:OnHide()
  70. self.hideFrameCount = Time.frameCount
  71. end
  72. function UIFashionPaperTipsView:OnShow(data)
  73. self.controller:SetData(data)
  74. self:Init()
  75. if self.hideFrameCount and self.hideFrameCount < Time.frameCount then
  76. self.window.animator:Rebind()
  77. end
  78. end
  79. function UIFashionPaperTipsView:OnClose()
  80. end
  81. function UIFashionPaperTipsView:OnDispose()
  82. for i = #self.materialItems, 1, -1 do
  83. local materialItem = self.materialItems[i]
  84. self.materialItems[i] = nil
  85. if materialItem ~= self.materialItem then
  86. if tolua.getpeer(materialItem.text) ~= nil then
  87. tolua.setpeer(materialItem.text, nil)
  88. end
  89. if tolua.getpeer(materialItem.number) ~= nil then
  90. tolua.setpeer(materialItem.number, nil)
  91. end
  92. if tolua.getpeer(materialItem) ~= nil then
  93. tolua.setpeer(materialItem, nil)
  94. end
  95. end
  96. end
  97. self.materialItems = nil
  98. end
  99. function UIFashionPaperTipsView:OnClickComposeBtn()
  100. self:UIClose()
  101. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIFashionCompose, {cfgId = self.controller:GetCfgId()})
  102. end
  103. function UIFashionPaperTipsView:OnClickDecomposeBtn()
  104. local cfgId = self.controller:GetCfgId()
  105. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  106. local itemName1 = I18N.SetLanguageValue(itemCfgData.Name)
  107. local itemNum1 = self.controller:GetOwnedItemNum(cfgId)
  108. local fashionPaperCfgData = ManagerContainer.CfgMgr:GetFashionPaperById(cfgId)
  109. local resolveItem = fashionPaperCfgData.ResolveItem
  110. local content = ""
  111. for i = 1, #resolveItem do
  112. local cfgId = resolveItem[i][1]
  113. local num = resolveItem[i][2]
  114. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  115. local quality = itemCfgData.Quality
  116. local name = I18N.SetLanguageValue(itemCfgData.Name)
  117. content = content ..string.format(Constant.ColorTextArray[quality],name.."X"..(itemNum1 * num))
  118. if i < #resolveItem then
  119. content = content .. string.format("<color=#000000>%s</color>", ",")
  120. end
  121. end
  122. local data = {"DecomposeFashionSure", {itemName1, itemNum1, content}, nil, self, self.SureDecomposeFashion}
  123. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  124. end
  125. function UIFashionPaperTipsView:SureDecomposeFashion()
  126. self.controller:SendDecomposeMsg()
  127. self:UIClose()
  128. end
  129. function UIFashionPaperTipsView:RefreshMoney()
  130. self:RefreshMakeMaterials()
  131. end
  132. function UIFashionPaperTipsView:RefreshItem()
  133. self:RefreshMakeMaterials()
  134. end
  135. function UIFashionPaperTipsView:RefreshMakeMaterials()
  136. local fashionPaperCfgData = ManagerContainer.CfgMgr:GetFashionPaperById(self.controller:GetCfgId())
  137. local makeMaterial = fashionPaperCfgData.MakeMaterial
  138. if type(makeMaterial[1]) == 'number' then
  139. makeMaterial = {makeMaterial}
  140. end
  141. if not self.materialItems then self.materialItems = {self.materialItem} end
  142. local txtNum = #self.materialItems
  143. local num = #makeMaterial
  144. local material = nil
  145. local curOwnedNum = nil
  146. for i = 1, num do
  147. material = makeMaterial[i]
  148. local materialItemCfgData = ManagerContainer.CfgMgr:GetItemById(material[1])
  149. if materialItemCfgData.ResType == Enum.ItemType.Coin
  150. or materialItemCfgData.ResType == Enum.ItemType.Diamond then
  151. else
  152. local materialItem = self.materialItems[i]
  153. if not materialItem then
  154. materialItem = UnityEngine.GameObject.Instantiate(self.materialItem)
  155. if tolua.getpeer(materialItem) == nil then
  156. tolua.setpeer(materialItem, {})
  157. end
  158. local materialItemTrans = materialItem.transform
  159. materialItemTrans:SetParent(self.materialItem.transform.parent)
  160. materialItemTrans.localPosition = Vector3.zero
  161. materialItemTrans.localRotation = Quaternion.identity
  162. materialItemTrans.localScale = Vector3.one
  163. materialItem.text = materialItemTrans:Find("Text").gameObject
  164. if tolua.getpeer(materialItem.text) == nil then
  165. tolua.setpeer(materialItem.text, {})
  166. end
  167. materialItem.text.text = materialItem.text:GetComponent(Enum.TypeInfo.Text)
  168. materialItem.number = materialItemTrans:Find("Number").gameObject
  169. if tolua.getpeer(materialItem.number) == nil then
  170. tolua.setpeer(materialItem.number, {})
  171. end
  172. materialItem.number.text = materialItem.number:GetComponent(Enum.TypeInfo.Text)
  173. self.materialItems[i] = materialItem
  174. end
  175. materialItem:SetActive(true)
  176. materialItem.text.text.text = I18N.SetLanguageValue(materialItemCfgData.Name)
  177. curOwnedNum = ManagerContainer.DataMgr.BagData:GetItemCountByCfgId(material[1])
  178. if curOwnedNum >= material[2] then
  179. materialItem.number.text.text = curOwnedNum .. '/' .. material[2]
  180. else
  181. materialItem.number.text.text = string.format(Constant.RedColorText, curOwnedNum .. '/' .. material[2])
  182. end
  183. end
  184. end
  185. for i = num + 1, txtNum do
  186. self.materialItems[i]:SetActive(false)
  187. end
  188. end
  189. function UIFashionPaperTipsView:RefreshOwnSign()
  190. local owned = self.controller:GetIsOwned()
  191. local enterType = self.controller:GetEnterType()
  192. if enterType == Enum.ItemIEnterType.Bag then
  193. self.btnBox:SetActive(true)
  194. self.composeBtn:SetActive(not owned)
  195. self.decomposeBtn:SetActive(owned)
  196. else
  197. self.btnBox:SetActive(false)
  198. end
  199. self.composedTxt:SetActive(owned)
  200. end
  201. return UIFashionPaperTipsView