Files
Endfield-Data/LuaScripts/UI/Widgets/FriendBusinessCard.lua
2025-12-02 20:37:18 +07:00

259 lines
9.6 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
FriendBusinessCard = HL.Class('FriendBusinessCard', UIWidgetBase)
FriendBusinessCard.m_roleId = HL.Field(HL.Number) << 0
FriendBusinessCard.m_preview = HL.Field(HL.Boolean) << false
FriendBusinessCard.m_hideUI = HL.Field(HL.Boolean) << false
FriendBusinessCard.m_isExpanded = HL.Field(HL.Boolean) << false
FriendBusinessCard.m_themeChange = HL.Field(HL.Boolean) << false
FriendBusinessCard.m_bId = HL.Field(HL.Any)
FriendBusinessCard._OnFirstTimeInit = HL.Override() << function(self)
self.view.bgCloseBtn.onClick:RemoveAllListeners()
self.view.bgCloseBtn.onClick:AddListener(function()
if self.m_hideUI then
self.m_hideUI = false
self:_UpdateAllInfo()
return
end
local success, friendInfo = GameInstance.player.friendSystem:TryGetFriendInfo(self.m_roleId)
if not success then
logger.error("FriendBusinessCard.InitFriendBusinessCard 失败!因为没有找到好友信息!")
return
end
if self.m_preview and not self.m_themeChange then
self.m_isExpanded = false
self.view.businessCardState:SetState(self.m_isExpanded and 'Expand' or 'Close')
self.view.bgCloseBtn.gameObject:SetActiveIfNecessary(self.m_isExpanded or self.m_hideUI)
if not (self.m_themeChange or self.m_roleId == GameInstance.player.roleId) then
self.view.closeNode:PlayInAnimation()
end
return
end
if not friendInfo.expandFlag then
return
end
if self.m_roleId == GameInstance.player.roleId then
Notify(MessageConst.SHOW_TOAST, Language.LUA_BUSINESS_CARD_STATE_CHANGE_COLLECTION)
GameInstance.player.friendSystem:ExpandFlagModify(false)
end
end)
self.view.arrowBtn.onClick:RemoveAllListeners()
self.view.arrowBtn.onClick:AddListener(function()
if self.m_preview and not self.m_themeChange then
self.m_isExpanded = true
self.view.businessCardState:SetState(self.m_isExpanded and 'Expand' or 'Close')
self.view.bgCloseBtn.gameObject:SetActiveIfNecessary(self.m_isExpanded or self.m_hideUI)
if self.m_isExpanded then
self.view.rightNode:PlayInAnimation(function()
self.view.businessCardRoleNode:NaviToFirstChar()
end)
end
return
end
Notify(MessageConst.SHOW_TOAST, Language.LUA_BUSINESS_CARD_STATE_CHANGE_NORMAL)
GameInstance.player.friendSystem:ExpandFlagModify(true)
end)
self.view.themeChangeBtn.onClick:RemoveAllListeners()
self.view.themeChangeBtn.onClick:AddListener(function()
UIManager:Open(PanelId.FriendThemeChange)
end)
self.view.themeChangeRedDot:InitRedDot("NewBusinessCard", "")
self.view.applyBtn.onClick:RemoveAllListeners()
self.view.applyBtn.onClick:AddListener(function()
if GameInstance.player.friendSystem:PlayerInBlackList(self.m_roleId) then
local errorMsg = Tables.errorCodeTable:GetValue(1065)
Notify(MessageConst.SHOW_TOAST, errorMsg.text)
return
end
local stack = PhaseManager:GetPhaseStack()
local phaseId = ""
for i = 0, stack:Count() - 1 do
local item = stack:Get(stack:TopIndex() - i)
if item.phaseId ~= PhaseId.FriendBusinessCardPreview then
phaseId = PhaseManager:GetPhaseName(item.phaseId)
break
end
end
local panelId = ""
if phaseId == "Friend" then
panelId = UIManager:IsOpen(PanelId.SearchNewFriendList) and "SearchNewFriendList" or "StrangerList"
end
GameInstance.player.friendSystem:AddFriend(self.m_roleId, phaseId , panelId, tostring(self.m_bId))
end)
self.view.shareBtn.onClick:RemoveAllListeners()
self.view.shareBtn.onClick:AddListener(function()
if GameInstance.player.friendSystem.isCommunicationRestricted then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_PARENTAL_CONTROL_BUSINESS_CARD)
return
end
UIManager:Open(PanelId.FriendBusinessCardPreview, { roleId = self.m_roleId, forceShare = true })
end)
if GameInstance.player.friendSystem.isCommunicationRestricted then
self.view.shareBtn.gameObject:SetActive(false)
end
self.view.hideBtn.onClick:RemoveAllListeners()
self.view.hideBtn.onClick:AddListener(function()
UIManager:Open(PanelId.FriendBusinessCardPreview, { roleId = self.m_roleId, fullScreen = false })
end)
self.view.signBtn.onClick:RemoveAllListeners()
self.view.signBtn.onClick:AddListener(function()
if self.m_preview or GameInstance.player.friendSystem.isCommunicationRestricted then
return
end
FriendUtils.FRIEND_CELL_HEAD_FUNC.SIGNATURE_MODIFY().action()
end)
end
FriendBusinessCard.InitFriendBusinessCard = HL.Method(HL.Number, HL.Opt(HL.Boolean, HL.Boolean, HL.Boolean, HL.String)) << function(self, roleId, preview, forceShare, themeChange, topicId)
self:_FirstTimeInit()
self.m_roleId = roleId
if preview == nil then
preview = roleId ~= GameInstance.player.roleId
end
self.m_themeChange = themeChange == true
self.m_preview = preview
InputManagerInst:ToggleGroup(self.view.inputBindingGroupMonoTarget.groupId, not themeChange)
if forceShare then
self.view.animationWrapper:SampleClip(self.view.animationWrapper.animationIn.name, self.view.animationWrapper.animationIn.length);
self.view.animationWrapper:SampleClip(self.view.animationWrapper.animationInEasing.name, self.view.animationWrapper.animationInEasing.length);
self.view.arrowBtn.gameObject:SetActive(false)
self.view.personalInfoNode.view.playerUidTxtButton.gameObject:SetActive(false)
end
local success, friendInfo = GameInstance.player.friendSystem:TryGetFriendInfo(roleId)
if not success then
logger.error("FriendBusinessCard.InitFriendBusinessCard 失败!因为没有找到好友信息!")
return
end
local cfg = Tables.businessCardTopicTable:GetValue(themeChange == true and topicId or friendInfo.businessCardTopicId)
if themeChange then
self.m_isExpanded = cfg.expand
else
self.m_isExpanded = friendInfo.expandFlag
end
self:_UpdateAllInfo()
self.view.businessCardState:SetState(self.m_isExpanded and 'Expand' or 'Close')
if not forceShare then
if self.m_isExpanded then
if themeChange then
self.view.businessCardRoleNode:NaviToFirstChar()
else
self.view.rightNode:PlayInAnimation(function()
self.view.businessCardRoleNode:NaviToFirstChar()
end)
end
else
if not (themeChange or self.m_roleId == GameInstance.player.roleId) then
self.view.closeNode:PlayInAnimation()
end
end
end
if GameInstance.player.friendSystem:PlayerInBlackList(roleId) then
logger.error("FriendBusinessCard.InitFriendBusinessCard 该玩家在黑名单中roleId : " .. roleId)
self.view.applyBtn.gameObject:SetActive(false)
end
end
FriendBusinessCard._UpdateAllInfo = HL.Method() << function(self)
local roleType = GameInstance.player.friendSystem:GetRoleTypeByRoleId(self.m_roleId)
local stateName = roleType:ToString()
if roleType == CS.Beyond.Gameplay.RoleType.Self and (self.m_preview or self.m_hideUI) then
stateName = stateName .. 'Preview'
end
self.view.businessCardState:SetState(stateName)
self.view.personalInfoNode:InitBusinessCardPersonalInfoNodeByRoleId(self.m_roleId, self.m_preview or self.m_hideUI)
self.view.processNode:InitBusinessCardProcessNodeByRoleId(self.m_roleId)
self.view.personalCollectionNode:InitBusinessCardPersonalCollectionNode(self.m_roleId)
self.view.regionalNode:InitBusinessCardRegionalNodeByRoleId(self.m_roleId)
self.view.businessCardRoleNode:InitBusinessCardRoleNode(self.m_roleId, self.m_preview or self.m_hideUI)
self.view.businessCardMedalNode:InitBusinessCardMedalNode(self.m_roleId, roleType == CS.Beyond.Gameplay.RoleType.Self and not self.m_preview)
local success, friendInfo = GameInstance.player.friendSystem:TryGetFriendInfo(self.m_roleId)
if not success then
logger.error("FriendBusinessCard.InitFriendBusinessCard 失败!因为没有找到好友信息!")
return
end
if GameInstance.player.friendSystem.isCommunicationRestricted then
self.view.signTxt.text = ""
self.view.signBtn.gameObject:SetActive(false)
else
local interactable = not self.m_preview and roleType == CS.Beyond.Gameplay.RoleType.Self
local signature = roleType == CS.Beyond.Gameplay.RoleType.Self and string.isEmpty(friendInfo.signature) and Language.LUA_BUSINESS_CARD_SIGNATURE_TIP .. "<image=\"ThemeIcon/icon_friend_revise\" width=40 height=52>" or
interactable and friendInfo.signature .. "<image=\"ThemeIcon/icon_friend_revise\" width=40 height=52>" or friendInfo.signature
self.view.signTxt:SetAndResolveTextStyle(signature)
self.view.signBtn.interactable = interactable
if interactable == false and string.isEmpty(signature) then
self.view.signBtn.gameObject:SetActiveIfNecessary(false)
else
self.view.signBtn.gameObject:SetActiveIfNecessary(true)
end
end
self.view.bgCloseBtn.gameObject:SetActiveIfNecessary(self.m_isExpanded or self.m_hideUI)
end
HL.Commit(FriendBusinessCard)
return FriendBusinessCard