BtView = {} local this = BtView local bagPanelUI local RoleListPanelUI --- 静态数据 local static_openId = 0 function BtView:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = BtView }) return b end --初始化组件(用于子类重写) function this:InitComponent() self.spLoader = SpriteLoader.New() --basicPart self.BtnMainCity = Util.GetGameObject(self.gameObject, "Down/btnMainCity") self.BtnChengYuan = Util.GetGameObject(self.gameObject, "Down/btnChengYuan") self.BtnCangKu = Util.GetGameObject(self.gameObject, "Down/btnCangKu") self.BtnJieLing = Util.GetGameObject(self.gameObject, "Down/btnJieLing") self.BtnCarbon = Util.GetGameObject(self.gameObject, "Down/btnCarbon") -- 副本 self.BtnGongHui = Util.GetGameObject(self.gameObject, "Down/btnGongHui") -- self.BtnTeQuan = Util.GetGameObject(self.gameObject, "Down/btnTeQuan") self.BtnPractice = Util.GetGameObject(self.gameObject, "Down/btnPractice") -- 主城与副本的新字 self.mainCityNew = Util.GetGameObject(self.BtnMainCity, "xin") self.carbonNew = Util.GetGameObject(self.BtnCarbon, "xin") self.btnText = { -- [PanelTypeView.Carbon] = self.carbonNew, [PanelTypeView.MainCity] = self.mainCityNew, } self.AnimRoot = Util.GetGameObject(self.gameObject, "Down") self._BtnConfig = { [PanelTypeView.MainCity] = {node = self.BtnMainCity, funcId = {49}, rpType = nil, clickFunc = self.OPenMainCity}, [PanelTypeView.MemberPanel] = {node = self.BtnChengYuan, funcId = {23}, rpType = RedPointType.Role, clickFunc = self.OpenChengYuan}, [PanelTypeView.BagPanel] = {node = self.BtnCangKu, funcId = {23}, rpType = RedPointType.Bag, clickFunc = self.OpenCangKu}, [PanelTypeView.JieLing] = {node = self.BtnJieLing, funcId = {}, rpType = RedPointType.SecretTer, clickFunc = self.OpenJieling}, [PanelTypeView.Carbon] = {node = self.BtnCarbon, funcId = {17, 18, 30, 46, 67}, rpType = RedPointType.ExploreMain, clickFunc = self.OpenCarbon}, [PanelTypeView.GongHui] = {node = self.BtnGongHui, funcId = {4}, rpType = RedPointType.Guild, clickFunc = self.OpenGuild}, -- [PanelTypeView.TeQuan] = {node = self.BtnTeQuan, funcId = {}, rpType = RedPointType.VipPrivilege, clickFunc = self.OpenVIP}, [PanelTypeView.Practice] = {node = self.BtnPractice, funcId = {108}, rpType = RedPointType.Practice, clickFunc = self.OpenPractice}, } end -- 主城 function this:OPenMainCity() if not UIManager.IsOpen(UIName.MainPanel) then UIManager.OpenPanel(UIName.MainPanel) end end --打开英雄列表界面 function this:OpenChengYuan() if not UIManager.IsOpen(UIName.RoleListPanel) or (RoleListPanelUI and RoleListPanelUI .isFirstOpen == false)then HeroManager.heroListPanelSortID = 1 HeroManager.heroListPanelProID = 0 RoleListPanelUI = UIManager.OpenPanel(UIName.RoleListPanel) end end --打开仓库界面 function this:OpenCangKu() if not UIManager.IsOpen(UIName.BagPanel) or (bagPanelUI and bagPanelUI.isFristOpen == false) then bagPanelUI = UIManager.OpenPanel(UIName.BagPanel) end end -- 挂机界面 function this:OpenJieling() UIManager.OpenPanel(UIName.FightPointPassMainPanel) end -- 打开副本选择界面 function this:OpenCarbon() -- PlayerManager.carbonType = 1 -- UIManager.OpenPanel(UIName.CarbonTypePanelV2) UIManager.OpenPanel(UIName.CarbonsPanel) end function this:OpenGuild() JumpManager.GoJump(4001) end -- function this:OpenVIP() -- UIManager.OpenPanel(UIName.VipPanelV2) -- end function this:OpenPractice() UIManager.OpenPanel(UIName.PracticePanel) end --绑定事件(用于子类重写) function this:BindEvent() for pt, data in pairs(self._BtnConfig) do Util.AddClick(data.node, function() if self.panelType == pt then return end self:OnBtnClick(pt) end) -- 绑定红点 if data.rpType then BindRedPointObject(data.rpType, Util.GetGameObject(data.node,"redPoint")) end end end --添加事件监听(用于子类重写) function this:AddListener() Game.GlobalEvent:AddEvent(GameEvent.Player.OnLevelChange, self.RefreshBtnState, self) Game.GlobalEvent:AddEvent(GameEvent.FunctionCtrl.OnFunctionOpen, self.RefreshBtnState, self) Game.GlobalEvent:AddEvent(GameEvent.FunctionCtrl.OnFunctionClose, self.RefreshBtnState, self) Game.GlobalEvent:AddEvent(GameEvent.Equip.EquipChange, self.RefreshRedPoint, self) end --移除事件监听(用于子类重写) function this:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.Player.OnLevelChange, self.RefreshBtnState, self) Game.GlobalEvent:RemoveEvent(GameEvent.FunctionCtrl.OnFunctionOpen, self.RefreshBtnState, self) Game.GlobalEvent:RemoveEvent(GameEvent.FunctionCtrl.OnFunctionClose, self.RefreshBtnState, self) Game.GlobalEvent:RemoveEvent(GameEvent.Equip.EquipChange, self.RefreshRedPoint, self) end function this:RefreshRedPoint() CheckRedPointStatus(RedPointType.Role) end ---@param context table -- context: { -- sortOrder = int, -- panelType = int, -- } --界面打开时调用(用于子类重写) function this:OnOpen(rootPanel, context) self.rootPanel = rootPanel -- if not _CurPanel and UIManager.IsOpen(UIName.FightPointPassMainPanel) then -- _CurPanel = UIName.FightPointPassMainPanel -- end if context then self:SetOrderStatus(context) self:SetSelectTarget(context) end -- 刷新显示状态 self:RefreshBtnState() --检测成员红点 CheckRedPointStatus(RedPointType.Role) end function this:RefreshBtnState() -- for pt, data in pairs(self._BtnConfig) do local isOpen = self:CheckIsOpen(pt) Util.SetGray(data.node, not isOpen) Util.GetGameObject(data.node, "lock"):SetActive(not isOpen) end self:InitNewOpenShow() self:CheckMainCityNew() self:SetAnimState() self:RedPointTimer() end function this:RedPointTimer() if this.timer then this.timer:Stop() this.timer = nil end local t = 0 this.timer = Timer.New(function () t = t + 1 if t%5 == 1 then if (PrivilegeManager.GetPrivilegeRemainValue(PRIVILEGE_TYPE.GUILD_CAR_DELEAY_CHALLENGE) > 0 or PrivilegeManager.GetPrivilegeRemainValue(PRIVILEGE_TYPE.GUILD_CAR_DELEAY_LOOT) > 0) then--车迟的红点 CheckRedPointStatus(RedPointType.LegendExplore) end end end,1,-1,true) this.timer:Start() end -- 检测是否开启 function this:CheckIsOpen(pt) local isOpen = false local data = self._BtnConfig[pt] if #data.funcId ~= 0 then for _, id in ipairs(data.funcId) do if ActTimeCtrlManager.SingleFuncState(id) then isOpen = true break end end else isOpen = true end return isOpen end -- 按钮点击事件 function this:OnBtnClick(pt) local isOpen = self:CheckIsOpen(pt) if isOpen then -- 关闭当前界面 if pt ~= PanelTypeView.GongHui or PlayerManager.familyId ~= 0 then self.rootPanel:ClosePanel() end -- 打开新界面 local btnFunc = self._BtnConfig[pt].clickFunc if btnFunc then btnFunc(self) end else local str = "" if pt == PanelTypeView.Carbon then str = ActTimeCtrlManager.CarbonOpenTip() else local id = self._BtnConfig[pt].funcId[1] str = ActTimeCtrlManager.GetFuncTip(id) end PopupTipPanel.ShowTip(str) end end -- 初始化新字显示, 先只检查副本 function this:InitNewOpenShow() -- local isOpen = FunctionOpenMananger.GetRootState(PanelTypeView.Carbon) -- Util.GetGameObject(self.BtnCarbon.transform, "xin"):SetActive(isOpen) end -- 检测主城 function this:CheckMainCityNew() local isOpen = FunctionOpenMananger.GetRootState(PanelTypeView.MainCity) Util.GetGameObject(self.BtnMainCity.transform, "xin"):SetActive(isOpen) end function this:SetAnimState() local mainCityOpen = FunctionOpenMananger.GetRootState(PanelTypeView.MainCity) local carbonOpen = FunctionOpenMananger.GetRootState(PanelTypeView.Carbon) local isUseAnim = mainCityOpen or carbonOpen if isUseAnim then PlayUIAnim(self.AnimRoot) else PlayUIAnimBack(self.AnimRoot) end end --界面关闭时调用(用于子类重写) function this:OnClose() self.spLoader:Destroy() for pt, data in pairs(self._BtnConfig) do if data.rpType then ClearRedPointObject(data.rpType, Util.GetGameObject(data.node,"redPoint")) end end bagPanelUI = nil RoleListPanelUI = nil end --设定层级 function this:SetOrderStatus(context) if not context.sortOrder then return end self.transform:GetComponent("Canvas").sortingOrder = context.sortOrder + 1 for pt, selectInfo in pairs(self._BtnConfig) do Util.SetParticleSortLayer(Util.GetGameObject(selectInfo.node, "btnSelect/Effect_UI_ZhuCheng_xuanzhong"),context.sortOrder + 1) end end --设定选中 function this:SetSelectTarget(context) if not context.panelType then return end self.panelType = context.panelType for pt, selectInfo in pairs(self._BtnConfig) do Util.GetGameObject(selectInfo.node, "btnSelect"):SetActive(pt == context.panelType) end FightPointPassManager.isOutFight = context.panelType == PanelTypeView.JieLing end return BtView