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