generated from root/miduo_server
82 lines
1.9 KiB
Lua
82 lines
1.9 KiB
Lua
BattleObjectPool = {}
|
|
function BattleObjectPool.New(onCreate)
|
|
local o = {}
|
|
setmetatable(o, BattleObjectPool)
|
|
BattleObjectPool.__index = BattleObjectPool
|
|
o.buffer = {}
|
|
o.size = 0
|
|
o.onCreate = onCreate
|
|
return o
|
|
end
|
|
|
|
function BattleObjectPool:Get(...)
|
|
local e = self.buffer[self.size]
|
|
if not e then
|
|
return self.onCreate(...)
|
|
end
|
|
self.size = self.size - 1
|
|
return e
|
|
end
|
|
|
|
function BattleObjectPool:Put(item)
|
|
self.size = self.size + 1
|
|
self.buffer[self.size] = item
|
|
end
|
|
|
|
function BattleObjectPool:Foreach(func)
|
|
if self.size<=0 then return end
|
|
for i=1,self.size do
|
|
if func then
|
|
func(self.buffer[i])
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
function BattleObjectPool:Find(obj,ICompare)
|
|
if self.size<=0 then return end
|
|
for i=1,self.size do
|
|
if ICompare ~=nil then
|
|
if ICompare(obj,self.buffer[i]) then
|
|
return self.buffer[i]
|
|
end
|
|
end
|
|
end
|
|
--LogError("f role:"..obj.roleId)
|
|
return nil
|
|
end
|
|
|
|
function BattleObjectPool:Count()
|
|
return self.size
|
|
end
|
|
|
|
--浅克隆
|
|
function BattleObjectPool:Clone()
|
|
local _battlePool =BattleObjectPool.New(self.onCreate)
|
|
if self.size<=0 then return _battlePool end
|
|
for i , v in pairs(self.buffer) do
|
|
_battlePool:Put(self.buffer[i]) -- table
|
|
end
|
|
return _battlePool
|
|
end
|
|
|
|
--浅克隆
|
|
function BattleObjectPool:CloneType(str)
|
|
local _battlePool =BattleObjectPool.New(self.onCreate)
|
|
if self.size<=0 then return _battlePool end
|
|
if str == "RoleLogic" then
|
|
for i , v in pairs(self.buffer) do
|
|
local _role = self.buffer[i]
|
|
--LogError(type(_role))
|
|
_battlePool:Put(_role:Clone()) -- table
|
|
end
|
|
else
|
|
for i , v in pairs(self.buffer) do
|
|
--LogError(type(self.buffer[i]))
|
|
_battlePool:Put(self.buffer[i]) -- table
|
|
end
|
|
end
|
|
return _battlePool
|
|
end
|
|
|