|
|
-
- SceneDropManager = SceneDropManager or BaseClass()
- local SceneDropManager = SceneDropManager
-
-
- local resMgr = resMgr
- local Array_New = Array.New
-
- function SceneDropManager:__init()
- SceneDropManager.Instance = self
- --assetbundle包资源引用列表
- self.ref_count_list = {}
- --资源对象池
- self.obj_pool_list = {}
-
- --对象池总ab包对象数量
- self.obj_pool_ab_count = 0
-
- self.is_load_effect = false
- end
-
- function SceneDropManager:getInstance()
- if SceneDropManager.Instance == nil then
- SceneDropManager.Instance = SceneDropManager.New()
- end
- return SceneDropManager.Instance
- end
-
-
- function SceneDropManager:CreateDropEffectToPool()
-
- if self.is_load_effect then
- return
- end
-
- self.is_load_effect = true
-
- local effect_res_list = {
- -- "function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow","function_getobj_yellow",
- -- "function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple","function_getobj_perple",
- -- "function_getobj_red","function_getobj_red","function_getobj_red","function_getobj_red"
- }
-
-
- local load_effect_count = #effect_res_list
- local cur_effect_index = 1
-
- local function load_effect_func()
- if cur_effect_index <= load_effect_count then
- local res = effect_res_list[cur_effect_index]
- cur_effect_index = cur_effect_index + 1
- local function load_call_back(objs, is_gameObject)
- if objs and objs[0] then
- local effect_go = is_gameObject and objs[0] or newObject(objs[0])
- self:AddObjToPool(self, res, res, effect_go)
- end
- setTimeout(load_effect_func,0.1)
- end
-
- local ignore_pool = true
-
- lua_resM:loadPrefab(self, res, res, load_call_back, ignore_pool)
- end
- end
-
- load_effect_func()
- end
-
- --添加游戏对象进入缓存池 通过loadPrefab加载的资源对象
- function SceneDropManager:AddObjToPool(ref_tar, abName, resName, gameObject, alpha, is_default_color)
- if gameObject then
- --非静态缓存对象
- if abName then
- self:CreateABObjPool(abName)
- local res_list = self.obj_pool_list[abName]["res_name_list"][resName]
- if res_list == nil then
- res_list = Array_New()
- self.obj_pool_list[abName]["res_name_list"][resName] = res_list
- end
-
- if not IsNull(gameObject) then
- --放入缓存后减少引用计数
- gameObject.transform:SetParent(self.obj_pool_list[abName].container)
- res_list:PushBack(gameObject)
- end
- end
- end
- end
-
- --添加缓存对象时初始化缓存信息
- function SceneDropManager:CreateABObjPool(abName)
- if not self.obj_pool_container then
- self.obj_pool_container = UiFactory.createChild(panelMgr:GetParent("SceneObjContainer"), UIType.EmptyObject, "obj_drop_pool_container").transform
- self.obj_pool_container.gameObject:SetActive(false)
- end
-
-
- if self.obj_pool_list[abName] == nil then
- self.obj_pool_ab_count = self.obj_pool_ab_count + 1
- self.obj_pool_list[abName] = {res_name_list = {}, container = UiFactory.createChild(self.obj_pool_container, UIType.EmptyObject, abName .. "_container").transform}
- end
- end
-
- --从缓存池中获取游戏对象
- function SceneDropManager:GetObjFormPool(ref_tar, abName, resName)
- if self.obj_pool_list[abName] and self.obj_pool_list[abName]["res_name_list"][resName] then
- local gameObject = self.obj_pool_list[abName]["res_name_list"][resName]:PopBack()
- if gameObject then
- return gameObject
- end
- end
- end
-
- --清除所有缓存池游戏对象,切换场景时调用
- function SceneDropManager:ClearAllObjPool()
- if not self.obj_pool_container then
- return
- end
-
- destroy(self.obj_pool_container.gameObject, true)
- self.obj_pool_container = nil
-
- self.obj_pool_list = {}
- self.obj_pool_ab_count = 0
- self.is_load_effect = false
- end
|