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