源战役客户端
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.
 
 
 
 
 

192 lines
7.2 KiB

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