-- <* -- @Author: Saber -- @Description: 经验副本路线排行界面 -- *> ExpDunWaveRankView = ExpDunWaveRankView or BaseClass(BaseView) local ExpDunWaveRankView = ExpDunWaveRankView function ExpDunWaveRankView:__init() self.base_file = "expDun" self.layout_file = "ExpDunWaveRankView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.change_scene_close = true --是否切换场景时关闭(弹出界面使用) self.model = ExpDunModel:getInstance() self.dun_model = BaseDungeonModel:getInstance() self.my_rank_item = nil -- 排行请求相关 self.wave_rank_data = {} -- 社团列表 self.sroll_end_req_evt = false -- 滑动到底时请求协议 self.cur_page = 1 -- 当前加载了多少页的社团数据 self.total_page = 0 -- 总页数 self.page_size = 15 --向服务器发送一页的个数 self.is_set_zdepth = true -- 榜首相关 self.top_item_pos = { [1] = Vector2(1, 9), [2] = Vector2(-215.5, 9), [3] = Vector2(217.5, 9), } self.top_item = {} self.top_three_head_data = {} -- 榜首头像数据 self.load_callback = function() self:LoadSuccess() self:AddEvent() end self.open_callback = function( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end function ExpDunWaveRankView:Open( ) BaseView.Open(self) end function ExpDunWaveRankView:LoadSuccess() local nodes = { "content", "content/top_con", "content/rank_scroll", "content/rank_scroll/Viewport/rank_con", "content/my_rank_con", } self:GetChildren(nodes) local function close_callback() self:Close() end self.tabWindowComponent = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd, self.content, UITabWindow.SizeSmallNoTab, nil, nil, false) self.tabWindowComponent:SetTitleText("波数排行") self.tabWindowComponent:SetBackgroundRes("exp_wave_rank_bg") end function ExpDunWaveRankView:AddEvent() local function update_wave_rank_data(vo) self:UpdateRankItem(vo) end self:BindEvent(self.model, ExpDunModel.UPDATE_WAVE_RANK_DATA, update_wave_rank_data) local function update_top_three_head_data(vo) self:UpdateTopThreeItem(vo) end self:BindEvent(self.model, ExpDunModel.UPDATE_WAVE_TOPTHREE_HEAD_DATA, update_top_three_head_data) end function ExpDunWaveRankView:UpdateView() -- 第一次调用,请求第一页的排行数据 self:RequestRankData() -- 请求榜首的头像数据 self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61055) end -- 更新前三节点及表现 function ExpDunWaveRankView:UpdateTopThreeItem(vo) -- 处理数据 self.top_three_head_data = {} for k, v in pairs(vo.rank_list) do self.top_three_head_data[v.rank] = v end local data -- 固定创建3个节点 for i = 1, 3 do data = self.top_three_head_data[i] self.top_item[i] = self.top_item[i] or ExpDunWaveRankTopItem.New(self.top_con) local pos = self.top_item_pos[i] self.top_item[i]:SetAnchoredPosition(pos.x, pos.y) self.top_item[i]:SetData(i, data) end -- 创建自己的排行数据 local mainrole = RoleManager.Instance.mainRoleInfo local my_rank_data = { wave = self.model:GetCurrentWave(), rank = vo.my_rank, role_id = mainrole.role_id, role_name = mainrole.name, lv = mainrole.level, svip = mainrole.sup_vip_type, vip = mainrole.vip_flag, sex = mainrole.sex, guild_name = mainrole.guild_name } self.my_rank_item = self.my_rank_item or ExpDunWaveRankItem.New(self.my_rank_con) self.my_rank_item:SetAnchoredPosition(0, 0) self.my_rank_item:SetData(my_rank_data) end -- 更新滚动容器节点 function ExpDunWaveRankView:UpdateRankItem(vo) self.total_page = vo.page_total self.cur_page = vo.page_no if vo and #vo.rank_list > 0 then for k, data in pairs(vo.rank_list) do self.wave_rank_data[#self.wave_rank_data+1] = data end self.sroll_end_req_evt = false end -- 排序数据 local sort_func = function ( a, b ) return a.rank < b.rank end table.sort(self.wave_rank_data, sort_func) self.rank_item_creator = self.rank_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = self.wave_rank_data, scroll_view = self.rank_scroll, item_con = self.rank_con, item_class = ExpDunWaveRankItem, item_height = 49, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, reuse_item_num = 7, on_update_item = function(item, i, v) if i == #self.wave_rank_data - 1 and not self.sroll_end_req_evt and self.cur_page < self.total_page then -- 调整标志量,请求协议 self.sroll_end_req_evt = true self.cur_page = self.cur_page + 1 self:RequestRankData() end item:SetData(v) end, } self.rank_item_creator:UpdateItems(info) end -- 请求排行数据 function ExpDunWaveRankView:RequestRankData( ) self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61054, self.page_size, self.cur_page) end function ExpDunWaveRankView:DestroySuccess() if self.tabWindowComponent then self.tabWindowComponent:DeleteMe() self.tabWindowComponent = nil end if self.my_rank_item ~= nil then self.my_rank_item:DeleteMe() self.my_rank_item = nil end for k, v in pairs(self.top_item) do v:DeleteMe() v = nil end self.top_item = {} end