|
|
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
|