源战役客户端
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

181 satır
5.8 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 经验副本路线排行界面
  4. -- *>
  5. ExpDunWaveRankView = ExpDunWaveRankView or BaseClass(BaseView)
  6. local ExpDunWaveRankView = ExpDunWaveRankView
  7. function ExpDunWaveRankView:__init()
  8. self.base_file = "expDun"
  9. self.layout_file = "ExpDunWaveRankView"
  10. self.layer_name = "Activity"
  11. self.destroy_imm = true
  12. self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
  13. self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
  14. self.model = ExpDunModel:getInstance()
  15. self.dun_model = BaseDungeonModel:getInstance()
  16. self.my_rank_item = nil
  17. -- 排行请求相关
  18. self.wave_rank_data = {} -- 社团列表
  19. self.sroll_end_req_evt = false -- 滑动到底时请求协议
  20. self.cur_page = 1 -- 当前加载了多少页的社团数据
  21. self.total_page = 0 -- 总页数
  22. self.page_size = 15 --向服务器发送一页的个数
  23. self.is_set_zdepth = true
  24. -- 榜首相关
  25. self.top_item_pos = {
  26. [1] = Vector2(1, 9),
  27. [2] = Vector2(-215.5, 9),
  28. [3] = Vector2(217.5, 9),
  29. }
  30. self.top_item = {}
  31. self.top_three_head_data = {} -- 榜首头像数据
  32. self.load_callback = function()
  33. self:LoadSuccess()
  34. self:AddEvent()
  35. end
  36. self.open_callback = function( )
  37. self:UpdateView()
  38. end
  39. self.destroy_callback = function ( )
  40. self:DestroySuccess()
  41. end
  42. end
  43. function ExpDunWaveRankView:Open( )
  44. BaseView.Open(self)
  45. end
  46. function ExpDunWaveRankView:LoadSuccess()
  47. local nodes = {
  48. "content",
  49. "content/top_con",
  50. "content/rank_scroll", "content/rank_scroll/Viewport/rank_con",
  51. "content/my_rank_con",
  52. }
  53. self:GetChildren(nodes)
  54. local function close_callback()
  55. self:Close()
  56. end
  57. self.tabWindowComponent = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd, self.content, UITabWindow.SizeSmallNoTab, nil, nil, false)
  58. self.tabWindowComponent:SetTitleText("波数排行")
  59. self.tabWindowComponent:SetBackgroundRes("exp_wave_rank_bg")
  60. end
  61. function ExpDunWaveRankView:AddEvent()
  62. local function update_wave_rank_data(vo)
  63. self:UpdateRankItem(vo)
  64. end
  65. self:BindEvent(self.model, ExpDunModel.UPDATE_WAVE_RANK_DATA, update_wave_rank_data)
  66. local function update_top_three_head_data(vo)
  67. self:UpdateTopThreeItem(vo)
  68. end
  69. self:BindEvent(self.model, ExpDunModel.UPDATE_WAVE_TOPTHREE_HEAD_DATA, update_top_three_head_data)
  70. end
  71. function ExpDunWaveRankView:UpdateView()
  72. -- 第一次调用,请求第一页的排行数据
  73. self:RequestRankData()
  74. -- 请求榜首的头像数据
  75. self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61055)
  76. end
  77. -- 更新前三节点及表现
  78. function ExpDunWaveRankView:UpdateTopThreeItem(vo)
  79. -- 处理数据
  80. self.top_three_head_data = {}
  81. for k, v in pairs(vo.rank_list) do
  82. self.top_three_head_data[v.rank] = v
  83. end
  84. local data
  85. -- 固定创建3个节点
  86. for i = 1, 3 do
  87. data = self.top_three_head_data[i]
  88. self.top_item[i] = self.top_item[i] or ExpDunWaveRankTopItem.New(self.top_con)
  89. local pos = self.top_item_pos[i]
  90. self.top_item[i]:SetAnchoredPosition(pos.x, pos.y)
  91. self.top_item[i]:SetData(i, data)
  92. end
  93. -- 创建自己的排行数据
  94. local mainrole = RoleManager.Instance.mainRoleInfo
  95. local my_rank_data = {
  96. wave = self.model:GetCurrentWave(),
  97. rank = vo.my_rank,
  98. role_id = mainrole.role_id,
  99. role_name = mainrole.name,
  100. lv = mainrole.level,
  101. svip = mainrole.sup_vip_type,
  102. vip = mainrole.vip_flag,
  103. sex = mainrole.sex,
  104. guild_name = mainrole.guild_name
  105. }
  106. self.my_rank_item = self.my_rank_item or ExpDunWaveRankItem.New(self.my_rank_con)
  107. self.my_rank_item:SetAnchoredPosition(0, 0)
  108. self.my_rank_item:SetData(my_rank_data)
  109. end
  110. -- 更新滚动容器节点
  111. function ExpDunWaveRankView:UpdateRankItem(vo)
  112. self.total_page = vo.page_total
  113. self.cur_page = vo.page_no
  114. if vo and #vo.rank_list > 0 then
  115. for k, data in pairs(vo.rank_list) do
  116. self.wave_rank_data[#self.wave_rank_data+1] = data
  117. end
  118. self.sroll_end_req_evt = false
  119. end
  120. -- 排序数据
  121. local sort_func = function ( a, b )
  122. return a.rank < b.rank
  123. end
  124. table.sort(self.wave_rank_data, sort_func)
  125. self.rank_item_creator = self.rank_item_creator or self:AddUIComponent(UI.ItemListCreator)
  126. local info = {
  127. data_list = self.wave_rank_data,
  128. scroll_view = self.rank_scroll,
  129. item_con = self.rank_con,
  130. item_class = ExpDunWaveRankItem,
  131. item_height = 49,
  132. create_frequency = 0.01,
  133. alignment = UnityEngine.TextAnchor.UpperLeft,
  134. reuse_item_num = 7,
  135. on_update_item = function(item, i, v)
  136. if i == #self.wave_rank_data - 1 and not self.sroll_end_req_evt and self.cur_page < self.total_page then
  137. -- 调整标志量,请求协议
  138. self.sroll_end_req_evt = true
  139. self.cur_page = self.cur_page + 1
  140. self:RequestRankData()
  141. end
  142. item:SetData(v)
  143. end,
  144. }
  145. self.rank_item_creator:UpdateItems(info)
  146. end
  147. -- 请求排行数据
  148. function ExpDunWaveRankView:RequestRankData( )
  149. self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61054, self.page_size, self.cur_page)
  150. end
  151. function ExpDunWaveRankView:DestroySuccess()
  152. if self.tabWindowComponent then
  153. self.tabWindowComponent:DeleteMe()
  154. self.tabWindowComponent = nil
  155. end
  156. if self.my_rank_item ~= nil then
  157. self.my_rank_item:DeleteMe()
  158. self.my_rank_item = nil
  159. end
  160. for k, v in pairs(self.top_item) do
  161. v:DeleteMe()
  162. v = nil
  163. end
  164. self.top_item = {}
  165. end