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