c1_lua/lua/app/module/battle/helper/battle_pool.lua
2023-04-21 15:52:50 +08:00

101 lines
1.8 KiB
Lua

local BattlePool = {}
function BattlePool:init()
self.effectPool = self:createEffectPool()
end
function BattlePool:getEffectPool()
return self.effectPool
end
function BattlePool:createObjPool()
local pool = {
dataPool = {},
num = 0
}
function pool:pop()
local obj = nil
if pool.num > 0 then
obj = pool.dataPool[pool.num]
pool.dataPool[pool.num] = nil
pool.num = pool.num - 1
end
return obj
end
function pool:push(obj)
pool.num = pool.num + 1
pool.dataPool[pool.num] = obj
end
return pool
end
function BattlePool:createEffectPool()
local poolObj = BaseObject:create()
poolObj:initWithGameObject(CS.UnityEngine.GameObject())
poolObj:dontDestroyOnLoad()
poolObj:setActive(false)
local pool = {
dataPool = {},
poolObj = poolObj,
poolCount = 0
}
function pool:pop(path)
local obj = nil
local p = pool.dataPool[path]
if p and #p > 0 then
obj = table.remove(p)
if #p == 0 then
pool.poolCount = pool.poolCount - 1
end
end
return obj
end
function pool:push(obj, notSetParent)
local path = obj:getAssetPath()
local p = pool.dataPool[path]
if p == nil then
p = {}
pool.dataPool[path] = p
end
if #p == 0 then
pool.poolCount = pool.poolCount + 1
end
table.insert(p, obj)
if not notSetParent then
obj:setParent(pool.poolObj, false)
end
end
function pool:getPoolCount()
return pool.poolCount
end
function pool:getRoot()
return pool.poolObj
end
function pool:clearPool(path)
local p = pool.dataPool[path]
if p then
local count = #p
for i = 1, count do
local obj = table.remove(p)
obj:destroy()
end
pool.poolCount = pool.poolCount - 1
end
end
return pool
end
function BattlePool:clear()
self.effectPool.poolObj:destroy()
self.effectPool = nil
end
return BattlePool