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

271 lines
9.1 KiB

-- <*
-- @Author: Saber
-- @Description: 成就系统主界面
-- *>
AchieveView = AchieveView or BaseClass(BaseItem)
local AchieveView = AchieveView
local MAIN_TYPE_DATA = {
[1] = {name = "系统养成", type_id = 1, icon_res = "achi_main_type_icon1"},
[2] = {name = "社交活跃", type_id = 2, icon_res = "achi_main_type_icon2"},
[3] = {name = "日常挑战", type_id = 3, icon_res = "achi_main_type_icon3"},
[4] = {name = "资源收集", type_id = 4, icon_res = "achi_main_type_icon4"},
}
function AchieveView:__init()
self.base_file = "achievement"
self.layout_file = "AchieveView"
-- self.layer_name = "UI"
-- self.destroy_imm = true
-- self.use_background = G_USING_BG --全屏界面默认使用这个参数,非全屏界面自行设置
-- self.hide_maincancas = true
-- self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
-- self.append_to_ctl_queue = true --是否要添加进界面堆栈
-- self.blur_activity_bg = true
self.cur_tab_index = 1 -- 当前页签的index
self.category_data_req_list = {} -- 界面中请求进度协议的记录,保证在一次查看界面中不会反复请求章节成就进度协议
self.model = AchieveModel:getInstance()
self.item_list = {}
self.cur_select_type = 1
-- self.load_callback = function ()
-- self:LoadSuccess()
-- self:AddEvent()
-- end
-- self.open_callback = function ( )
-- self:UpdateView()
-- end
-- self.destroy_callback = function ( )
-- self:DestroySuccess()
-- end
self:Load()
end
function AchieveView:Open( index )
-- self.cur_tab_index = index or 1
BaseView.Open(self)
end
function AchieveView:Load_callback()
local nodes = {
"bg:raw",
"money_con",
"tab_scroll", "tab_scroll/Viewport/tab_con",
"view_con",
"close:obj",
"btnCon",
"total_view_con",
}
self:GetChildren(nodes)
-- local function close_callback()
-- self:Close()
-- end
-- self.tabWindowComponent = UITabWindow.New(self.transform, {}, nil ,close_callback, self.background_wnd, nil, UITabWindow.SizeSmallHallNoTab, false, nil, true)
-- self.tabWindowComponent:SetTitleText("成就之路")
-- self.tabWindowComponent:SetBackgroundRes("default_bg_6")
--lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("achi_main_bg_1280_720"), false)
self:AddEvent()
if self.need_refreshData then
self:UpdateView()
end
end
function AchieveView:AddEvent()
local function click_event(target)
if target == self.close_obj then
self:Close()
end
end
AddClickEvent(self.close_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
local function UPDATE_VIEW()
self:AutoSwitchCategoryAfterClaimReward( )
end
self:BindEvent(self.model, AchieveModel.UPDATE_BASE_VIEW, UPDATE_VIEW)
end
function AchieveView:UpdateView( )
self:InitMainTypeBtns()
self:UpdateTotalView()
--[[ local tab_list = self.model:GetChapterProgressTabData(true)
local callback = function(index)
self:ChangeTab(index)
end
self.tab_item_creator = self.tab_item_creator or self:AddUIComponent(UI.ItemListCreator)
local info = {
data_list = tab_list,
item_con = self.tab_con,
scroll_view = self.tab_scroll,
item_class = AchieveTabBtnItem,
item_height = 62,
start_x = 0.5,
start_y = -1,
space_y = 2.5,
create_frequency = 0.01,
alignment = UnityEngine.TextAnchor.UpperLeft,
on_update_item = function(item, i, v)
item:SetData(v, i, callback)
item:SetSelected(i == self.cur_tab_index)
end,
}
self.tab_item_creator:UpdateItems(info)
callback(self.cur_tab_index)--]]
end
-- 刷新主要的成就信息
function AchieveView:UpdateTotalView( )
if not self.achi_total_view then
self.achi_total_view = AchieveTotalView.New(self.total_view_con)
end
end
-- 初始化大类按钮
function AchieveView:InitMainTypeBtns( need_top )
local tb = self.model:GetMainTypeProgressData()
local click_cb = function ( type_id )
self:OnClickMainTypeBtn(type_id, nil, true)
end
local start_x = 39
local start_y = -32
local interval = 171
for i,v in ipairs(MAIN_TYPE_DATA) do
if tb[v.type_id] then
local item = self.item_list[i]
if not item then
self.item_list[i] = AchieveMainTypeItem.New(self.btnCon)
item = self.item_list[i]
end
item:SetData(v, tb[v.type_id], click_cb)
item:SetPosition(start_x +(i - 1) * interval, start_y)
end
end
local open_fun_cache = self.model:GetOpenFunCache()
if open_fun_cache then
-- print('Msh:AchieveView.lua[164] data', open_fun_cache.main_type)
self.cur_select_type = open_fun_cache.main_type
self.model:DelOpenFunCache() -- 删除跳转标志
end
self:OnClickMainTypeBtn(self.cur_select_type, true, need_top)
end
-- 点击大类按钮
function AchieveView:OnClickMainTypeBtn( type_id, force_update, need_top )
if (not force_update) and type_id == self.cur_select_type then
return
end
self.cur_select_type = type_id
for k,v in pairs(self.item_list) do
v:SetSelected(v.data.type_id == type_id)
end
self:UpdateViewCon(need_top)
end
-- 刷新成就列表
function AchieveView:UpdateViewCon( need_top )
if not self.achi_variety_view then
self.achi_variety_view = AchieveVarietyView.New(self.view_con)
end
-- 设置这边需要查看的成就章节数,由于章节是从第二个按钮开始所以这里要减1
local main_type = self.cur_select_type or 1
self.achi_variety_view:SetMainType(main_type, need_top)
-- 如果缓存中不存在数据则要请求一次协议,并且保证空的章节在一次打开成就主界面情况下不会反复请求
if not self.model:GetAchieveData(main_type) and not self.category_data_req_list[main_type] then
self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40902, main_type)
self.category_data_req_list[main_type] = true
end
-- self:PopUpChild(self.achi_variety_view)
end
--[[function AchieveView:ChangeTab(index)
self.cur_tab_index = index
if self.tab_item_creator then
self.tab_item_creator:IterateItems(function( item, i )
item:SetSelected(i == index)
end)
end
self:SelectedTab(index)
end--]]
--[[-- 选中左侧页签后回调
function AchieveView:SelectedTab(index)
if index == 1 then -- 总览界面在第一位
if not self.achi_total_view then
self.achi_total_view = AchieveTotalView.New(self.view_con)
end
self:PopUpChild(self.achi_total_view)
else
if not self.achi_variety_view then
self.achi_variety_view = AchieveVarietyView.New(self.view_con)
end
-- 设置这边需要查看的成就章节数,由于章节是从第二个按钮开始所以这里要减1
local category = index - 1
self.achi_variety_view:SetCategory(category)
-- 如果缓存中不存在数据则要请求一次协议,并且保证空的章节在一次打开成就主界面情况下不会反复请求
if not self.model:GetAchieveData(category) and not self.category_data_req_list[category] then
self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40902, category)
self.category_data_req_list[category] = true
end
self:PopUpChild(self.achi_variety_view)
end
end--]]
function AchieveView:AutoSwitchCategoryAfterClaimReward( )
local cur_main_type = self.cur_select_type
local main_type_red = self.model:GetAchieveCacheRed(AchieveModelRedType.Achieve)
if main_type_red then
if not main_type_red[cur_main_type] then -- 当前查看的章节已经没有红点了,则自动切换章节页签
local target_index
--print('Msh:AchieveView.lua[224] data', data)
for k, v in pairs(main_type_red) do
if v and (not target_index or target_index > k) then -- 存在红点
target_index = k
end
end
--PrintTable(main_type_red)
--print('Msh:AchieveView.lua[230] data', target_index)
if target_index then
self.cur_select_type = target_index
self:InitMainTypeBtns( true)
end
end
end
end
function AchieveView:SetData( data )
self.data = data
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function AchieveView:__delete( )
if self.achi_total_view then
self.achi_total_view:DeleteMe()
self.achi_total_view = nil
end
if self.achi_variety_view then
self.achi_variety_view:DeleteMe()
self.achi_variety_view = nil
end
-- if self.tabWindowComponent then
-- self.tabWindowComponent:DeleteMe()
-- self.tabWindowComponent = nil
-- end
for k,v in pairs(self.item_list) do
v:DeleteMe()
end
end