UIActivityChipRewardPetExchangeView.lua 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. local UIActivityChipRewardPetExchangeView = require("UIActivity/UIActivityChipRewardPetExchangeView_Generate")
  2. local IconPetItemCtr = require("Common/IconPetItemCtr")
  3. local IconItemCtr = require("Common/IconItemCtr")
  4. function UIActivityChipRewardPetExchangeView:OnAwake(data)
  5. self.controller = require("UIActivity/UIActivityChipRewardPetExchangeCtr"):new()
  6. self.controller:Init(self)
  7. self.controller:SetData(data)
  8. end
  9. function UIActivityChipRewardPetExchangeView:AddEventListener()
  10. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  11. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Activity_Data_Change,self,self.ActivityRefresh)
  12. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.ACTIVITY_GLOBAL_REFRESH,self,self.Refresh)
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EXCHANGEPET_NTF,self,self.OnPetRewardBack)
  14. end
  15. function UIActivityChipRewardPetExchangeView:FillContent(data, uiBase)
  16. self.uiBase = uiBase
  17. local gameObject = self.uiBase:GetRoot()
  18. if gameObject ~= nil then
  19. self.gameObject = gameObject
  20. self.transform = gameObject.transform
  21. end
  22. self:InitGenerate(self.transform, data)
  23. self:Init()
  24. end
  25. function UIActivityChipRewardPetExchangeView:Init()
  26. self.isCanExchange = true
  27. self.controller:RefreshChipDatas()
  28. local activeItem = self.controller.activityData
  29. CommonUtil.LoadIcon(self, activeItem.pageBg, function (sprite)
  30. self.banner.image.sprite = sprite
  31. end)
  32. self.selectList = {}
  33. self.cacheNumList = {}
  34. self:InitGrid()
  35. self:Refresh()
  36. if not self.timer then
  37. self.timer = FrameTimer.New(slot(self.DelayInitTop, self), 1)
  38. end
  39. if not self.timer.running then
  40. self.timer:Start()
  41. end
  42. end
  43. function UIActivityChipRewardPetExchangeView:DelayInitTop()
  44. self:InitTop()
  45. end
  46. function UIActivityChipRewardPetExchangeView:OnPetRewardBack(data)
  47. if data.error == 0 then
  48. local itemIndex = self.controller:GetIndexByCfgId(data.reward_idx) - 1
  49. local itemlua = self:GetShowItemByIdx(itemIndex)
  50. if itemlua then
  51. for i = 1, 4 do
  52. if self.cacheNumList[itemIndex][i] and self.selectList[itemIndex][i]then
  53. self.cacheNumList[itemIndex][i].selectCount = 0
  54. self.selectList[itemIndex][i] = {}
  55. end
  56. end
  57. self:Refresh()
  58. end
  59. end
  60. self.isCanExchange = true
  61. end
  62. function UIActivityChipRewardPetExchangeView:InitTop()
  63. if not self.updateTimer then
  64. self.updateTimer = Timer.New(slot(self.UpdateMinute, self), 60, -1)
  65. end
  66. if not self.updateTimer.running then
  67. self.updateTimer:Start()
  68. end
  69. local canOpen = self:RefreshRemainTime()
  70. if canOpen then
  71. local activeItem = self.controller.activityData
  72. ManagerContainer.DataMgr.ActsDataMgr:SendGetGlobalCollectionServerData(activeItem.actId)
  73. end
  74. end
  75. function UIActivityChipRewardPetExchangeView:RefreshRemainTime()
  76. local leftTime = self.controller:GetRemainTime()
  77. if leftTime <= 0 then
  78. self.time.text.text = "0"
  79. ManagerContainer.DataMgr.ActsDataMgr:RefreshRedPointState(Enum.ActivityType.ACTIVITY_TYPE_FESTIVAL_REWARD)
  80. self:OnClickCloseBtn()
  81. return false
  82. end
  83. local day,hour,minute,second = ConvertTimeForm(leftTime)
  84. local timeStr = ""
  85. if day > 0 then
  86. timeStr = day .. Enum.TimeString.m..hour .. Enum.TimeString.h .. minute .. Enum.TimeString.m
  87. else
  88. if hour > 0 then
  89. timeStr = hour .. Enum.TimeString.h .. minute .. Enum.TimeString.m
  90. else
  91. if minute == 0 then
  92. minute = 1
  93. end
  94. timeStr = minute .. Enum.TimeString.m
  95. end
  96. end
  97. self.time.text.text = timeStr
  98. return true
  99. end
  100. function UIActivityChipRewardPetExchangeView:UpdateMinute()
  101. self:RefreshRemainTime()
  102. end
  103. function UIActivityChipRewardPetExchangeView:InitGrid()
  104. self.boxExchange.loopListView:InitListView(0, function(gridView, itemIndex, row, column)
  105. return self:GetItemByRowColumn(gridView, itemIndex, row, column)
  106. end, nil)
  107. end
  108. function UIActivityChipRewardPetExchangeView:ActivityRefresh(actid)
  109. if self.controller:GetActId() == actid then
  110. self:Refresh()
  111. end
  112. end
  113. function UIActivityChipRewardPetExchangeView:Refresh()
  114. local loopListView = self.boxExchange.loopListView
  115. local length = self.controller:GetChipDataLength()
  116. loopListView:SetListItemCount(length)
  117. loopListView:RefreshAllShownItem()
  118. end
  119. function UIActivityChipRewardPetExchangeView:GetItemByRowColumn(gridView, itemIndex, row, column)
  120. local length = self.controller:GetChipDataLength()
  121. if (itemIndex < 0 or itemIndex >= length) then
  122. return nil
  123. end
  124. if not self.cacheNumList[itemIndex] then
  125. self.cacheNumList[itemIndex] = {}
  126. end
  127. local showData = self.controller:GetChipShowDataByIdx(itemIndex)
  128. local cfgData = ManagerContainer.CfgMgr:GetActivitiesPetExchangeCfgById(showData.cfgId)
  129. local enterType = cfgData.Type
  130. local item = gridView:NewListViewItem("PetExchangeItem")
  131. local itemlua = CommonUtil.BindGridViewItem2Lua(self, "PetExchangeItem", item.gameObject)
  132. for i = 1, 4 do
  133. itemlua["coastItem"..(i-1)]:SetActive(false)
  134. end
  135. local globalCount = self.controller:GetGlobalCount(showData.cfgId)
  136. local globalLack = (globalCount >= cfgData.ServersReward and cfgData.ServersReward > 0)
  137. if cfgData.ExchangeCondition1 then
  138. for i = 1, #cfgData.ExchangeCondition1 do
  139. local condition = cfgData.ExchangeCondition1[i]
  140. --两种类型 两种条件结构
  141. local maxCount = enterType == 0 and condition[5] or condition[4]
  142. local index = condition[1]
  143. if not self.cacheNumList[itemIndex][index] then
  144. self.cacheNumList[itemIndex][index] = {}
  145. self.cacheNumList[itemIndex][index].selectCount = 0
  146. self.cacheNumList[itemIndex][index].maxCount = maxCount
  147. end
  148. local costItemLua = itemlua["coastItem"..(index-1)]
  149. self:RefeChipItem(enterType == 0 and costItemLua.iconPetItem or costItemLua.iconItem,condition,{itemIndex,index},globalLack,enterType,costItemLua.addMask)
  150. costItemLua.iconPetItem:SetActive(enterType == 0)
  151. costItemLua.iconItem:SetActive(enterType ~= 0)
  152. costItemLua:SetActive(true)
  153. itemlua["text"..(index)].text.text = I18N.SetLanguageValue(self:GetColorText(self.cacheNumList[itemIndex][index].selectCount,maxCount))
  154. end
  155. end
  156. if cfgData.ExchangeCondition2 then
  157. for i = 1, #cfgData.ExchangeCondition2 do
  158. local condition = cfgData.ExchangeCondition2[i]
  159. --两种类型 两种条件结构
  160. local maxCount = enterType == 0 and condition[5] or condition[4]
  161. local index = condition[1]
  162. if not self.cacheNumList[itemIndex][index] then
  163. self.cacheNumList[itemIndex][index] = {}
  164. self.cacheNumList[itemIndex][index].selectCount = 0
  165. self.cacheNumList[itemIndex][index].maxCount = maxCount
  166. end
  167. if enterType ~= 0 and not (cfgData and cfgData.Scope and cfgData.Scope[i]) then
  168. LogError("策划需检查配置,筛选表与条件数量不一致")
  169. return
  170. end
  171. local data = enterType == 0 and condition or {cfgData.Scope[i],condition[2],condition[3],condition[4],condition[5]}
  172. local costItemLua = itemlua["coastItem"..(index-1)]
  173. self:RefeChipItem(enterType == 0 and costItemLua.iconPetItem or costItemLua.iconItem,data,{itemIndex,index},globalLack,enterType,costItemLua.addMask,true)
  174. costItemLua.iconPetItem:SetActive(enterType == 0)
  175. costItemLua.iconItem:SetActive(enterType ~= 0)
  176. costItemLua:SetActive(true)
  177. itemlua["text"..(index)].text.text = I18N.SetLanguageValue(self:GetColorText(self.cacheNumList[itemIndex][index].selectCount,maxCount))
  178. end
  179. end
  180. itemlua.serverLimit:SetActive(cfgData.ServersReward > 0)
  181. local count1 = cfgData.ExchangeCondition1 and #cfgData.ExchangeCondition1 or 0
  182. local count2 = cfgData.ExchangeCondition2 and #cfgData.ExchangeCondition2 or 0
  183. itemlua.coast.scrollRect.enabled = count1 + count2 > 4
  184. if cfgData.ServersReward > 0 then
  185. local remain = cfgData.ServersReward - globalCount
  186. itemlua.green:SetActive(remain > 0)
  187. itemlua.red:SetActive(remain == 0)
  188. itemlua.number.text.text = remain.."/"..cfgData.ServersReward
  189. end
  190. local remainTimes = cfgData.Number - showData.rewardNum
  191. itemlua.numberReward.text.text = remainTimes
  192. itemlua.mask:SetActive(showData.rewardNum >= cfgData.Number)
  193. self:RefeRewardItem(itemlua.reward.iconItem ,cfgData.Reward,enterType)
  194. local isCanExchange = self:GetItemIsCanExchange(itemIndex)
  195. itemlua.button.button.interactable = isCanExchange
  196. CommonUtil.SetTotalChildrenGray(itemlua.button.gameObject, not isCanExchange)
  197. itemlua.uIRedPointRP:SetActive(isCanExchange and cfgData.Number > showData.rewardNum and ((globalCount < cfgData.ServersReward and cfgData.ServersReward > 0) or cfgData.ServersReward == 0))
  198. self.uiBase:AddButtonUniqueEventListener(itemlua.button.button, self, self.OnChipClick, itemIndex, isCanExchange, globalLack)
  199. return item
  200. end
  201. function UIActivityChipRewardPetExchangeView:GetItemIsCanExchange(itemIndex)
  202. if self.cacheNumList[itemIndex] then
  203. for k, v in pairs(self.cacheNumList[itemIndex]) do
  204. if v.selectCount < v.maxCount then
  205. return false
  206. end
  207. end
  208. end
  209. return true
  210. end
  211. function UIActivityChipRewardPetExchangeView:GetColorText(num,maxNum)
  212. if num < maxNum then
  213. return "<color=red>"..num.."</color>/"..maxNum
  214. else
  215. return "<color=green>"..num.."</color>/"..maxNum
  216. end
  217. end
  218. function UIActivityChipRewardPetExchangeView:RefeRewardItem(itemlua,data,enterType)
  219. local cfgId = data[1][1]
  220. local num = data[1][2]
  221. local cfgData = ManagerContainer.CfgMgr:GetPetDataById(cfgId)
  222. local rewarddata = { cfgId = cfgId, num = num}
  223. local logicData = {cfgId = cfgId,num = num,data = rewarddata,enterType = enterType}
  224. IconItemCtr:SetData(self,itemlua, logicData, nil, self, self.OnRewardItemClick)
  225. end
  226. function UIActivityChipRewardPetExchangeView:RefeChipItem(itemlua,data,indexInfo,globalLack,enterType,addMask,isByQulity)
  227. local itemIndex = indexInfo[1]
  228. local index = indexInfo[2]
  229. if enterType == 0 then --宠物兑换
  230. local target = data[2]
  231. local level = data[3]
  232. local skilllv = data[4]
  233. local num = data[5]
  234. local hasNum
  235. local petDataList = {}
  236. if isByQulity then
  237. local Icon
  238. local frameIcon = Constant.Quality_HeadFrame_Icons[target + 1]
  239. local natureIcon = "Jobs/Jobicon_Unknown"
  240. if target == 2 then
  241. Icon = "Pets/item_petuniversal_mini"
  242. elseif target == 3 then
  243. Icon = "Pets/item_petuniversal_mvp"
  244. end
  245. CommonUtil.LoadIcon(self, Icon, function (sprite)
  246. itemlua.icon.image.sprite = sprite
  247. end)
  248. CommonUtil.LoadIcon(self,frameIcon , function (sprite)
  249. itemlua.frame.image.sprite = sprite
  250. end)
  251. CommonUtil.LoadIcon(self,natureIcon , function (sprite)
  252. itemlua.nature.image.sprite = sprite
  253. end)
  254. itemlua.nature:SetActive(true)
  255. local starFrame
  256. if skilllv > 0 then
  257. starFrame = Constant.PetSkillLvStar_Icons[1]
  258. elseif skilllv > 10 then
  259. starFrame = Constant.PetSkillLvStar_Icons[2]
  260. elseif skilllv > 20 then
  261. starFrame = Constant.PetSkillLvStar_Icons[3]
  262. end
  263. hasNum = ManagerContainer.DataMgr.PetDataMgr:GetPetCountByQulityAndLv(target,level,skilllv)
  264. CommonUtil.LoadIcon(self, starFrame, function (sprite)
  265. itemlua.star.image.sprite = sprite
  266. end)
  267. itemlua.star:SetActive(true)
  268. itemlua.star.advenceLv.text.text = skilllv
  269. itemlua.num.text.text = I18N.SetLanguageValue("Lv."..level)
  270. itemlua.support:SetActive(false)
  271. itemlua.relation:SetActive(false)
  272. itemlua.battle:SetActive(false)
  273. local parms = {data = data,isByQulity = isByQulity,indexInfo = indexInfo,globalLack = globalLack,enterType = enterType}
  274. self.uiBase:AddButtonUniqueEventListener(itemlua.bg.button, self, self.OnItemClick,parms)
  275. else
  276. hasNum = ManagerContainer.DataMgr.PetDataMgr:GetPetCountByIdAndLv(target,level,skilllv)
  277. local logicData = {cfgId = target,level = level, skilllv = skilllv,data = data,isByQulity = isByQulity,indexInfo = indexInfo,globalLack = globalLack,enterType = enterType}
  278. IconPetItemCtr:SetData(self,itemlua, logicData, Enum.ItemIEnterType.PetMats, self, self.OnItemClick)
  279. end
  280. CommonUtil.SetTotalChildrenGray(itemlua.gameObject, hasNum == 0 or globalLack)
  281. local isSelect = self.cacheNumList[itemIndex][index].selectCount == self.cacheNumList[itemIndex][index].maxCount
  282. addMask:SetActive(not isSelect and hasNum > 0 and not globalLack)
  283. elseif enterType == 1 then
  284. local itemType = data[2]
  285. local num = data[4]
  286. local hasNum = 0
  287. if isByQulity then
  288. local needLv = data[3]
  289. local filtrList = data[1]
  290. local target = data[5]
  291. for i = 1, #filtrList do
  292. hasNum = hasNum + CommonUtil.GetOwnResCountByItemId(filtrList[i])
  293. end
  294. local Icon
  295. local levelIcon = Constant.Quality_Equip_LV_Icons[needLv]
  296. local frameIcon = Constant.Quality_HeadFrame_Icons[target + 1]
  297. local cardLableIcon = Constant.Quality_CardType_Icons[target]
  298. if target == 2 then
  299. Icon = "Card_ic/card_carduniversal_mini"
  300. elseif target == 3 then
  301. Icon = "Card_ic/card_carduniversal_mvp"
  302. end
  303. itemlua.level:SetActive(true)
  304. CommonUtil.LoadIcon(self, levelIcon, function (sprite)
  305. itemlua.level.image.sprite = sprite
  306. end)
  307. CommonUtil.LoadIcon(self, Icon, function (sprite)
  308. itemlua.icon.image.sprite = sprite
  309. end)
  310. CommonUtil.LoadIcon(self,frameIcon , function (sprite)
  311. itemlua.frame.image.sprite = sprite
  312. end)
  313. CommonUtil.LoadIcon(self, cardLableIcon, function (sprite)
  314. itemlua.cardLabel.image.sprite = sprite
  315. end)
  316. itemlua.cardLabel:SetActive(true)
  317. itemlua.job:SetActive(false)
  318. itemlua.num:SetActive(false)
  319. itemlua.conertips:SetActive(false)
  320. local parms = {data = data,isByQulity = isByQulity,indexInfo = indexInfo,globalLack = globalLack,enterType = enterType}
  321. self.uiBase:AddButtonUniqueEventListener(itemlua.bg.button, self, self.OnItemClick,parms)
  322. else
  323. local itemId = data[3]
  324. hasNum = CommonUtil.GetOwnResCountByItemId(itemId)
  325. local logicData = {cfgId = itemId,data = data,isByQulity = isByQulity,indexInfo = indexInfo,globalLack = globalLack,enterType = enterType}
  326. IconItemCtr:SetData(self,itemlua, logicData, nil, self, self.OnItemClick)
  327. end
  328. CommonUtil.SetTotalChildrenGray(itemlua.gameObject, hasNum == 0 or globalLack)
  329. local isSelect = self.cacheNumList[itemIndex][index].selectCount == self.cacheNumList[itemIndex][index].maxCount
  330. addMask:SetActive(not isSelect and hasNum > 0 and not globalLack)
  331. end
  332. end
  333. function UIActivityChipRewardPetExchangeView:OnRewardItemClick(button,params)
  334. ManagerContainer.LuaUIMgr:OpenTips(params[0].data)
  335. end
  336. function UIActivityChipRewardPetExchangeView:RemoveEventListener()
  337. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  338. end
  339. function UIActivityChipRewardPetExchangeView:AddUIEventListener()
  340. self.uiBase:AddButtonEventListener(self.AnyBtn.button,self, self.OnClickCloseBtn)
  341. self.uiBase:AddButtonEventListener(self.backBtn.button,self, self.OnClickCloseBtn)
  342. self.uiBase:AddButtonEventListener(self.btnInfo.button, self, self.OnClickPlayRuleBtn)
  343. end
  344. function UIActivityChipRewardPetExchangeView:OnClickPlayRuleBtn()
  345. local rulekey = self.controller:GetRuleKey()
  346. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', rulekey})
  347. end
  348. function UIActivityChipRewardPetExchangeView:OnClickCloseBtn()
  349. ManagerContainer.LuaUIMgr:ClosePage(self.uiBase.PageId)
  350. if self.uiBase.MSourceUIID > 0 then
  351. ManagerContainer.LuaUIMgr:Open(self.uiBase.MSourceUIID)
  352. end
  353. end
  354. function UIActivityChipRewardPetExchangeView:OnChipClick(button, params)
  355. local leftTime = self.controller:GetRemainTime()
  356. if leftTime <= 0 then
  357. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("SetsWordActivity02")
  358. return
  359. end
  360. if not self.isCanExchange then
  361. return
  362. end
  363. if params[2] then
  364. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("SetsWordActivity05")
  365. return
  366. end
  367. self.curridx = params[0]
  368. ManagerContainer.LuaUIMgr:ShowMessageBox("PetExchangetips",nil,nil,self,self.ItemClick1Sure,nil)
  369. end
  370. function UIActivityChipRewardPetExchangeView:OnHide()
  371. end
  372. function UIActivityChipRewardPetExchangeView:OnShow(data)
  373. self.controller:SetData(data)
  374. end
  375. function UIActivityChipRewardPetExchangeView:ItemClick1Sure()
  376. local data = {}
  377. for k, v in pairs(self.selectList[self.curridx]) do
  378. local cfgList={}
  379. for key, value in pairs(v) do
  380. cfgList[#cfgList + 1] = {key = key,value = value}
  381. end
  382. local info = {condition_id = k, cost_item = cfgList}
  383. data[#data + 1] = info
  384. end
  385. local showData = self.controller:GetChipShowDataByIdx(self.curridx)
  386. local cfgData = ManagerContainer.CfgMgr:GetActivitiesPetExchangeCfgById(showData.cfgId)
  387. self.controller:SendGetActivityRewardReq(cfgData.Id,data)
  388. self.isCanExchange = false
  389. end
  390. function UIActivityChipRewardPetExchangeView:OnItemClick(button,params)
  391. if not self.isCanExchange then
  392. return
  393. end
  394. local data = params[0]
  395. local enterType = data.enterType
  396. if data.enterType == 0 then --宠物兑换
  397. local petDataList
  398. local target = data.data[2]
  399. local level = data.data[3]
  400. local skilllv = data.data[4]
  401. local num = data.data[5]
  402. if data.isByQulity then --是否是按品质任意选择
  403. petDataList = ManagerContainer.DataMgr.PetDataMgr:GetPetDataByQulityAndLv(target,level,skilllv)
  404. else
  405. petDataList = ManagerContainer.DataMgr.PetDataMgr:GetPetDataByIdAndLv(target,level,skilllv)
  406. end
  407. local itemIndex = data.indexInfo[1]
  408. local Index = data.indexInfo[2]
  409. if not self.selectList[itemIndex] then
  410. self.selectList[itemIndex] = {}
  411. end
  412. if not self.selectList[itemIndex][Index] then
  413. self.selectList[itemIndex][Index] = {}
  414. end
  415. local otherSelectList = {}
  416. for key, value in pairs(self.selectList) do
  417. for k, v in pairs(value) do
  418. for i, j in pairs(v) do
  419. if not(itemIndex == key and Index == k) then
  420. otherSelectList[i] = j
  421. end
  422. end
  423. end
  424. end
  425. local selectInfo = {selectList =self.selectList[itemIndex][Index],selectCount = self.cacheNumList[itemIndex][Index].selectCount,indexInfo = data.indexInfo,otherSelectList = otherSelectList,conditions = {target,level,skilllv,num,data.isByQulity},enterType = enterType}
  426. local params = {list = petDataList,callback = {self,self.OnSelectCom},selectInfo = selectInfo,enterType = enterType}
  427. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPetExchangeMats,params)
  428. elseif data.enterType == 1 then --宠物以外兑换
  429. local showList
  430. local itemType = data.data[2]
  431. local itemId = data.data[3]
  432. local filtrList = data.data[1]
  433. local num = data.data[4]
  434. local quality
  435. if data.isByQulity then
  436. quality = data.data[5]
  437. showList = self.controller:GetShowListByItemTypeAndFiltrList(itemType,filtrList)
  438. else
  439. showList = self.controller:GetShowListByItemTypeAndId(itemType,itemId)
  440. end
  441. local itemIndex = data.indexInfo[1]
  442. local Index = data.indexInfo[2]
  443. if not self.selectList[itemIndex] then
  444. self.selectList[itemIndex] = {}
  445. end
  446. if not self.selectList[itemIndex][Index] then
  447. self.selectList[itemIndex][Index] = {}
  448. end
  449. local otherSelectList = {}
  450. for key, value in pairs(self.selectList) do
  451. for k, v in pairs(value) do
  452. for i, j in pairs(v) do
  453. if not(itemIndex == key and Index == k) then
  454. otherSelectList[i] = j
  455. end
  456. end
  457. end
  458. end
  459. local selectInfo = {selectList =self.selectList[itemIndex][Index],selectCount = self.cacheNumList[itemIndex][Index].selectCount,indexInfo = data.indexInfo,otherSelectList = otherSelectList,conditions = {itemType,itemId,filtrList,num,data.isByQulity,quality},enterType = enterType}
  460. local params = {list = showList,callback = {self,self.OnSelectCom},selectInfo = selectInfo,enterType = enterType}
  461. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPetExchangeMats,params)
  462. end
  463. end
  464. function UIActivityChipRewardPetExchangeView:OnSelectCom(data)
  465. local selectInfo = data
  466. local enterType = data.enterType
  467. local itemIndex = data.indexInfo[1]
  468. local index = data.indexInfo[2]
  469. local itemlua = self:GetShowItemByIdx(itemIndex)
  470. if itemlua then
  471. self.cacheNumList[itemIndex][index].selectCount = data.selectCount
  472. local hasNum = 0
  473. if enterType == 0 then
  474. if data.conditions[5] then
  475. hasNum = ManagerContainer.DataMgr.PetDataMgr:GetPetCountByQulityAndLv(data.conditions[1],data.conditions[2],data.conditions[3])
  476. else
  477. hasNum = ManagerContainer.DataMgr.PetDataMgr:GetPetCountByIdAndLv(data.conditions[1],data.conditions[2],data.conditions[3])
  478. end
  479. elseif enterType == 1 then
  480. if data.conditions[5] then
  481. local filtrList = data.conditions[3]
  482. for i = 1, #filtrList do
  483. hasNum = hasNum + CommonUtil.GetOwnResCountByItemId(filtrList[i])
  484. end
  485. else
  486. hasNum = CommonUtil.GetOwnResCountByItemId(data.conditions[2])
  487. end
  488. end
  489. itemlua["coastItem"..(index - 1)].addMask:SetActive(data.selectCount < data.maxNum and hasNum and hasNum >0)
  490. itemlua["text"..(index)].text.text = I18N.SetLanguageValue(self:GetColorText(self.cacheNumList[itemIndex][index].selectCount,data.maxNum))
  491. self:CheckSelectIdIsExist(data.selectList,itemIndex,index)
  492. local isCanExchange = self:GetItemIsCanExchange(itemIndex)
  493. local showData = self.controller:GetChipShowDataByIdx(itemIndex)
  494. local cfgData = ManagerContainer.CfgMgr:GetActivitiesPetExchangeCfgById(showData.cfgId)
  495. local globalCount = self.controller:GetGlobalCount(showData.cfgId)
  496. local globalLack = (globalCount >= cfgData.ServersReward and cfgData.ServersReward > 0)
  497. itemlua.button.button.interactable = isCanExchange
  498. CommonUtil.SetTotalChildrenGray(itemlua.button.gameObject, not isCanExchange)
  499. itemlua.uIRedPointRP:SetActive(isCanExchange and cfgData.Number > showData.rewardNum and ((globalCount < cfgData.ServersReward and cfgData.ServersReward > 0) or cfgData.ServersReward == 0))
  500. end
  501. end
  502. function UIActivityChipRewardPetExchangeView:CheckSelectIdIsExist(list,itemIndex,index)
  503. for _, p in pairs(list) do
  504. for key, value in pairs(self.selectList) do
  505. for k, v in pairs(value) do
  506. for i, j in pairs(v) do
  507. if itemIndex == key and index == k then
  508. break
  509. end
  510. if i == _ then
  511. self:RefeItemLuaData(key,k,i,j)
  512. end
  513. end
  514. end
  515. end
  516. end
  517. end
  518. function UIActivityChipRewardPetExchangeView:RefeItemLuaData(itemIndex,index,id,num)
  519. local itemlua = self:GetShowItemByIdx(itemIndex)
  520. if itemlua then
  521. local count = self.cacheNumList[itemIndex][index].selectCount
  522. count = count - num
  523. itemlua["coastItem"..(index - 1)].addMask:SetActive(count < self.cacheNumList[itemIndex][index].maxCount)
  524. itemlua["text"..(index)].text.text = I18N.SetLanguageValue(self:GetColorText(count,self.cacheNumList[itemIndex][index].maxCount))
  525. self.cacheNumList[itemIndex][index].selectCount = count
  526. self.selectList[itemIndex][index][id] = nil
  527. local isCanExchange = self:GetItemIsCanExchange(itemIndex)
  528. local showData = self.controller:GetChipShowDataByIdx(itemIndex)
  529. local cfgData = ManagerContainer.CfgMgr:GetActivitiesPetExchangeCfgById(showData.cfgId)
  530. local globalCount = self.controller:GetGlobalCount(showData.cfgId)
  531. local globalLack = (globalCount >= cfgData.ServersReward and cfgData.ServersReward > 0)
  532. itemlua.button.button.interactable = isCanExchange
  533. CommonUtil.SetTotalChildrenGray(itemlua.button.gameObject, not isCanExchange)
  534. itemlua.uIRedPointRP:SetActive(isCanExchange and cfgData.Number > showData.rewardNum and ((globalCount < cfgData.ServersReward and cfgData.ServersReward > 0) or cfgData.ServersReward == 0))
  535. end
  536. end
  537. function UIActivityChipRewardPetExchangeView:GetShowItemByIdx(idx)
  538. local item = self.boxExchange.loopListView:GetShownItemByItemIndex(idx)
  539. if item then
  540. local itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "PetExchangeItem", item.gameObject)
  541. return itemlua
  542. end
  543. end
  544. function UIActivityChipRewardPetExchangeView:OnClose()
  545. ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UINoticeTips)
  546. if self.timer then
  547. self.timer:Stop()
  548. self.timer = nil
  549. end
  550. if self.updateTimer then
  551. self.updateTimer:Stop()
  552. self.updateTimer = nil
  553. end
  554. self.selectList = {}
  555. self.cacheNumList = {}
  556. self.selectList = nil
  557. self.cacheNumList = nil
  558. end
  559. function UIActivityChipRewardPetExchangeView:OnDispose()
  560. self.boxExchange.loopListView:Dispose()
  561. self.controller:OnDispose()
  562. end
  563. return UIActivityChipRewardPetExchangeView