源战役客户端
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

126 wiersze
3.7 KiB

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