|
|
- -- <*
- -- @Author: Saber
- -- @Description: 跨服社团排行玩法伤害排行界面
- -- *>
- GuildCSGRRankView = GuildCSGRRankView or BaseClass(BaseView)
- local GuildCSGRRankView = GuildCSGRRankView
-
- function GuildCSGRRankView:__init()
- self.base_file = "guildCSGR"
- self.layout_file = "GuildCSGRRankView"
- self.layer_name = "Activity"
- self.destroy_imm = true
- self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
- self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
- self.tab_list = {
- {id = 1, name = "社团排行"},
- {id = 2, name = "个人排行"},
- }
- self.sroll_end_req_evt = false -- 滑动到底时请求协议锁
- self.rank_data_cache = {} -- 排行信息缓存
- self.model = GuildModel:getInstance()
- self.main_vo = RoleManager.Instance.mainRoleInfo
- -- 获取奖励配置
- self.guild_reward_list, self.guild_normal_reward_list, self.role_reward_list = self.model:GetCSGRRankRewardCfg()
-
- self.load_callback = function ()
- self:LoadSuccess()
- self:AddEvent()
- -- 打开界面时及时请求两个排行榜的第一手数据
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 41005, 0, GuildModel.RankPageSize, 1)
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 41005, 1, GuildModel.RankPageSize, 1)
- end
- self.open_callback = function ( )
- self:UpdateView()
- end
- self.destroy_callback = function ( )
- self:DestroySuccess()
- end
- end
-
- function GuildCSGRRankView:Open( )
- --self.data = data
- BaseView.Open(self)
- end
-
- function GuildCSGRRankView:LoadSuccess()
- local nodes = {
- "item_scroll",
- "item_scroll/Viewport/item_con",
- "my_reward_con",
- }
- self:GetChildren(nodes)
-
- local function close_callback()
- self:Close()
- end
- local function select_callback(index)
- self:SwitchTab(index)
- end
- self.tabWindowComponent = UITabWindow.New(self.transform, self.tab_list, select_callback, close_callback, self.background_wnd, nil, UITabWindow.SizeSmall, nil, nil, false)
- self.tabWindowComponent:SetTitleText("伤害排行")
- self.tabWindowComponent:SetBackgroundRes("rw_score_rank_bg")
- end
-
- function GuildCSGRRankView:AddEvent()
- local function update_rank_data(vo)
- self:UpdateRankData(vo)
- end
- self:BindEvent(self.model, GuildModel.UPDATE_CSGR_DMG_RANK, update_rank_data)
- end
-
- function GuildCSGRRankView:UpdateView()
- self:SwitchTab(1)
- end
-
- function GuildCSGRRankView:UpdateRankData(vo)
- if not vo then return end
- self.rank_data_cache[vo.rank_type] = self.rank_data_cache[vo.rank_type] or {}
- self.rank_data_cache[vo.rank_type].hurt_rank = self.rank_data_cache[vo.rank_type].hurt_rank or {}
- -- 当前页码
- self.rank_data_cache[vo.rank_type].page_num = vo.page_num
-
- if vo.hurt_rank and TableSize(vo.hurt_rank) > 0 then
- for k, v in ipairs(vo.hurt_rank) do
- table.insert(self.rank_data_cache[vo.rank_type].hurt_rank, v)
- end
- self.sroll_end_req_evt = false
- end
- self:UpdateRankItems(false)
- end
-
- function GuildCSGRRankView:SwitchTab( index )
- if index == 1 then -- 社团排行
- self.cur_rank_type = 1 -- 社团排行类型
- elseif index == 2 then -- 个人排行
- self.cur_rank_type = 0 -- 个人排行类型
- end
- if self.tabWindowComponent then
- self.tabWindowComponent:SetTabBarIndex(index)
- end
- self:UpdateRankItems(true)
- end
-
- -- 创建排行节点 scroll_to_top:是否滚动到最顶部
- function GuildCSGRRankView:UpdateRankItems(scroll_to_top)
- local rank_list = self.rank_data_cache[self.cur_rank_type] and self.rank_data_cache[self.cur_rank_type].hurt_rank or {}
- local cur_page = self.rank_data_cache[self.cur_rank_type] and self.rank_data_cache[self.cur_rank_type].page_num or 1
- local total_page = self.rank_data_cache[self.cur_rank_type] and self.rank_data_cache[self.cur_rank_type].total_page or 1
- self.rank_item_creator = self.rank_item_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = rank_list,
- item_con = self.item_con,
- scroll_view = self.item_scroll,
- item_class = GuildCSGRRankItem,
- item_height = 89,
- create_frequency = 0.01,
- is_scroll_back_on_update = scroll_to_top,
- alignment = UnityEngine.TextAnchor.UpperLeft,
- on_update_item = function(item, i, v)
- if i == #rank_list - 1 and not self.sroll_end_req_evt and cur_page < total_page then
- -- 调整标志量,请求协议
- self.sroll_end_req_evt = true
- self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 41005, self.cur_rank_type, GuildModel.RankPageSize, cur_page + 1)
- end
- item:SetData(self.cur_rank_type, i, v, self:GetRewardCfgByRank(i, v), false)
- end,
- }
- self.rank_item_creator:UpdateItems(info)
-
- -- 更新底部固定内容
- self.my_rank_item = self.my_rank_item or GuildCSGRRankItem.New(self.my_reward_con)
- self.my_rank_item:SetAnchoredPosition(0, -2)
- -- 遍历数据获取玩家排行数据
- local is_role_rank = self.cur_rank_type == 0
- local my_rank_data, my_rank
- local compare_key = is_role_rank and self.main_vo.name or self.main_vo.guild_name
- for k, v in pairs(rank_list) do
- if compare_key == v.name and self.main_vo.server_num == v.server_num then
- my_rank_data = v
- my_rank = k
- break
- end
- end
- -- 没有数据的话需要构造一份表
- my_rank_data = my_rank_data or {
- server_num = self.main_vo.server_num,
- name = is_role_rank and self.main_vo.name or self.main_vo.guild_name,
- val = my_rank_data and my_rank_data.val or 0,
- vip = self.main_vo.vip_flag,
- svip_type = self.main_vo.sup_vip_type,
- gender = self.main_vo.sex,
- rank = my_rank,
- lv = self.main_vo.level,
- photo_profile_id = self.main_vo.profile_photo_id,
- dress_id = self.main_vo.dress_board,
- guild_flag = self.model:GetGuildFlag(),
- first_arena = my_rank_data and my_rank_data.first_arena or 0,
- }
- -- 获取我的奖励配置,不存在排行或者排行奖励配置就拿最后一个
- local my_reward_cfg = self:GetRewardCfgByRank(my_rank, my_rank_data)
- self.my_rank_item:SetData(self.cur_rank_type, my_rank, my_rank_data, my_reward_cfg, true)
- end
-
- function GuildCSGRRankView:GetRewardCfgByRank(rank, data)
- -- 获取目标配置表
- if rank then
- local target_list
- if self.cur_rank_type == 1 then
- target_list = data and data.first_arena == 1 and self.guild_reward_list or self.guild_normal_reward_list
- else
- target_list = self.role_reward_list
- end
- for k, v in ipairs(target_list) do
- if v.rank_min <= rank and v.rank_max >= rank then
- return v
- end
- end
- end
- return {is_empty = true}
- end
-
- function GuildCSGRRankView:DestroySuccess( )
- if self.tabWindowComponent then
- self.tabWindowComponent:DeleteMe()
- self.tabWindowComponent = nil
- end
-
- if self.my_rank_item then
- self.my_rank_item:DeleteMe()
- self.my_rank_item = nil
- end
- end
|