PetMatsGridView.lua 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. local PetMatsGridView = class("PetMatsGridView")
  2. local PetMatsGridCtr = require("UIPet/PetMatsGridCtr")
  3. local RectOffset = UnityEngine.RectOffset
  4. function PetMatsGridView:ctor()
  5. self.enterType = nil
  6. self.root = nil
  7. self.loopView = nil
  8. self.startCB = nil
  9. self.itemName = nil
  10. self.controller = PetMatsGridCtr:new()
  11. end
  12. function PetMatsGridView:Init(enterType, root, loopView)
  13. self.enterType = enterType
  14. self.root = root
  15. self.loopView = loopView
  16. self.controller:InitRoot(self.root.controller, self.enterType)
  17. self:SetItemName()
  18. self:AddEventListener()
  19. self:InitGrid()
  20. end
  21. function PetMatsGridView:SetItemName()
  22. self.itemName = "IconPetItem"
  23. if self.enterType == Enum.ItemIEnterType.Pet then
  24. self.itemName = "IconPetItem"
  25. elseif self.enterType == Enum.ItemIEnterType.SkillEquip then
  26. self.itemName = "IconItem"
  27. end
  28. end
  29. function PetMatsGridView:AddEventListener()
  30. end
  31. function PetMatsGridView:InitGrid()
  32. self.loopView:InitGridView(0, function(gridView, itemIndex, row, column)
  33. return self:GetItemByRowColumn(gridView, itemIndex, row, column)
  34. end, nil)
  35. self:InitData()
  36. --self.delayTimer = FrameTimer.New(function()
  37. -- self:InitData()
  38. --end, 1)
  39. --self.delayTimer:Start()
  40. end
  41. function PetMatsGridView:InitData()
  42. local loopGridView = self.loopView
  43. loopGridView.ItemPadding = self.enterType == Enum.ItemIEnterType.PetRelation and Vector2(20, 80) or Vector2(20, 20)
  44. local itemSize = loopGridView.ItemSize
  45. local itemPadding = loopGridView.ItemPadding
  46. local padding = loopGridView.Padding
  47. local itemSizeWithPadding = itemPadding + itemSize
  48. local width = loopGridView.ViewPortWidth - padding.left - padding.right + itemPadding.x
  49. local height = loopGridView.ViewPortHeight - padding.top
  50. local row = Mathf.Floor(width / (itemSizeWithPadding.x))
  51. local column = Mathf.Ceil(height / (itemSizeWithPadding.y))
  52. local realWidth = row * itemSizeWithPadding.x
  53. local offset = width - realWidth
  54. if offset > 0 then
  55. offset = offset * 0.5
  56. local newPadding = RectOffset(offset + padding.left, offset + padding.right, padding.top, padding.bottom)
  57. loopGridView:SetPadding(newPadding)
  58. end
  59. loopGridView:SetGridFixedGroupCount(SuperScrollView.GridFixedType.ColumnCountFixed, row)
  60. self.defaultRectOffset = padding
  61. self.isInit = true
  62. self.controller:SetGridRowColumn(row, column)
  63. --if self.startCB then
  64. -- self.startCB(self.root)
  65. --end
  66. end
  67. function PetMatsGridView:Refresh(resetPos)
  68. self.controller:RefreshShowDataType()
  69. local loopGridView = self.loopView
  70. local realLength = self.controller:GetRealShowDataLength()
  71. if self.root.noPets then
  72. self.root.noPets:SetActive(realLength == 0)
  73. end
  74. loopGridView.gameObject:SetActive(true)
  75. local length = self.controller:GetShowDataLength()
  76. if resetPos then
  77. loopGridView:RefreshListByIndex(length, 0)
  78. else
  79. loopGridView:RefreshListByIndex(length)
  80. end
  81. end
  82. function PetMatsGridView:MoveToIndex(idx)
  83. self.loopView:MovePanelToItemByIndex(idx)
  84. end
  85. function PetMatsGridView:GetShowDataLength()
  86. return self.controller:GetShowDataLength()
  87. end
  88. function PetMatsGridView:GetItemByRowColumn(gridView, itemIndex, row, column)
  89. local length = self.controller:GetShowDataLength()
  90. if (itemIndex < 0 or itemIndex >= length) then
  91. return nil
  92. end
  93. local showData = self.controller:GetShowData(itemIndex)
  94. local item = nil
  95. if showData then
  96. item = gridView:NewListViewItem(self.itemName)
  97. item.gameObject.name = itemIndex
  98. local itemlua = CommonUtil.BindGridViewItem2Lua(self.root, self.itemName, item.gameObject)
  99. CommonUtil.UpdateItemPrefab(self.root, itemlua, showData, self.enterType, self.root, self.root.OnItemClick, itemIndex)
  100. else
  101. item = gridView:NewListViewItem('IconEmptyItem')
  102. end
  103. return item
  104. end
  105. function PetMatsGridView:GetShowItemByIdx(idx)
  106. local item = self.loopView:GetShownItemByItemIndex(idx - 1)
  107. if item then
  108. local itemlua = CommonUtil.GetBindGridViewItem2Lua(self.root, self.itemName, item.gameObject)
  109. return itemlua
  110. end
  111. end
  112. function PetMatsGridView:OnHide()
  113. --if self.delayTimer then
  114. -- self.delayTimer:Stop()
  115. --end
  116. --self.delayTimer = nil
  117. --local loopGridView = self.loopView
  118. --if loopGridView and self.defaultRectOffset then
  119. -- loopGridView:SetPadding(self.defaultRectOffset)
  120. --end
  121. --self.defaultRectOffset = nil
  122. end
  123. function PetMatsGridView:OnDispose()
  124. self:OnHide()
  125. self.loopView:Dispose()
  126. self.controller:Dispose()
  127. self.controller = nil
  128. self.enterType = nil
  129. self.root = nil
  130. self.loopView = nil
  131. --self.startCB = nil
  132. end
  133. return PetMatsGridView