-- <*
|
|
-- @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
|