UIBagCtr.lua 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. local UIBagCtr = class("UIBagCtr", require("UICtrBase"))
  2. function UIBagCtr:Init(view)
  3. self.view = view
  4. end
  5. function UIBagCtr:SetData(data)
  6. self.asyncIdx = 0
  7. self:ClearData()
  8. self.selectPageType = data or self.selectPageType or Enum.BagViewPageType.Item
  9. if self.filterData == nil then
  10. self.filterData = {}
  11. self.filterData.raritySelections = {}
  12. self.filterData.attrSelections = {}
  13. self.filterData.typeSelections = {}
  14. self.isFilter = false
  15. end
  16. end
  17. function UIBagCtr:GetAsyncIdx()
  18. self.asyncIdx = self.asyncIdx + 1
  19. return self.asyncIdx
  20. end
  21. function UIBagCtr:GetData()
  22. return self.data
  23. end
  24. function UIBagCtr:OnDispose()
  25. self.data = nil
  26. self.view = nil
  27. self:ClearData()
  28. self.selectPageType = nil
  29. self.filterData = nil
  30. self.isFilter = false
  31. end
  32. function UIBagCtr:ClearData()
  33. --self.selectPageType = nil
  34. self.showDatas = nil
  35. self.showDataLength = nil
  36. self.equipDatas = nil
  37. self.itemDatas = nil
  38. self.cardDatas = nil
  39. -- self.row = nil
  40. -- self.minColumn = nil
  41. end
  42. function UIBagCtr:GetBagViewPageType()
  43. return self.selectPageType
  44. end
  45. function UIBagCtr:SetBagViewPageType(bagViewPageType)
  46. if self.selectPageType == bagViewPageType then
  47. return false
  48. end
  49. self.selectPageType = bagViewPageType
  50. self:RefreshShowDataType()
  51. return true
  52. end
  53. function UIBagCtr:RefreshShowDataType()
  54. if self.selectPageType == Enum.BagViewPageType.Equip then
  55. if not self.equipDatas then
  56. self.equipDatas = self:RefreshEquipDatas()
  57. end
  58. self.showDatas = self.equipDatas
  59. elseif self.selectPageType == Enum.BagViewPageType.Item then
  60. if not self.itemDatas then
  61. self.itemDatas = self:RefreshItemDatas()
  62. end
  63. self.showDatas = self.itemDatas
  64. elseif self.selectPageType == Enum.BagViewPageType.Card then
  65. if not self.cardDatas then
  66. self.cardDatas = self:RefreshCardDatas()
  67. end
  68. self.showDatas = self.cardDatas
  69. elseif self.selectPageType == Enum.BagViewPageType.SkillEquip then
  70. -- if not self.skillEquipDatas then
  71. self.skillEquipDatas = self:RefreshSkillEquipDatas()
  72. -- end
  73. self.showDatas = self.skillEquipDatas
  74. else
  75. self.showDatas = nil
  76. end
  77. local showDataLength = 0
  78. if self.showDatas then
  79. showDataLength = #self.showDatas
  80. -- if self.row and self.minColumn then
  81. -- local curColumn = Mathf.Ceil(showDataLength / self.row) + 2
  82. -- if curColumn < self.minColumn then
  83. -- curColumn = self.minColumn
  84. -- end
  85. -- showDataLength = curColumn * self.row
  86. -- end
  87. end
  88. self.showDataLength = showDataLength
  89. end
  90. -- function UIBagCtr:SetGridRowColumn(row, minColumn)
  91. -- self.row = row
  92. -- self.minColumn = minColumn
  93. -- end
  94. function UIBagCtr:GetShowDataLength()
  95. return self.showDataLength or 0
  96. end
  97. function UIBagCtr:GetShowData(itemIndex)
  98. return self.showDatas and self.showDatas[itemIndex + 1] or nil
  99. end
  100. function UIBagCtr:GetAllShowDatas()
  101. return self.showDatas
  102. end
  103. function UIBagCtr:GetBagViewPageTypeByItemType(itemType)
  104. if itemType == Enum.ItemType.Equip then
  105. return Enum.BagViewPageType.Equip
  106. elseif itemType == Enum.ItemType.SkillEquip then
  107. return Enum.BagViewPageType.SkillEquip
  108. elseif itemType == Enum.ItemType.Card then
  109. return Enum.BagViewPageType.Card
  110. else
  111. return Enum.BagViewPageType.Item
  112. end
  113. end
  114. function UIBagCtr:RefreshViewDatas(bagViewPageType)
  115. if bagViewPageType == Enum.BagViewPageType.Equip then
  116. self.equipDatas = nil
  117. elseif bagViewPageType == Enum.BagViewPageType.Item then
  118. self.itemDatas = nil
  119. elseif bagViewPageType == Enum.BagViewPageType.Card then
  120. self.cardDatas = nil
  121. elseif bagViewPageType == Enum.BagViewPageType.SkillEquip then
  122. self.skillEquipDatas = nil
  123. end
  124. if self.selectPageType == bagViewPageType then
  125. self:RefreshShowDataType()
  126. end
  127. end
  128. function UIBagCtr:RefreshEquipDatas()
  129. local equipDatasSource = ManagerContainer.DataMgr.EquipData:GetAllEquipDataMap()
  130. local ls = {}
  131. for _,v in pairs(equipDatasSource) do
  132. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(v.cfgId)
  133. local composition = itemCfgData.Composition
  134. local num = v.num
  135. while (num > composition) do
  136. table.insert(ls, {cfgId = v.cfgId, num = composition, fightPower = v.fightPower})
  137. num = num - composition
  138. end
  139. -- 最后还需要把剩余的单独占格
  140. if num > 0 then
  141. table.insert(ls, {cfgId = v.cfgId, num = num, fightPower = v.fightPower})
  142. end
  143. end
  144. table.sort(ls, function(a, b)
  145. local equipCfgDataA = ManagerContainer.CfgMgr:GetEquipById(a.cfgId)
  146. local equipCfgDataB = ManagerContainer.CfgMgr:GetEquipById(b.cfgId)
  147. if equipCfgDataA.EquipLevel == equipCfgDataB.EquipLevel then
  148. if equipCfgDataA.Id == equipCfgDataB.Id then
  149. return a.num > b.num
  150. else
  151. return equipCfgDataA.Id > equipCfgDataB.Id
  152. end
  153. else
  154. return equipCfgDataA.EquipLevel > equipCfgDataB.EquipLevel
  155. end
  156. end)
  157. return ls
  158. end
  159. function UIBagCtr:RefreshItemDatas()
  160. local itemDatasSource = ManagerContainer.DataMgr.BagData:GetAllItemDatas()
  161. local ls = {}
  162. for _,v in pairs(itemDatasSource) do
  163. if v.num > 0 then
  164. table.insert(ls, v)
  165. end
  166. end
  167. -- local fashionPaperMap = ManagerContainer.DataMgr.FashionData:GetFashionPaperMap()
  168. -- for key,value in pairs(fashionPaperMap) do
  169. -- if value > 0 then
  170. -- table.insert(ls, { cfgId = key, num = value })
  171. -- end
  172. -- end
  173. table.sort(ls, function(a, b)
  174. local itemCfgDataA = ManagerContainer.CfgMgr:GetItemById(a.cfgId)
  175. local itemCfgDataB = ManagerContainer.CfgMgr:GetItemById(b.cfgId)
  176. if itemCfgDataA.Quality == itemCfgDataB.Quality then
  177. return a.id < b.id
  178. else
  179. return itemCfgDataA.Quality > itemCfgDataB.Quality
  180. end
  181. end)
  182. return ls
  183. end
  184. function UIBagCtr:RefreshCardDatas()
  185. local cardDatasSource = ManagerContainer.DataMgr.CardData:GetAllCardDataMap()
  186. local ls = {}
  187. for _,v in pairs(cardDatasSource) do
  188. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(v.cfgId)
  189. local composition = itemCfgData.Composition
  190. local num = v.num
  191. while (num > composition) do
  192. local data = {cfgId = v.cfgId, num = composition, CardType = v.CardType,
  193. CardLevel = v.CardLevel,FightPower = v.FightPower,Profession = v.Profession,Attribute2 = v.Attribute2,CardLocation = v.CardLocation}
  194. table.insert(ls, data)
  195. num = num - composition
  196. end
  197. -- 最后还需要把剩余的单独占格
  198. if num > 0 then
  199. local data = {cfgId = v.cfgId, num = num, CardType = v.CardType,
  200. CardLevel = v.CardLevel,FightPower = v.FightPower,Profession = v.Profession,Attribute2 = v.Attribute2,CardLocation = v.CardLocation}
  201. table.insert(ls, data)
  202. end
  203. end
  204. --table.sort(ls, function(a, b)
  205. -- local itemCfgDataA = ManagerContainer.CfgMgr:GetItemById(a.cfgId)
  206. -- local itemCfgDataB = ManagerContainer.CfgMgr:GetItemById(b.cfgId)
  207. -- if itemCfgDataA.Quality == itemCfgDataB.Quality then
  208. -- if a.cfgId == b.cfgId then
  209. -- return a.num > b.num
  210. -- else
  211. -- return a.cfgId > b.cfgId
  212. -- end
  213. -- else
  214. -- return itemCfgDataA.Quality > itemCfgDataB.Quality
  215. -- end
  216. --end)
  217. local cardDatas
  218. cardDatas = CommonUtil.ArrayFilterSelections(ls, Enum.FilterType.AND, {"CardType", "Attribute2", "CardLocation"}, {self.filterData.raritySelections, self.filterData.attrSelections, self.filterData.typeSelections})
  219. if cardDatas ~= nil then
  220. CommonUtil.ArraySortSelections(cardDatas, Enum.TableSortRule.Down, "CardType", "CardLevel", "FightPower", "cfgId")
  221. end
  222. if cardDatas == nil then
  223. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
  224. end
  225. --LogHRWarning(Inspect(cardDatas))
  226. return cardDatas
  227. end
  228. function UIBagCtr:RefreshSkillEquipDatas()
  229. local skillEquipDatas = ManagerContainer.DataMgr.SkillEquipData:GetSkillEquips()
  230. if skillEquipDatas then
  231. CommonUtil.ArraySortSelections(skillEquipDatas, Enum.TableSortRule.Down, "quality", "starLv", "cfgId", "id")
  232. end
  233. return skillEquipDatas
  234. end
  235. function UIBagCtr:SetFilterData(data, isFilter)
  236. self.filterData = data
  237. self.isFilter = isFilter
  238. end
  239. function UIBagCtr:GetFilterData()
  240. return self.filterData
  241. end
  242. function UIBagCtr:GetIsFilter()
  243. return self.isFilter
  244. end
  245. return UIBagCtr