源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

126 行
3.7 KiB

  1. SceneDropManager = SceneDropManager or BaseClass()
  2. local SceneDropManager = SceneDropManager
  3. local resMgr = resMgr
  4. local Array_New = Array.New
  5. function SceneDropManager:__init()
  6. SceneDropManager.Instance = self
  7. --assetbundle包资源引用列表
  8. self.ref_count_list = {}
  9. --资源对象池
  10. self.obj_pool_list = {}
  11. --对象池总ab包对象数量
  12. self.obj_pool_ab_count = 0
  13. self.is_load_effect = false
  14. end
  15. function SceneDropManager:getInstance()
  16. if SceneDropManager.Instance == nil then
  17. SceneDropManager.Instance = SceneDropManager.New()
  18. end
  19. return SceneDropManager.Instance
  20. end
  21. function SceneDropManager:CreateDropEffectToPool()
  22. if self.is_load_effect then
  23. return
  24. end
  25. self.is_load_effect = true
  26. local effect_res_list = {
  27. -- "function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow",
  28. -- "function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple",
  29. -- "function_getobj_red","function_getobj_red","function_getobj_red","function_getobj_red"
  30. }
  31. local load_effect_count = #effect_res_list
  32. local cur_effect_index = 1
  33. local function load_effect_func()
  34. if cur_effect_index <= load_effect_count then
  35. local res = effect_res_list[cur_effect_index]
  36. cur_effect_index = cur_effect_index + 1
  37. local function load_call_back(objs, is_gameObject)
  38. if objs and objs[0] then
  39. local effect_go = is_gameObject and objs[0] or newObject(objs[0])
  40. self:AddObjToPool(self, res, res, effect_go)
  41. end
  42. setTimeout(load_effect_func,0.1)
  43. end
  44. local ignore_pool = true
  45. lua_resM:loadPrefab(self, res, res, load_call_back, ignore_pool)
  46. end
  47. end
  48. load_effect_func()
  49. end
  50. --添加游戏对象进入缓存池 通过loadPrefab加载的资源对象
  51. function SceneDropManager:AddObjToPool(ref_tar, abName, resName, gameObject, alpha, is_default_color)
  52. if gameObject then
  53. --非静态缓存对象
  54. if abName then
  55. self:CreateABObjPool(abName)
  56. local res_list = self.obj_pool_list[abName]["res_name_list"][resName]
  57. if res_list == nil then
  58. res_list = Array_New()
  59. self.obj_pool_list[abName]["res_name_list"][resName] = res_list
  60. end
  61. if not IsNull(gameObject) then
  62. --放入缓存后减少引用计数
  63. gameObject.transform:SetParent(self.obj_pool_list[abName].container)
  64. res_list:PushBack(gameObject)
  65. end
  66. end
  67. end
  68. end
  69. --添加缓存对象时初始化缓存信息
  70. function SceneDropManager:CreateABObjPool(abName)
  71. if not self.obj_pool_container then
  72. self.obj_pool_container = UiFactory.createChild(panelMgr:GetParent("SceneObjContainer"), UIType.EmptyObject, "obj_drop_pool_container").transform
  73. self.obj_pool_container.gameObject:SetActive(false)
  74. end
  75. if self.obj_pool_list[abName] == nil then
  76. self.obj_pool_ab_count = self.obj_pool_ab_count + 1
  77. self.obj_pool_list[abName] = {res_name_list = {}, container = UiFactory.createChild(self.obj_pool_container, UIType.EmptyObject, abName .. "_container").transform}
  78. end
  79. end
  80. --从缓存池中获取游戏对象
  81. function SceneDropManager:GetObjFormPool(ref_tar, abName, resName)
  82. if self.obj_pool_list[abName] and self.obj_pool_list[abName]["res_name_list"][resName] then
  83. local gameObject = self.obj_pool_list[abName]["res_name_list"][resName]:PopBack()
  84. if gameObject then
  85. return gameObject
  86. end
  87. end
  88. end
  89. --清除所有缓存池游戏对象,切换场景时调用
  90. function SceneDropManager:ClearAllObjPool()
  91. if not self.obj_pool_container then
  92. return
  93. end
  94. destroy(self.obj_pool_container.gameObject, true)
  95. self.obj_pool_container = nil
  96. self.obj_pool_list = {}
  97. self.obj_pool_ab_count = 0
  98. self.is_load_effect = false
  99. end