UIPetMatsCtr.lua 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. local UIPetMatsCtr = class("UIPetMatsCtr", require("UICtrBase"))
  2. local commonSkillMatId = 819
  3. function UIPetMatsCtr:Init(view)
  4. self.view = view
  5. end
  6. function UIPetMatsCtr:SetData(data)
  7. self.asyncIdx = 0
  8. if data == nil then return end
  9. self.data = data
  10. commonSkillMatId = GlobalConfig.Instance:GetConfigIntValue(313)
  11. end
  12. function UIPetMatsCtr:GetAsyncIdx()
  13. self.asyncIdx = self.asyncIdx + 1
  14. return self.asyncIdx
  15. end
  16. function UIPetMatsCtr:GetData()
  17. return self.data
  18. end
  19. function UIPetMatsCtr:SetChildController(ctr)
  20. self.childCtr = ctr
  21. end
  22. function UIPetMatsCtr:GetFromUIId()
  23. return self.data.fromUIId
  24. end
  25. function UIPetMatsCtr:GetRelationCfgId()
  26. return self.data.relationCfgId
  27. end
  28. function UIPetMatsCtr:GetSupportIdx()
  29. return self.data.supportIdx
  30. end
  31. function UIPetMatsCtr:GetEnterType()
  32. return self.data.enterType or Enum.ItemIEnterType.PetMats
  33. end
  34. function UIPetMatsCtr:SetSelectedData(idx)
  35. if self.data.selectedIdx == idx then
  36. self.data.selectedIdx = nil
  37. else
  38. self.data.selectedIdx = idx
  39. end
  40. end
  41. function UIPetMatsCtr:RefreshPetDatas()
  42. local fromUIId = self:GetFromUIId()
  43. if fromUIId == Enum.UIPageName.UIPetLvUp then
  44. return self:RefreshSkillMatsData()
  45. elseif fromUIId == Enum.UIPageName.UIPetRelations then
  46. return self:RefreshRelationsData()
  47. elseif fromUIId == Enum.UIPageName.UIPetMySupport then
  48. return self:RefreshSupportData()
  49. end
  50. end
  51. function UIPetMatsCtr:RefreshSkillMatsData()
  52. local selfId = self.data.selfId
  53. local selectedId = self.data.selectedId
  54. local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
  55. local petDatas = petDatasSource
  56. local selfDatas
  57. if selfId then
  58. local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(selfId)
  59. selfDatas = CommonUtil.ArrayFilterSelections(petDatas, Enum.FilterType.AND, {"cfgId", "qiyueHeroId"}, {petData.cfgId, 0})
  60. local commonDatas = CommonUtil.ArrayFilterSelections(petDatas, Enum.FilterType.AND, {"cfgId", "qiyueHeroId"}, {commonSkillMatId, 0})
  61. for j = #selfDatas, 1, -1 do
  62. if selfDatas[j].id == selfId then
  63. table.remove(selfDatas, j)
  64. break
  65. end
  66. end
  67. if selfDatas ~= nil or commonDatas ~= nil then
  68. CommonUtil.ArraySortSelections(selfDatas, Enum.TableSortRule.Up, "isBattle", "quality", "isSupport", "isRelevant", "advanceLevel", "level", "cfgId")
  69. CommonUtil.ArraySortSelections(commonDatas, Enum.TableSortRule.Up, "isBattle", "quality", "isSupport", "isRelevant", "advanceLevel", "level", "cfgId")
  70. if petData.cfgId ~= commonSkillMatId then
  71. for i = 1, #commonDatas do
  72. selfDatas[#selfDatas + 1] = commonDatas[i]
  73. end
  74. end
  75. for k,v in pairs(selfDatas) do
  76. v.idx = k
  77. end
  78. if selectedId then
  79. for j = #selfDatas, 1, -1 do
  80. if selfDatas[j].id == selectedId then
  81. selfDatas[j].selected = 1
  82. self.data.curSelectedData = selfDatas[j]
  83. self.data.selectedIdx = selfDatas[j].idx
  84. break
  85. end
  86. end
  87. end
  88. end
  89. if selfDatas == nil then
  90. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
  91. end
  92. -- LogHRWarning(Inspect(selfDatas))
  93. end
  94. return selfDatas
  95. end
  96. function UIPetMatsCtr:RefreshRelationsData()
  97. local relationCfgId = self.data.relationCfgId
  98. local relationIdx = self.data.curRelationIdx
  99. local relationCfgData = ManagerContainer.CfgMgr:GetPetPartnerDataById(relationCfgId)
  100. local petDatas
  101. if not relationCfgData then
  102. return petDatas
  103. end
  104. local function ParseToPetData(uid, nickname, petData)
  105. local data = {}
  106. data.uid = uid
  107. data.nickname = nickname
  108. data.id = petData.id
  109. data.cfgId = petData.cfgId
  110. data.quality = petData.quality
  111. data.level = petData.level
  112. data.advanceLevel = petData.advanceLevel
  113. data.natureType = petData.natureType
  114. data.isBattle = petData.isBattle
  115. data.isSupport = petData.isSupport
  116. data.isRelevant = petData.isRelevant
  117. return data
  118. end
  119. local selectedPetId, selectedUid
  120. local relationData = ManagerContainer.DataMgr.PetDataMgr:GetPetRelationDataByCfgId(relationCfgId)
  121. if relationData and relationData.relationPets then
  122. for k,v in pairs(relationData.relationPets) do
  123. if k == relationIdx then
  124. selectedPetId, selectedUid = v.petId, v.uid
  125. break
  126. end
  127. end
  128. end
  129. local function IsUsed(uid, id)
  130. if relationData and relationData.relationPets then
  131. for k,v in pairs(relationData.relationPets) do
  132. if v.uid == uid and v.petId == id then
  133. return true
  134. end
  135. end
  136. end
  137. return false
  138. end
  139. local cfgIds, advenceNum = {},{}
  140. local condition = relationCfgData['Condition1']
  141. if condition and condition[relationIdx] then
  142. local cfgId = condition[relationIdx][1]
  143. local num = condition[relationIdx][2]
  144. cfgIds[#cfgIds + 1] = cfgId
  145. advenceNum[#advenceNum + 1] = num
  146. end
  147. local val = GlobalConfig.Instance:GetConfigStrValue(208)
  148. local advanceLimit = 5
  149. if val ~= "" and val ~= nil then
  150. local advenceLvStage = CommonUtil.DeserializeGlobalStrToTable(val)
  151. advanceLimit = #advenceLvStage
  152. end
  153. if #advenceNum > 0 then
  154. for i = 1, advanceLimit do
  155. if i > advenceNum[1] and not CommonUtil.EleInTable(i, advenceNum) then
  156. advenceNum[#advenceNum + 1] = i
  157. end
  158. end
  159. end
  160. local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
  161. petDatas = petDatasSource
  162. local friendDatas = ManagerContainer.DataMgr.PetDataMgr:GetCurFriendSupportDatas()
  163. local list = {}
  164. local uid = 0
  165. local nickname = ManagerContainer.DataMgr.UserData:GetUserNickname()
  166. for _,v in pairs(petDatas) do
  167. if selectedUid ~= uid or v.id ~= selectedPetId then
  168. local data = ParseToPetData(uid, nickname, v)
  169. data.canUse = not IsUsed(uid, v.id)
  170. list[#list + 1] = data
  171. end
  172. end
  173. for _,v in pairs(friendDatas) do
  174. local uid = v.uid
  175. local nickname = v.nickname
  176. for _,v1 in pairs(v.supportPets) do
  177. if selectedUid ~= uid or selectedPetId ~= v1.id then
  178. local data = ParseToPetData(uid, nickname, v1)
  179. data.canUse = not IsUsed(uid, v1.id)
  180. list[#list + 1] = data
  181. end
  182. end
  183. end
  184. if list ~= nil then
  185. list = CommonUtil.ArrayFilterSelections(list, Enum.FilterType.AND, {"cfgId", "advanceLevel"}, {cfgIds, advenceNum})
  186. CommonUtil.ArraySortListSelections(list, {Enum.TableSortRule.Down,Enum.TableSortRule.Up,Enum.TableSortRule.Up, Enum.TableSortRule.Up, Enum.TableSortRule.Down},
  187. {"canUse", "isBattle", "isRelevant", "isSupport", "advanceLevel"})
  188. for k,v in pairs(list) do
  189. v.idx = k
  190. end
  191. end
  192. if list == nil then
  193. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
  194. end
  195. return list
  196. end
  197. function UIPetMatsCtr:RefreshSupportData()
  198. local mySupportPets = ManagerContainer.DataMgr.PetDataMgr:GetMySupportPets()
  199. local function IsUsed(id)
  200. if mySupportPets then
  201. for _,v in pairs(mySupportPets) do
  202. if v.id == id then
  203. return true
  204. end
  205. end
  206. end
  207. return false
  208. end
  209. local petDatasSource = ManagerContainer.DataMgr.PetDataMgr:GetPetDatas()
  210. local petDatas = petDatasSource
  211. if petDatas == nil then
  212. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NoCardTips3")
  213. end
  214. if petDatas then
  215. for k,v in pairs(petDatas) do
  216. v.isUsed = IsUsed(v.id)
  217. end
  218. CommonUtil.ArraySortSelections(petDatas, Enum.TableSortRule.Down, "isUsed", "quality", "advanceLevel", "level", "cfgId")
  219. for k,v in pairs(petDatas) do
  220. v.idx = k
  221. end
  222. -- LogHRWarning(Inspect(petDatas))
  223. end
  224. return petDatas
  225. end
  226. function UIPetMatsCtr:GetCurSelectedIdx()
  227. return self.data.curSelectedData, self.data.selectedIdx
  228. end
  229. function UIPetMatsCtr:GetCurSelectedIdByIdx()
  230. if self.childCtr and self.data.selectedIdx then
  231. local data = self.childCtr:GetShowData(self.data.selectedIdx - 1)
  232. return data.id
  233. end
  234. return nil
  235. end
  236. function UIPetMatsCtr:GetCurSelectedDataByIdx()
  237. if self.childCtr and self.data.selectedIdx then
  238. local data = self.childCtr:GetShowData(self.data.selectedIdx - 1)
  239. return data
  240. end
  241. return nil
  242. end
  243. function UIPetMatsCtr:WasSkillUp(petData)
  244. if not petData.skillList then return false end
  245. for _,v in pairs(petData.skillList) do
  246. if v.level > 1 then
  247. return true
  248. end
  249. end
  250. return false
  251. end
  252. function UIPetMatsCtr:OnDispose()
  253. self.childCtr = nil
  254. self.data = nil
  255. self.view = nil
  256. end
  257. return UIPetMatsCtr