101 lines
1.8 KiB
Lua
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 |