local uiCtrl = require_ex('UI/Panels/Base/UICtrl') local PANEL_ID = PanelId.FriendBusinessCardRoot FriendBusinessCardRootCtrl = HL.Class('FriendBusinessCardRootCtrl', uiCtrl.UICtrl) FriendBusinessCardRootCtrl.s_messages = HL.StaticField(HL.Table) << { [MessageConst.ON_FRIEND_BUSINESS_INFO_CHANGE] = 'OnFriendBusinessInfoChange', } FriendBusinessCardRootCtrl.m_roleId = HL.Field(HL.Number) << 0 FriendBusinessCardRootCtrl.m_panel = HL.Field(HL.Userdata) FriendBusinessCardRootCtrl.m_businessCard = HL.Field(HL.Forward('FriendBusinessCard')) FriendBusinessCardRootCtrl.m_businessCardId = HL.Field(HL.String) << '' FriendBusinessCardRootCtrl.m_isPlayInAnimationInFrame = HL.Field(HL.Boolean) << false FriendBusinessCardRootCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg) if arg and arg.roleId then self.m_roleId = arg.roleId else self.m_roleId = GameInstance.player.roleId end self:_UpdateCardInfo() end FriendBusinessCardRootCtrl.OnPhaseRefresh = HL.Override(HL.Any) << function(self, args) end FriendBusinessCardRootCtrl._UpdateCardInfo = HL.Method() << function(self) local success , friendInfo = GameInstance.player.friendSystem:TryGetFriendInfo(self.m_roleId) if not success then logger.error('FriendBusinessCardRootCtrl.OnCreate: Failed to get friend info for roleId: ' .. self.m_roleId) friendInfo = GameInstance.player.friendSystem.SelfInfo end local businessCardId = friendInfo.businessCardTopicId if self.m_businessCardId == businessCardId then self.m_businessCard:InitFriendBusinessCard(self.m_roleId) return end if self.m_panel then self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ }) CSUtils.ClearUIComponents(self.m_panel) GameObject.DestroyImmediate(self.m_panel) self.m_phase:SetTabBlockState(false) end self.m_businessCardId = businessCardId local success, cfg = Tables.businessCardTopicTable:TryGetValue(businessCardId) if not success then logger.error('FriendBusinessCardRootCtrl.OnCreate: Failed to get business card config for id: ' .. businessCardId) return end local path = string.format(UIConst.UI_BUSINESS_CARD_PREFAB_PATH , cfg.panelPrefab) local prefab = self:LoadGameObject(path) self.m_panel = CSUtils.CreateObject(prefab, self.view.cardRoot) self.m_businessCard = Utils.wrapLuaNode(self.m_panel) self.m_businessCard:InitFriendBusinessCard(self.m_roleId) self.m_businessCard.view.rightBottomBtn.onIsFocusedChange:RemoveAllListeners() self.m_businessCard.view.rightBottomBtn.onIsFocusedChange:AddListener(function(isFocused) self.m_phase:SetTabBlockState(isFocused) end) self.animationWrapper = self.m_businessCard.view.animationWrapper self.m_businessCard.view.animationWrapper:PlayInAnimation() self.m_isPlayInAnimationInFrame = true CoroutineManager:StartCoroutine(function() coroutine.step() self.m_isPlayInAnimationInFrame = false end) if self.m_phase then self.m_phase:_BindControllerHintPlaceHolder() end end FriendBusinessCardRootCtrl.OnFriendBusinessInfoChange = HL.Method() << function(self) self:_UpdateCardInfo() end FriendBusinessCardRootCtrl.OnShow = HL.Override() << function(self) self.m_businessCard:InitFriendBusinessCard(self.m_roleId) if not self.m_isPlayInAnimationInFrame then self.m_businessCard.view.animationWrapper:PlayInAnimation() self.m_isPlayInAnimationInFrame = true CoroutineManager:StartCoroutine(function() coroutine.step() self.m_isPlayInAnimationInFrame = false end) end end HL.Commit(FriendBusinessCardRootCtrl)