local phaseBase = require_ex('Phase/Core/PhaseBase') local PHASE_ID = PhaseId.SNS PhaseSNS = HL.Class('PhaseSNS', phaseBase.PhaseBase) local SNS_BASIC_PANEL_ID = PanelId.SNSBasic local SNS_BARKER_PANEL_ID = PanelId.SNSBarker local SNS_MISSION_PANEL_ID = PanelId.SNSMission local SNS_FRIEND_PANEL_ID = PanelId.SNSFriend PhaseSNS.m_basicPanelItem = HL.Field(HL.Forward("PhasePanelItem")) PhaseSNS.m_curPanelItem = HL.Field(HL.Forward("PhasePanelItem")) PhaseSNS.m_panelId2Item = HL.Field(HL.Table) PhaseSNS.s_messages = HL.StaticField(HL.Table) << { } PhaseSNS.s_prePanelId = HL.StaticField(HL.Number) << -1 PhaseSNS._OnInit = HL.Override() << function(self) PhaseSNS.Super._OnInit(self) end PhaseSNS._DoPhaseTransitionIn = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args) self.m_panelId2Item = {} local defaultPanelId if not self.arg then defaultPanelId = PhaseSNS.s_prePanelId > 0 and PhaseSNS.s_prePanelId or SNS_BARKER_PANEL_ID elseif not string.isEmpty(self.arg.dialogId) then local dialogId = self.arg.dialogId local isMissionRelated = not string.isEmpty(Tables.sNSDialogTable[dialogId].relatedMissionId) if isMissionRelated then defaultPanelId = SNS_MISSION_PANEL_ID else defaultPanelId = SNS_BARKER_PANEL_ID end elseif not string.isEmpty(self.arg.roleId) then defaultPanelId = SNS_FRIEND_PANEL_ID else logger.error("invalid open phase params") end self.m_basicPanelItem = self:CreatePhasePanelItem(SNS_BASIC_PANEL_ID, { defaultPanelId }) local defaultPanelItem = self:CreatePhasePanelItem(defaultPanelId, self.arg) self.m_panelId2Item[defaultPanelId] = defaultPanelItem self.m_curPanelItem = defaultPanelItem local uiCtrl = defaultPanelItem.uiCtrl if HL.TryGet(uiCtrl, "OnSwitchOn") then uiCtrl:OnSwitchOn(true) end PhaseSNS.s_prePanelId = defaultPanelId self:_BindControllerHintPlaceHolder() end PhaseSNS._DoPhaseTransitionOut = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args) end PhaseSNS._DoPhaseTransitionBehind = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args) end PhaseSNS._DoPhaseTransitionBackToTop = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args) end PhaseSNS._OnActivated = HL.Override() << function(self) end PhaseSNS._OnDeActivated = HL.Override() << function(self) end PhaseSNS._OnDestroy = HL.Override() << function(self) PhaseSNS.Super._OnDestroy(self) end PhaseSNS._OnRefresh = HL.Override() << function(self) local isFriendSChat = false for panelId, item in pairs(self.m_panel2Item) do if self.m_curPanelItem == item and panelId == SNS_FRIEND_PANEL_ID then isFriendSChat = true end end if isFriendSChat then self.m_curPanelItem.uiCtrl:OnClickOpenFriendChat({self.arg.roleId}) end logger.warn("PhaseSNS._OnRefresh fail") end PhaseSNS.OnTabChange = HL.Method(HL.Table) << function(self, args) local panelId = args.panelId if not panelId then return end local prePanelItem = self.m_curPanelItem if prePanelItem then prePanelItem.uiCtrl:Hide() local preUICtrl = prePanelItem.uiCtrl if HL.TryGet(preUICtrl, "OnSwitchOn") then preUICtrl:OnSwitchOn(false) end end local panelItem local needContinue = self.m_panel2Item[panelId] ~= nil if self.m_panelId2Item[panelId] then panelItem = self.m_panelId2Item[panelId] panelItem.uiCtrl:Show() else panelItem = self:CreatePhasePanelItem(panelId) self.m_panelId2Item[panelId] = panelItem end local uiCtrl = panelItem.uiCtrl if needContinue and HL.TryGet(uiCtrl, "TryContinueDialog") then uiCtrl:TryContinueDialog() end if HL.TryGet(uiCtrl, "OnSwitchOn") then uiCtrl:OnSwitchOn(true) end self.m_curPanelItem = panelItem PhaseSNS.s_prePanelId = panelId self:_BindControllerHintPlaceHolder() end PhaseSNS._BindControllerHintPlaceHolder = HL.Method() << function(self) if not DeviceInfo.usingController then return end if not self.m_basicPanelItem or not self.m_curPanelItem then return end local basicCtrl = self.m_basicPanelItem.uiCtrl local curCtrl = self.m_curPanelItem.uiCtrl if curCtrl then curCtrl.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ basicCtrl.view.inputGroup.groupId, curCtrl.view.inputGroup.groupId, }) end end PhaseSNS.OnSNSBarkerContentCoreFocus = HL.Method(HL.Boolean) << function(self, isOn) local ctrl = self.m_basicPanelItem.uiCtrl ctrl:ToggleTitleBindGroup(not isOn) end PhaseSNS.ToggleBasicPanelCloseBtn = HL.Method(HL.Boolean) << function(self, isOn) local ctrl = self.m_basicPanelItem.uiCtrl ctrl:ToggleCloseBtn(isOn) end HL.Commit(PhaseSNS)