require("Base/BasePanel") local DynamicActivityPanel = Inherit(BasePanel) local this = DynamicActivityPanel -- Tab管理器 local TabBox = require("Modules/Common/TabBox") local GlobalActConfig = ConfigManager.GetConfig(ConfigName.GlobalActivity) local _CurPageIndex =1 local orginLayer local tabs = { [1] = { --第二周 破阵诛仙 default = "p_pozhengzhuxian_anniu_02", lock = "p_pozhengzhuxian_anniu_02", select = "p_pozhengzhuxian_anniu_01", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [2] = { --第三周 勇冠三军 default = "c_ydsj_anniu_02", lock = "c_ydsj_anniu_02", select = "c_ydsj_anniu_01", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [3] = { --第四周 叱咤风云 default = "c_ccfy_icon2", lock = "c_ccfy_icon2", select = "c_ccfy_icon1", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [4] = { --第五周 丹心碧血 default = "d_danxinbixue_icon2", lock = "d_danxinbixue_icon2", select = "d_danxinbixue_bicon1", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [5] = { --第六周 势不可挡 default = "s_shibukedang_bicon1", lock = "s_shibukedang_bicon1", select = "s_shibukedang_bicon2", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [6] = { --第七周 勇往直前 default = "s_yongwangzhiqian_icon2", lock = "s_yongwangzhiqian_icon2", select = "s_yongwangzhiqian_icon1", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [7] = { --第八周 default = "s_shibukedang_bicon1", lock = "s_shibukedang_bicon1", select = "s_shibukedang_bicon2", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [8] = { --第九周 default = "s_shibukedang_bicon1", lock = "s_shibukedang_bicon1", select = "s_shibukedang_bicon2", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [9] = { --第十周 default = "s_shibukedang_bicon1", lock = "s_shibukedang_bicon1", select = "s_shibukedang_bicon2", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [10] = { --第十一周 default = "s_shibukedang_bicon1", lock = "s_shibukedang_bicon1", select = "s_shibukedang_bicon2", rpType = RedPointType.DynamicActTask,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct }, [11] = { --社稷大典 default = "r_guanka_sheji_anniu_02", lock = "r_guanka_sheji_anniu_02", select = "r_guanka_sheji_anniu_01", rpType = RedPointType.Celebration,panelType = PanelType.Celebration,ActType = ActivityTypeDef.Celebration }, [12] = { --限时召唤 default = "x_xianshizaohuan_02", lock = "x_xianshizaohuan_02", select = "x_xianshizaohuan_01", rpType = RedPointType.TimeLimited,panelType = PanelType.TimelimitCall,ActType = ActivityTypeDef.FindFairy }, [13] = { --乾坤宝盒 default = "q_qiankun_baoheanniu_02", lock = "q_qiankun_baoheanniu_02", select = "q_qiankun_baoheanniu_01", rpType = RedPointType.QianKunBox,panelType = PanelType.QianKunBox,ActType = ActivityTypeDef.QianKunBox }, [14] = { --珍奇礼包 default = "z_zhenqibaoge_anniu_02", lock = "z_zhenqibaoge_anniu_02", select = "z_zhenqibaoge_anniu_01", rpType = "",panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct_Treasure }, [15] = { --累计充值 一天一刷 default = "r_huodong_leijichengzhianniu_01", lock = "r_huodong_leijichengzhianniu_01", select = "r_huodong_leijichengzhianniu", rpType = RedPointType.DynamicActRecharge,panelType = PanelType.Main,ActType = ActivityTypeDef.AccumulativeRechargeExper }, [16] = { --累计充值 一周一刷 default = "r_huodong_leijichengzhianniu_01", lock = "r_huodong_leijichengzhianniu_01", select = "r_huodong_leijichengzhianniu", rpType = RedPointType.DynamicActRecharge,panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct_recharge }, [17] = { --限时商市 default = "x_xianshishangshi_anniu_02", lock = "x_xianshishangshi_anniu_02", select = "x_xianshishangshi_anniu_01", rpType = "",panelType = PanelType.Main,ActType = ActivityTypeDef.DynamicAct_TimeLimitShop }, [18] = { --限时兑换 default = "r_xianshiduihuan_anniu_01", lock = "r_xianshiduihuan_anniu_01", select = "r_xianshiduihuan_anniu", rpType = "",panelType = PanelType.Main,ActType = ActivityTypeDef.LimitExchange }, } local _PageInfo = {--后期可以做成tableInsert,icon名字都去读表 [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1, [6] = 1, [7] = 1, [8] = 1, [9] = 1, [10] = 1, [11] = 2, [12] = 3, [13] = 4, [14] = 5, [15] = 6, [16] = 6, [17] = 7, [18] = 8, } local TimeLimitedCall = require("Modules/DynamicActivity/TimeLimitedCall") local QianKunBox = require("Modules/DynamicActivity/QianKunBox") local DynamicActPage=require("Modules/DynamicActivity/DynamicTaskPage") local ZhenQiYiBaoPage=require("Modules/DynamicActivity/ZhenQiYiBaoPage") local LeiJiChongZhiPage=require("Modules/DynamicActivity/LeiJiChongZhiPage") local XianShiShangShi=require("Modules/DynamicActivity/XianShiShangShi") local SheJiDaDian=require("Modules/DynamicActivity/SheJiDaDian") local XianShiDuiHuan=require("Modules/Expert/DynamicActivityExChange") --初始化组件(用于子类重写) function DynamicActivityPanel:InitComponent() orginLayer = 0 this.tabbox = Util.GetGameObject(self.gameObject, "bg/tabbox") this.btnBack = Util.GetGameObject(self.gameObject, "bg/btnBack") this.content = Util.GetGameObject(self.gameObject, "bg/pageContent") this.PageList = { [1] = DynamicActPage.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_3")), [2] = SheJiDaDian.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_8")), [3] = TimeLimitedCall.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_1")), [4] = QianKunBox.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_2")), [5] = ZhenQiYiBaoPage.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_4")), [6] = LeiJiChongZhiPage.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_5")), [7] = XianShiShangShi.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_6")), [8] = XianShiDuiHuan.new(self, Util.GetGameObject(self.transform, "bg/pageContent/page_7")), } -- 上部货币显示 this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform, { showType = UpViewOpenType.ShowLeft}) end --绑定事件(用于子类重写) function DynamicActivityPanel:BindEvent() -- 初始化Tab管理器 this.PageTabCtrl = TabBox.New() this.PageTabCtrl:SetTabAdapter(this.PageTabAdapter) this.PageTabCtrl:SetTabIsLockCheck(this.PageTabIsLockCheck) this.PageTabCtrl:SetChangeTabCallBack(this.OnPageTabChange) -- 关闭界面打开主城 Util.AddClick(this.btnBack, function() this:ClosePanel() end) end --添加事件监听(用于子类重写) function DynamicActivityPanel:AddListener() Game.GlobalEvent:AddEvent(GameEvent.Activity.OnActivityOpenOrClose, this.RefreshActivityBtn) for i = 1, #this.PageList do if this.PageList[i] then this.PageList[i]:AddListener() end end end --移除事件监听(用于子类重写) function DynamicActivityPanel:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.Activity.OnActivityOpenOrClose, this.RefreshActivityBtn) for i = 1, #this.PageList do if this.PageList[i] then this.PageList[i]:RemoveListener() end end end this.RefreshActivityBtn = function() if not ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.DynamicAct) then this:ClosePanel() end end --界面打开时调用(用于子类重写) function DynamicActivityPanel:OnOpen(chooseIndex) -- 初始化tab数据 _CurPageIndex = chooseIndex or 1 this.PageTabCtrl:Init(this.tabbox, tabs,_CurPageIndex) end -- 打开,重新打开时回调 function DynamicActivityPanel:OnShow() if _CurPageIndex then this.PageTabCtrl:ChangeTab(_CurPageIndex) end end ----==========================一级页签相关=========================================== -- tab按钮自定义显示设置 function this.PageTabAdapter(tab, index, status) local img = Util.GetGameObject(tab, "img"):GetComponent("Image") local lock = Util.GetGameObject(tab, "lock") local redpot = Util.GetGameObject(tab, "redpot") img.sprite = Util.LoadSprite(tabs[index][status]) img:SetNativeSize() local islock = status == "lock" Util.SetGray(img.gameObject, islock) lock:SetActive(islock) -- 判断是否需要检测红点 redpot:SetActive(false) if not islock then this.ClearPageRedpot(index) this.BindPageRedpot(index, redpot) end local id = ActivityGiftManager.IsActivityTypeOpen(tabs[index].ActType) if id and id > 0 then if GlobalActConfig[id].ShowArt and GlobalActConfig[id].ShowArt > 0 then tab:SetActive(GlobalActConfig[id].ShowArt == index) else tab.gameObject:SetActive(true) end --限时兑换特殊处理 if GlobalActConfig[id].Type == ActivityTypeDef.LimitExchange then tab.gameObject:SetActive(GlobalActConfig[id].ShowArt ~= 1) end --累计充值特殊处理 if GlobalActConfig[id].Type == ActivityTypeDef.AccumulativeRechargeExper then if GlobalActConfig[id] and GlobalActConfig[id].ShowArt ~= 1 then tab.gameObject:SetActive(true) else tab.gameObject:SetActive(false) end elseif GlobalActConfig[id].Type == ActivityTypeDef.DynamicAct_recharge then tab.gameObject:SetActive(true) end else tab.gameObject:SetActive(false) end end -- tab可用性检测 function this.PageTabIsLockCheck(index) return false end -- tab改变事件 function this.OnPageTabChange(index) _CurPageIndex = index for i = 1, #this.PageList do if this.PageList[i] then this.PageList[i]:OnHide() this.PageList[i].gameObject:SetActive(false) end end this.PageList[_PageInfo[index]]:OnShow(this.sortingOrder,this,tabs[index].ActType) this.PageList[_PageInfo[index]].gameObject:SetActive(true) this.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = tabs[index].panelType }) end -- 绑定数据 local _PageBindData = {} local _TabBindData = {} function this.BindPageRedpot(page, redpot) local rpType = tabs[page].rpType if not rpType then return end BindRedPointObject(rpType, redpot) _PageBindData[rpType] = redpot end function this.ClearPageRedpot(page) -- 清除红点绑定 if page then -- 清除某个 local rpType = tabs[page].rpType if not rpType then return end ClearRedPointObject(rpType, _PageBindData[rpType]) _PageBindData[rpType] = nil else -- 全部清除 for rpt, redpot in pairs(_PageBindData) do ClearRedPointObject(rpt, redpot) end _PageBindData = {} end end --界面关闭时调用(用于子类重写) function DynamicActivityPanel:OnClose() if _CurPageIndex then this.PageList[_PageInfo[_CurPageIndex]]:OnHide() this.PageList[_PageInfo[_CurPageIndex]].gameObject:SetActive(false) end end --界面销毁时调用(用于子类重写) function DynamicActivityPanel:OnDestroy() SubUIManager.Close(this.UpView) -- 清除红点 this.ClearPageRedpot() -- 这里管理全部子界面的销毁,保证子界面生命周期完整 for _, page in pairs(this.PageList) do if page.OnDestroy then page:OnDestroy() end end end return this