源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 line
1.7 KiB

  1. BarrageView = BarrageView or BaseClass(BaseView)
  2. function BarrageView:__init()
  3. self.base_file = "common"
  4. self.layout_file = "BarrageView"
  5. self.layer_name = "Main"
  6. self.destroy_imm = false
  7. self.change_scene_close = true
  8. self.playing_list = {}
  9. self.item_pool = Array.New()
  10. self.data_list = Array.New()
  11. self.open_callback = function()
  12. self:ResetView()
  13. end
  14. self.load_callback = function()
  15. self:LoadSuccess()
  16. end
  17. self.destroy_callback = function ()
  18. self:Remove()
  19. end
  20. end
  21. function BarrageView:Remove()
  22. self.item_pool = {}
  23. end
  24. function BarrageView:ResetView()
  25. self.data_list = Array.New()
  26. for k,v in ipairs(self.playing_list) do
  27. self:RecycleItem(k)
  28. end
  29. self.playing_list = {}
  30. end
  31. function BarrageView:LoadSuccess()
  32. self.transform:SetAsFirstSibling()
  33. -- self.transform.sizeDelta = Vector2(ScreenWidth,ScreenHeight)
  34. self.origin_label = self:GetChild("BarrageItem").gameObject
  35. local fire_num = 0
  36. for i=1,self.data_list:GetSize() do
  37. self:AppendNewItem()
  38. end
  39. end
  40. function BarrageView:AppendNewItem(data)
  41. data = data or self.data_list:PopFront()
  42. if not data then
  43. self:Close()
  44. return
  45. end
  46. if not self.is_loaded or TableSize(self.playing_list) >= BarrageManager:getInstance().max_count_limit then
  47. self.data_list:PushBack(data)
  48. else
  49. local item
  50. if #self.item_pool == 0 then
  51. local function callback(item)
  52. self:RecycleItem(item)
  53. end
  54. item = BarrageItem.New(self.transform, self.origin_label, callback)
  55. else
  56. item = self.item_pool:PopFront()
  57. end
  58. item.gameObject:SetActive(true)
  59. item:SetData(data)
  60. item:Fire()
  61. self.playing_list[item] = true
  62. end
  63. end
  64. function BarrageView:RecycleItem(item)
  65. item:StopRunning()
  66. item.gameObject:SetActive(false)
  67. self.item_pool:PushBack(item)
  68. self.playing_list[item] = nil
  69. end