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