UIPetExchangeMatsView.lua 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. local UIPetExchangeMatsView = require("UIPet/UIPetExchangeMatsView_Generate")
  2. local RectOffset = UnityEngine.RectOffset
  3. function UIPetExchangeMatsView:OnAwake(data)
  4. self.controller = require("UIPet/UIPetExchangeMatsCtr"):new()
  5. self.controller:Init(self)
  6. self.controller:SetData(data)
  7. end
  8. function UIPetExchangeMatsView:AddEventListener()
  9. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  10. end
  11. function UIPetExchangeMatsView:FillContent(data, uiBase)
  12. self.uiBase = uiBase
  13. local gameObject = self.uiBase:GetRoot()
  14. if gameObject ~= nil then
  15. self.gameObject = gameObject
  16. self.transform = gameObject.transform
  17. end
  18. self:InitGenerate(self.transform, data)
  19. self:Init()
  20. end
  21. function UIPetExchangeMatsView:InitGrid()
  22. self.mats.loopGridView:InitGridView(0, function(gridView, itemIndex, row, column)
  23. return self:GetItemByRowColumn(gridView, itemIndex, row, column)
  24. end, nil)
  25. self:InitData()
  26. end
  27. function UIPetExchangeMatsView:InitData()
  28. local loopGridView = self.mats.loopGridView
  29. loopGridView.ItemPadding = Vector2(20, 20)
  30. local itemSize = loopGridView.ItemSize
  31. local itemPadding = loopGridView.ItemPadding
  32. local padding = loopGridView.Padding
  33. local itemSizeWithPadding = itemPadding + itemSize
  34. local width = loopGridView.ViewPortWidth - padding.left - padding.right + itemPadding.x
  35. local height = loopGridView.ViewPortHeight - padding.top
  36. local row = Mathf.Floor(width / (itemSizeWithPadding.x))
  37. local column = Mathf.Ceil(height / (itemSizeWithPadding.y))
  38. local realWidth = row * itemSizeWithPadding.x
  39. local offset = width - realWidth
  40. if offset > 0 then
  41. offset = offset * 0.5
  42. local newPadding = RectOffset(offset + padding.left, offset + padding.right, padding.top, padding.bottom)
  43. loopGridView:SetPadding(newPadding)
  44. end
  45. loopGridView:SetGridFixedGroupCount(SuperScrollView.GridFixedType.ColumnCountFixed, row)
  46. self.defaultRectOffset = padding
  47. self.isInit = true
  48. self.controller:SetGridRowColumn(row, column)
  49. end
  50. function UIPetExchangeMatsView:Refresh(resetPos)
  51. self.controller:RefreshShowDataType()
  52. local loopGridView = self.mats.loopGridView
  53. local length = self.controller:GetShowDataLength()
  54. if resetPos then
  55. loopGridView:RefreshListByIndex(length, 0)
  56. else
  57. loopGridView:RefreshListByIndex(length)
  58. end
  59. local realLength = self.controller:GetRealShowDataLength()
  60. if self.noPets then
  61. self.noPets:SetActive(realLength == 0)
  62. end
  63. loopGridView.gameObject:SetActive(true)
  64. end
  65. function UIPetExchangeMatsView:MoveToIndex(idx)
  66. self.mats.loopGridView:MovePanelToItemByIndex(idx)
  67. end
  68. function UIPetExchangeMatsView:GetItemByRowColumn(gridView, itemIndex, row, column)
  69. local data = self.controller:GetShowData(itemIndex)
  70. local item = nil
  71. if data then
  72. local enterType = self.controller:GetenterType()
  73. local showData = CommonUtil.TableClone(data)
  74. showData.idx = itemIndex
  75. if enterType == 0 then
  76. item = gridView:NewListViewItem("IconPetItem")
  77. item.gameObject.name = itemIndex
  78. local itemlua = CommonUtil.BindGridViewItem2Lua(self, "IconPetItem", item.gameObject)
  79. CommonUtil.UpdateItemPrefab(self, itemlua, showData, self.enterType, self, self.OnItemClick)
  80. if self.SelectIndexList[itemIndex] then
  81. itemlua.selected:SetActive(true)
  82. end
  83. elseif enterType == 1 then
  84. item = gridView:NewListViewItem("CardIconItem")
  85. item.gameObject.name = itemIndex
  86. local itemlua = CommonUtil.BindGridViewItem2Lua(self, "CardIconItem", item.gameObject)
  87. CommonUtil.UpdateItemPrefab(self, itemlua.iconItem, showData, self.enterType, self, self.OnItemClick)
  88. itemlua.add:SetActive(false)
  89. itemlua.mask:SetActive(false)
  90. self.uiBase:AddButtonUniqueEventListener(itemlua.bg.button, self, self.OnItemClick, itemIndex,showData)
  91. self.uiBase:AddButtonUniqueEventListener(itemlua.btnRemove.button, self, self.OnRemoveItemClick, itemIndex,showData.cfgId)
  92. if self.SelectIndexList[itemIndex] then
  93. itemlua.selected2:SetActive(true)
  94. itemlua.btnRemove:SetActive(true)
  95. itemlua.iconItem.num.text.text = self.SelectIndexList[itemIndex].."/"..showData.num
  96. else
  97. itemlua.selected2:SetActive(false)
  98. itemlua.btnRemove:SetActive(false)
  99. itemlua.iconItem.num.text.text = "0/"..showData.num
  100. end
  101. end
  102. else
  103. item = gridView:NewListViewItem('IconEmptyItem')
  104. end
  105. return item
  106. end
  107. function UIPetExchangeMatsView:OnItemClick(button, params)
  108. local enterType = self.controller:GetenterType()
  109. --LogError("==============OnItemClick========enterType = "..enterType)
  110. local data = enterType == 0 and params[0] or params[1]
  111. --LogError("==============OnItemClick========data = "..Inspect(data))
  112. local conditions = self.controller:Getconditions()
  113. local count = self.controller:GetSelectCount()
  114. self.selectedIdx = data.idx
  115. local luaitem = self:GetShowItemByIdx(self.selectedIdx)
  116. if enterType == 0 then
  117. self.selectedPetUid = data.id
  118. if luaitem and luaitem.selected.activeSelf then
  119. self:PetClickSure()
  120. return
  121. end
  122. local maxSelectNum = self.controller:GetMaxSelectNum()
  123. if count >= maxSelectNum then
  124. self:PetClickSure()
  125. return
  126. end
  127. local otherSelectList = self.controller:GetotherSelectList()
  128. if otherSelectList[data.id] then
  129. local data = {"PetExchangetips2", nil, nil, self, self.PetClickSure}
  130. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  131. return
  132. end
  133. if conditions then
  134. if conditions[2] < data.level or conditions[3] <self:GetSkillLv(data.skillList) then
  135. local data = {"PetCostNotify11", nil, nil, self, self.PetClickSure}
  136. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  137. elseif data.isRelevant then
  138. local data = {"PetCostNotify8", nil, nil, self, self.PetClickSure_Cancle}
  139. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  140. elseif data.isSupport then
  141. local data = {"PetCostNotify10", nil, nil, self, self.PetClickSure_Cancle}
  142. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  143. else
  144. self:PetClickSure()
  145. end
  146. end
  147. elseif enterType == 1 then
  148. self.selectedPetUid = data.cfgId
  149. if luaitem and luaitem.selected2.activeSelf then
  150. self:PetClickSure()
  151. return
  152. end
  153. local maxSelectNum = self.controller:GetMaxSelectNum()
  154. if count >= maxSelectNum then
  155. self:PetClickSure()
  156. return
  157. end
  158. local otherSelectList = self.controller:GetotherSelectList()
  159. if otherSelectList[data.cfgId] then
  160. local data = {"PetExchangetips2", nil, nil, self, self.PetClickSure}
  161. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  162. return
  163. end
  164. self:PetClickSure()
  165. end
  166. end
  167. function UIPetExchangeMatsView:OnRemoveItemClick(button,params)
  168. local index = params[0]
  169. local cfgId = params[1]
  170. local selectList = self.SelectIndex
  171. local count = self.controller:GetSelectCount()
  172. local maxSelectNum = self.controller:GetMaxSelectNum()
  173. local luaitem = self:GetShowItemByIdx(index)
  174. local num = CommonUtil.GetOwnResCountByItemId(cfgId)
  175. if selectList[cfgId] then
  176. count = count - 1
  177. selectList[cfgId] = selectList[cfgId] - 1
  178. if selectList[cfgId] > 0 then
  179. luaitem.selected2:SetActive(true)
  180. luaitem.btnRemove:SetActive(true)
  181. luaitem.iconItem.num.text.text = selectList[cfgId].."/"..num
  182. else
  183. luaitem.selected2:SetActive(false)
  184. luaitem.btnRemove:SetActive(false)
  185. count = count - selectList[cfgId]
  186. luaitem.iconItem.num.text.text = "0/"..num
  187. selectList[cfgId] = nil
  188. end
  189. end
  190. self.controller:SetCurrSelectCount(count)
  191. self.number.text.text = I18N.SetLanguageValue(count.."/"..maxSelectNum)
  192. end
  193. function UIPetExchangeMatsView:PetClickSure_Cancle()
  194. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("PetExchangetips3")
  195. end
  196. function UIPetExchangeMatsView:PetClickSure()
  197. local enterType = self.controller:GetenterType()
  198. local maxSelectNum = self.controller:GetMaxSelectNum()
  199. local luaitem = self:GetShowItemByIdx(self.selectedIdx)
  200. local selectList = self.SelectIndex
  201. local count = self.controller:GetSelectCount()
  202. if count < maxSelectNum then
  203. if selectList[self.selectedPetUid] then
  204. if luaitem then
  205. if enterType == 0 then
  206. luaitem.selected:SetActive(false)
  207. selectList[self.selectedPetUid] = nil
  208. count = count - 1
  209. elseif enterType == 1 then
  210. luaitem.selected2:SetActive(false)
  211. luaitem.btnRemove:SetActive(false)
  212. count = count - selectList[self.selectedPetUid]
  213. local num = CommonUtil.GetOwnResCountByItemId(self.selectedPetUid)
  214. luaitem.iconItem.num.text.text = "0/"..num
  215. selectList[self.selectedPetUid] = nil
  216. end
  217. end
  218. else
  219. if enterType == 0 then
  220. luaitem.selected:SetActive(true)
  221. selectList[self.selectedPetUid] = 1
  222. count = count + 1
  223. elseif enterType == 1 then
  224. luaitem.selected2:SetActive(true)
  225. luaitem.btnRemove:SetActive(true)
  226. local num = CommonUtil.GetOwnResCountByItemId(self.selectedPetUid)
  227. selectList[self.selectedPetUid] = math.min(num,maxSelectNum - count)
  228. luaitem.iconItem.num.text.text = selectList[self.selectedPetUid].."/"..num
  229. count = count + selectList[self.selectedPetUid]
  230. end
  231. end
  232. else
  233. if selectList[self.selectedPetUid] then
  234. if luaitem then
  235. if enterType == 0 then
  236. luaitem.selected:SetActive(false)
  237. selectList[self.selectedPetUid] = nil
  238. count = count - 1
  239. elseif enterType == 1 then
  240. luaitem.selected2:SetActive(false)
  241. luaitem.selected2:SetActive(false)
  242. luaitem.btnRemove:SetActive(false)
  243. count = count - selectList[self.selectedPetUid]
  244. local num = CommonUtil.GetOwnResCountByItemId(self.selectedPetUid)
  245. luaitem.iconItem.num.text.text = "0/"..num
  246. selectList[self.selectedPetUid] = nil
  247. end
  248. end
  249. else
  250. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("PetExchangetips1")
  251. end
  252. end
  253. self.controller:SetCurrSelectCount(count)
  254. self.number.text.text = I18N.SetLanguageValue(count.."/"..maxSelectNum)
  255. end
  256. function UIPetExchangeMatsView:GetSkillLv(skillList)
  257. local count = 0
  258. if skillList and #skillList > 0 then
  259. for i = 1, #skillList do
  260. count = count + skillList[i].level
  261. end
  262. end
  263. return count
  264. end
  265. function UIPetExchangeMatsView:GetShowItemByIdx(idx)
  266. local item = self.mats.loopGridView:GetShownItemByItemIndex(idx)
  267. if item then
  268. local enterType = self.controller:GetenterType()
  269. local itemlua
  270. if enterType == 0 then
  271. itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "IconPetItem", item.gameObject)
  272. elseif enterType == 1 then
  273. itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "CardIconItem", item.gameObject)
  274. end
  275. return itemlua
  276. end
  277. end
  278. function UIPetExchangeMatsView:Init()
  279. local count = self.controller:GetSelectCount()
  280. self.SelectIndexList = {}
  281. self.SelectIndex = CommonUtil.TableClone(self.controller:GetSelectList())
  282. self:InitLastSelect(self.SelectIndex)
  283. self:InitGrid()
  284. self:Refresh(true)
  285. local enterType = self.controller:GetenterType()
  286. local conditions = self.controller:Getconditions()
  287. if enterType == 0 then
  288. self.number.text.text = I18N.SetLanguageValue(count.."/"..conditions[4])
  289. local title = ""
  290. if conditions[5] then
  291. if conditions[1] == 2 then
  292. title = "Mini"
  293. elseif conditions[1] == 3 then
  294. title = "Mvp"
  295. end
  296. else
  297. local CfgData = ManagerContainer.CfgMgr:GetItemById(conditions[1])
  298. title = CfgData.Name
  299. end
  300. self.tips.text.text = string.formatbykey('PetExChangeConditionTips',title,tostring(conditions[2]),tostring(conditions[3]))
  301. elseif enterType == 1 then
  302. local title = ""
  303. if conditions[5] then
  304. if conditions[6] == 2 then
  305. title = "Mini"
  306. elseif conditions[6] == 3 then
  307. title = "Mvp"
  308. end
  309. self.tips.text.text = string.formatbykey('CardExChangeConditionTips',title,tostring(conditions[2] or ""))
  310. else
  311. local CfgData = ManagerContainer.CfgMgr:GetItemById(conditions[2])
  312. title = CfgData.Name
  313. self.tips.text.text = string.formatbykey('CardExChangeConditionTips1',title,tostring(conditions[4]))
  314. end
  315. self.number.text.text = I18N.SetLanguageValue(count.."/"..conditions[4])
  316. end
  317. self.mats.loopGridView.ScrollRect.enabled = false
  318. end
  319. function UIPetExchangeMatsView:InitLastSelect(list)
  320. if list then
  321. for k, v in pairs(list) do
  322. local index = self:GetSelectPetIndexByUid(k)
  323. if index ~= 0 then
  324. self.SelectIndexList[index - 1] = v
  325. self.SelectIndex[k] = v
  326. end
  327. end
  328. end
  329. end
  330. function UIPetExchangeMatsView:OnPageInEnd()
  331. self.super.OnPageInEnd(self)
  332. self.mats.loopGridView.ScrollRect.enabled = true
  333. end
  334. function UIPetExchangeMatsView:GetSelectPetIndexByUid(id)
  335. local showDatas = self.controller:GetShowDatas()
  336. local enterType = self.controller:GetenterType()
  337. if showDatas and #showDatas > 0 then
  338. for i = 1, #showDatas do
  339. if enterType == 0 then
  340. if showDatas[i].id == id then
  341. return i
  342. end
  343. elseif enterType == 1 then
  344. if showDatas[i].cfgId == id then
  345. return i
  346. end
  347. end
  348. end
  349. end
  350. return 0
  351. end
  352. function UIPetExchangeMatsView:RemoveEventListener()
  353. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  354. end
  355. function UIPetExchangeMatsView:AddUIEventListener()
  356. self.uiBase:AddButtonEventListener(self.AnyBtn.button, self, self.OnCloseClick)
  357. self.uiBase:AddButtonEventListener(self.btnCancel.button, self, self.OnCancelClick)
  358. self.uiBase:AddButtonEventListener(self.btnSure.button, self, self.OnSureClick)
  359. end
  360. function UIPetExchangeMatsView:OnCloseClick()
  361. self:UIClose()
  362. end
  363. function UIPetExchangeMatsView:OnCancelClick()
  364. self:OnCloseClick()
  365. end
  366. function UIPetExchangeMatsView:OnSureClick()
  367. local list = self.controller:GetSelectList()
  368. for key, value in pairs(list) do
  369. list[key] = nil
  370. end
  371. if self.SelectIndex then
  372. for key, value in pairs(self.SelectIndex) do
  373. list[key] = value
  374. end
  375. end
  376. self.SelectIndex = nil
  377. self.controller:executeCallBack()
  378. self:OnCloseClick()
  379. end
  380. function UIPetExchangeMatsView:OnHide()
  381. end
  382. function UIPetExchangeMatsView:OnShow(data)
  383. self.controller:SetData(data)
  384. end
  385. function UIPetExchangeMatsView:OnClose()
  386. end
  387. function UIPetExchangeMatsView:OnDispose()
  388. self.mats.loopGridView:Dispose()
  389. self.controller:OnDispose()
  390. end
  391. return UIPetExchangeMatsView