UIChipDecomposeTipsCtr.lua 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. local UIChipDecomposeTipsCtr = class("UIChipDecomposeTipsCtr", require("UICtrBase"))
  2. local Decompose_Quality_Tips = 4
  3. function UIChipDecomposeTipsCtr:Init(view)
  4. self.view = view
  5. end
  6. function UIChipDecomposeTipsCtr:SetData(data)
  7. self.asyncIdx = 0
  8. if data == nil then return end
  9. self.data = data
  10. self:InitDecomposeDatas()
  11. end
  12. function UIChipDecomposeTipsCtr:GetAsyncIdx()
  13. self.asyncIdx = self.asyncIdx + 1
  14. return self.asyncIdx
  15. end
  16. function UIChipDecomposeTipsCtr:GetData()
  17. return self.data
  18. end
  19. function UIChipDecomposeTipsCtr:OnDispose()
  20. self.data = nil
  21. self.view = nil
  22. self.selected = nil
  23. self.selectedQuality = nil
  24. self.decomposeQualityNum = nil
  25. self.decomposeList = nil
  26. self.decomposeAwardList = nil
  27. end
  28. function UIChipDecomposeTipsCtr:InitDecomposeDatas()
  29. local ls = self.data[1]
  30. local selected = self.data[2] or false
  31. local decomposeQualityNum = {}
  32. local decomposeList = {}
  33. local decomposeAwardMap = {}
  34. local decomposeAwardList = {}
  35. local selectedQuality = {}
  36. for i = 1, #ls do
  37. local chipData = ls[i]
  38. local num = (selected and chipData.cost or chipData.num)
  39. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(chipData.cfgId)
  40. local quality = itemCfgData.Quality
  41. decomposeQualityNum[quality] = (decomposeQualityNum[quality] or 0) + num
  42. table.insert(decomposeList, {key = chipData.cfgId, value = num})
  43. selectedQuality[quality] = true
  44. local resolve = itemCfgData.Resolve
  45. if resolve then
  46. if type(resolve[1]) == 'number' then
  47. -- 单个
  48. local itemCfgId = resolve[1]
  49. local itemNum = resolve[2]
  50. decomposeAwardMap[itemCfgId] = (decomposeAwardMap[itemCfgId] or 0) + itemNum * num
  51. else
  52. for itemCfgId, itemNum in pairs(resolve) do
  53. decomposeAwardMap[itemCfgId] = (decomposeAwardMap[itemCfgId] or 0) + itemNum * num
  54. end
  55. end
  56. end
  57. end
  58. for itemCfgId, itemNum in pairs(decomposeAwardMap) do
  59. if itemNum > 0 then
  60. table.insert(decomposeAwardList, {itemCfgId, itemNum})
  61. end
  62. end
  63. table.sort(decomposeAwardList, function(a, b)
  64. local itemCfgDataA = ManagerContainer.CfgMgr:GetItemById(a[1])
  65. local itemCfgDataB = ManagerContainer.CfgMgr:GetItemById(b[1])
  66. if itemCfgDataA.Quality == itemCfgDataB.Quality then
  67. return a[1] < b[1]
  68. else
  69. return itemCfgDataA.Quality > itemCfgDataB.Quality
  70. end
  71. end)
  72. self.selected = selected
  73. self.decomposeQualityNum = decomposeQualityNum
  74. self.decomposeList = decomposeList
  75. self.decomposeAwardList = decomposeAwardList
  76. self.selectedQuality = selectedQuality
  77. end
  78. function UIChipDecomposeTipsCtr:IsSelected()
  79. return self.selected
  80. end
  81. function UIChipDecomposeTipsCtr:GetDecomposeQualityNum(quality)
  82. return (self.decomposeQualityNum[quality] or 0)
  83. end
  84. function UIChipDecomposeTipsCtr:GetDecomposeAwards()
  85. return self.decomposeAwardList
  86. end
  87. function UIChipDecomposeTipsCtr:GetSelectedQuality(quality)
  88. return self.selectedQuality[quality] or false
  89. end
  90. function UIChipDecomposeTipsCtr:SetSelectedQuality(quality, isSelected)
  91. self.selectedQuality[quality] = isSelected
  92. end
  93. --- 在发送分解前的,提示
  94. ---@return integer(0,不需要提示;1,高品质内容分解提示;2,未选择分解的类型;3;未选择分解碎片)
  95. function UIChipDecomposeTipsCtr:GetErrorCode()
  96. local hight = false
  97. if self:IsSelected() then
  98. if #self.decomposeList <= 0 then
  99. return 3
  100. end
  101. for quality, num in pairs(self.decomposeQualityNum) do
  102. if num > 0 and quality >= Decompose_Quality_Tips then
  103. hight = true
  104. break
  105. end
  106. end
  107. else
  108. local num = 0
  109. for quality, isSelected in pairs(self.selectedQuality) do
  110. if isSelected then
  111. num = num + 1
  112. if quality >= Decompose_Quality_Tips then
  113. hight = true
  114. end
  115. end
  116. end
  117. if num <= 0 then
  118. return 2
  119. end
  120. end
  121. if hight then
  122. return 1
  123. end
  124. return 0
  125. end
  126. function UIChipDecomposeTipsCtr:SendDecompose()
  127. if self:IsSelected() then
  128. if #self.decomposeList > 0 then
  129. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_HERO_CHIP_DECOMPOSE_REQ, {chip_list = self.decomposeList})
  130. end
  131. else
  132. local qualitys = {}
  133. for quality, isSelected in pairs(self.selectedQuality) do
  134. if isSelected then
  135. table.insert(qualitys, quality)
  136. end
  137. end
  138. if #qualitys > 0 then
  139. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_HERO_CHIP_DECOMPOSE_REQ, {chip_type_list = qualitys})
  140. end
  141. end
  142. end
  143. return UIChipDecomposeTipsCtr