GoPoolMgr.lua 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. local GoPoolMgr = class("GoPoolMgr")
  2. local loadCbList = {}
  3. local loadingPrefabList = {}
  4. function GoPoolMgr:ctor()
  5. self.goPool = {}
  6. end
  7. --创建道具go
  8. function GoPoolMgr:SpawnItemGo(itemType, cb)
  9. local prefabName = CommonUtil.GetResTypePrefabName(itemType)
  10. if prefabName == nil then
  11. return
  12. end
  13. self:SpawnGo(prefabName, cb)
  14. end
  15. function GoPoolMgr:SpawnPrefabGo(prefabName, cb)
  16. if Enum.PrefabNames[prefabName] == nil then
  17. return
  18. end
  19. self:SpawnGo(prefabName, cb)
  20. end
  21. --创建grid go
  22. function GoPoolMgr:SpawnGo(prefabName, cb)
  23. if self.goPool[prefabName] == nil then
  24. self.goPool[prefabName] = {}
  25. end
  26. local pool = self.goPool[prefabName]
  27. if #pool == 0 then
  28. if loadCbList[prefabName] == nil then
  29. loadCbList[prefabName] = {}
  30. end
  31. local list = loadCbList[prefabName]
  32. list[#list + 1] = cb
  33. if loadingPrefabList[prefabName] == nil then
  34. loadingPrefabList[prefabName] = function(go)
  35. if loadCbList[prefabName] and #loadCbList[prefabName] > 0 then
  36. for _, v in pairs(loadCbList[prefabName]) do
  37. local gridItemView = go:GetComponent(Enum.TypeInfo.UIGridViewMark)
  38. if gridItemView.GridItemName ~= "" then
  39. local itemlua = require("GridViewItem/"..gridItemView.GridItemName.."_Generate"):new()
  40. --itemlua.gameObject = UnityEngine.GameObject.Instantiate(go)
  41. local goName = gridItemView.OriName ~= "" and gridItemView.OriName or gridItemView.GridItemName
  42. itemlua.gameObject = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIItemDir, goName)
  43. itemlua.prefabName = gridItemView.GridItemName
  44. itemlua.oriName = goName
  45. itemlua:InitGenerate(itemlua.gameObject.transform)
  46. itemlua.gameObject:SetActive(true)
  47. v(itemlua)
  48. --v = nil
  49. end
  50. end
  51. loadingPrefabList[prefabName] = nil
  52. loadCbList[prefabName] = {}
  53. end
  54. end
  55. self:LoadGameObjectPrefab(prefabName, loadingPrefabList[prefabName])
  56. end
  57. else
  58. local itemlua = table.remove(pool, 1)
  59. --if prefabName == "EquipItem" then
  60. -- LogError("pop "..prefabName.." "..#pool)
  61. --end
  62. itemlua.gameObject:SetActive(true)
  63. cb(itemlua)
  64. end
  65. end
  66. function GoPoolMgr:SpawnGoNewLua(itemlua, cb)
  67. if itemlua == nil then return end
  68. if self.goPool[itemlua.prefabName] == nil then
  69. self.goPool[itemlua.prefabName] = {}
  70. end
  71. local pool = self.goPool[itemlua.prefabName]
  72. if #pool == 0 then
  73. --itemlua1.gameObject = UnityEngine.GameObject.Instantiate(itemlua.gameObject)
  74. ManagerContainer.ResMgr:GetGOFromPool(Constants.UIItemDir, itemlua.prefabName, function (go)
  75. local itemlua1 = require("GridViewItem/"..itemlua.prefabName.."_Generate"):new()
  76. itemlua1.gameObject = go
  77. itemlua1.prefabName = itemlua.prefabName
  78. itemlua1:InitGenerate(itemlua1.gameObject.transform)
  79. itemlua1.gameObject:SetActive(true)
  80. cb(itemlua1)
  81. end)
  82. else
  83. local itemlua = table.remove(pool, 1)
  84. --if prefabName == "EquipItem" then
  85. -- LogError("pop "..prefabName.." "..#pool)
  86. --end
  87. itemlua.gameObject:SetActive(true)
  88. cb(itemlua)
  89. end
  90. end
  91. function GoPoolMgr:SpawnGoNewLuaTotalPath(prefabPath, itemlua, cb)
  92. if itemlua == nil then return end
  93. if self.goPool[itemlua.prefabName] == nil then
  94. self.goPool[itemlua.prefabName] = {}
  95. end
  96. local pool = self.goPool[itemlua.prefabName]
  97. if #pool == 0 then
  98. --itemlua1.gameObject = UnityEngine.GameObject.Instantiate(itemlua.gameObject)
  99. ManagerContainer.ResMgr:GetGOFromPool(prefabPath, itemlua.prefabName, function (go)
  100. local itemlua1 = require("GridViewItem/"..itemlua.prefabName.."_Generate"):new()
  101. itemlua1.gameObject = go
  102. itemlua1.prefabName = itemlua.prefabName
  103. itemlua1:InitGenerate(itemlua1.gameObject.transform)
  104. itemlua1.gameObject:SetActive(true)
  105. cb(itemlua1)
  106. end)
  107. else
  108. local itemlua = table.remove(pool, 1)
  109. --if prefabName == "EquipItem" then
  110. -- LogError("pop "..prefabName.." "..#pool)
  111. --end
  112. itemlua.gameObject:SetActive(true)
  113. cb(itemlua)
  114. end
  115. end
  116. function GoPoolMgr:LoadGameObjectPrefab(prefabName, cb)
  117. ManagerContainer.ResMgr:LuaLoadAssets(Enum.ResourceType.SingleGameObject, Constants.UIItemDir, {prefabName}, nil, cb)
  118. end
  119. function GoPoolMgr:RecycleGo(itemlua)
  120. if not itemlua then
  121. return false
  122. end
  123. if tolua.isnull(itemlua.gameObject) then
  124. itemlua:GenerateDestroy()
  125. itemlua.gameObject = nil
  126. itemlua.transform = nil
  127. itemlua.uiParticle = nil
  128. return true
  129. end
  130. local prefabName = itemlua.oriName ~= "" and itemlua.oriName or itemlua.prefabName
  131. local pool = self.goPool[prefabName]
  132. if pool == nil then
  133. return false
  134. end
  135. if not itemlua.inited then
  136. return false
  137. end
  138. if CommonUtil.EleInTable(itemlua, pool) then
  139. return false
  140. end
  141. pool[#pool + 1] = itemlua
  142. if itemlua.AsyncSeqIds then
  143. for k,v in pairs(itemlua.AsyncSeqIds) do
  144. ManagerContainer.ResMgr:UnloadAssetBySeqId(v)
  145. itemlua.AsyncSeqIds[k] = nil
  146. end
  147. end
  148. itemlua.uiParticle = nil
  149. itemlua.gameObject:SetActive(false)
  150. itemlua.transform:SetParent(ManagerContainer.ResMgr.PoolNode)
  151. return true
  152. end
  153. function GoPoolMgr:Dispose()
  154. for k, v in pairs(self.goPool) do
  155. for _,v1 in pairs(v) do
  156. DG.Tweening.DOTween.Kill(v1.transform)
  157. --CommonUtil.DestroyGO(v1.gameObject)
  158. --ManagerContainer.ResMgr:GetGOFromPool(Constants.UIItemDir, v1.prefabName, v1.gameObject)
  159. v1:GenerateDestroy()
  160. v1.uiParticle = nil
  161. v1.gameObject = nil
  162. v1.transform = nil
  163. v1 = nil
  164. end
  165. v = nil
  166. self.goPool[k] = nil
  167. end
  168. self.goPool = {}
  169. loadCbList = {}
  170. loadingPrefabList = {}
  171. end
  172. function GoPoolMgr:Destroy()
  173. self:Dispose()
  174. self.goPool = nil
  175. loadingPrefabList = nil
  176. loadCbList = nil
  177. if tolua.getpeer(self) ~= nil then
  178. tolua.setpeer(self, nil)
  179. end
  180. end
  181. return GoPoolMgr