BattleObjectPool.lua 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. BattleObjectPool = {}
  2. function BattleObjectPool.New(onCreate)
  3. local o = {}
  4. setmetatable(o, BattleObjectPool)
  5. BattleObjectPool.__index = BattleObjectPool
  6. o.buffer = {}
  7. o.size = 0
  8. o.onCreate = onCreate
  9. return o
  10. end
  11. function BattleObjectPool:Get(...)
  12. local e = self.buffer[self.size]
  13. if not e then
  14. return self.onCreate(...)
  15. end
  16. self.size = self.size - 1
  17. return e
  18. end
  19. function BattleObjectPool:Put(item)
  20. self.size = self.size + 1
  21. self.buffer[self.size] = item
  22. end
  23. function BattleObjectPool:Foreach(func)
  24. if self.size<=0 then return end
  25. for i=1,self.size do
  26. if func then
  27. func(self.buffer[i])
  28. end
  29. end
  30. end
  31. function BattleObjectPool:Find(obj,ICompare)
  32. if self.size<=0 then return end
  33. for i=1,self.size do
  34. if ICompare ~=nil then
  35. if ICompare(obj,self.buffer[i]) then
  36. return self.buffer[i]
  37. end
  38. end
  39. end
  40. --LogError("f role:"..obj.roleId)
  41. return nil
  42. end
  43. function BattleObjectPool:Count()
  44. return self.size
  45. end
  46. --浅克隆
  47. function BattleObjectPool:Clone()
  48. local _battlePool =BattleObjectPool.New(self.onCreate)
  49. if self.size<=0 then return _battlePool end
  50. for i , v in pairs(self.buffer) do
  51. _battlePool:Put(self.buffer[i]) -- table
  52. end
  53. return _battlePool
  54. end
  55. --浅克隆
  56. function BattleObjectPool:CloneType(str)
  57. local _battlePool =BattleObjectPool.New(self.onCreate)
  58. if self.size<=0 then return _battlePool end
  59. if str == "RoleLogic" then
  60. for i , v in pairs(self.buffer) do
  61. local _role = self.buffer[i]
  62. --LogError(type(_role))
  63. _battlePool:Put(_role:Clone()) -- table
  64. end
  65. else
  66. for i , v in pairs(self.buffer) do
  67. --LogError(type(self.buffer[i]))
  68. _battlePool:Put(self.buffer[i]) -- table
  69. end
  70. end
  71. return _battlePool
  72. end