Files
Endfield-Data/LuaScripts/UI/Panels/FriendBusinessCardPreview/FriendBusinessCardPreviewCtrl.lua
2025-12-02 20:37:18 +07:00

235 lines
7.8 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.FriendBusinessCardPreview
local PHASE_ID = PhaseId.FriendBusinessCardPreview
FriendBusinessCardPreviewCtrl = HL.Class('FriendBusinessCardPreviewCtrl', uiCtrl.UICtrl)
FriendBusinessCardPreviewCtrl.TryStartBusinessCardPreview = HL.StaticMethod(HL.Table) << function(arg)
if arg and arg.roleId then
local id = arg.roleId
if id == GameInstance.player.roleId then
UIManager:Open(PanelId.FriendBusinessCardPreview, { roleId = id })
return
end
if GameInstance.player.friendSystem:PlayerInBlackList(id) then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_IN_BLACK_LIST_CANNOT_VIEW_BUSINESS_CARD)
return
end
if FriendUtils.isPsnPlatform() and GameInstance.player.friendSystem.isPSNOnly and not GameInstance.player.friendSystem:IsPsnFriend(id) then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_PSN_BUSINESS_CARD)
return
end
if GameInstance.player.friendSystem.isCommunicationRestricted then
Notify(MessageConst.SHOW_TOAST, Language.LUA_FRIEND_TIP_PARENTAL_CONTROL_BUSINESS_CARD)
return
end
logger.info('FriendBusinessCardPreviewCtrl.TryStartBusinessCardPreview: Syncing friend info for roleId: ' .. arg.roleId)
GameInstance.player.friendSystem:SyncFriendInfoById(arg.roleId, function()
if arg.isPhase == nil or arg.isPhase == true then
PhaseManager:GoToPhase(PHASE_ID, arg)
else
UIManager:Open(PANEL_ID, arg)
end
end)
else
logger.error('FriendBusinessCardPreviewCtrl.TryStartBusinessCardPreview: roleId is required in arg')
end
end
FriendBusinessCardPreviewCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_FRIEND_BUSINESS_INFO_CHANGE] = 'OnFriendBusinessInfoChange',
}
FriendBusinessCardPreviewCtrl.m_roleId = HL.Field(HL.Number) << 0
FriendBusinessCardPreviewCtrl.m_panel = HL.Field(HL.Userdata)
FriendBusinessCardPreviewCtrl.m_businessCard = HL.Field(HL.Forward('FriendBusinessCard'))
FriendBusinessCardPreviewCtrl.m_forceShare = HL.Field(HL.Boolean) << false
FriendBusinessCardPreviewCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
self.view.btnClose.onClick:RemoveAllListeners()
self.view.btnClose.onClick:AddListener(function()
self:_Close()
end)
self.view.shareBtn.onClick:RemoveAllListeners()
self.view.shareBtn.onClick:AddListener(function()
self.view.btnClose.gameObject:SetActive(false)
self.view.shareBtn.gameObject:SetActive(false)
local beforeSize = self.view.mask2d.transform.sizeDelta
local beforeAnchorMin = self.view.mask2d.transform.anchorMin
local beforeAnchorMax = self.view.mask2d.transform.anchorMax
local beforePivot = self.view.mask2d.transform.pivot
local beforePos = self.view.mask2d.transform.anchoredPosition
local beforeScale = self.view.businessCardScale.localScale
self.view.mask2d.enabled = false
self.view.mask2d.transform.anchoredPosition = Vector2.zero
self.view.mask2d.transform.sizeDelta = Vector2.zero
self.view.mask2d.transform.anchorMin = Vector2.zero
self.view.mask2d.transform.anchorMax = Vector2.one
self.view.mask2d.transform.pivot = Vector2(0.5, 0.5)
self.view.businessCardScale.localScale = Vector3.one
Notify(MessageConst.SHOW_COMMON_SHARE_PANEL, {
type = "BusinessCard",
showPlayerInfo = false,
showPlayerInfoToggle = false,
needEdge = false,
onCaptureEnd = function()
self.view.btnClose.gameObject:SetActive(true)
self.view.shareBtn.gameObject:SetActive(true)
self.view.mask2d.enabled = true
self.view.mask2d.transform.sizeDelta = beforeSize
self.view.mask2d.transform.anchorMin = beforeAnchorMin
self.view.mask2d.transform.anchorMax = beforeAnchorMax
self.view.mask2d.transform.pivot = beforePivot
self.view.mask2d.transform.anchoredPosition = beforePos
self.view.businessCardScale.localScale = beforeScale
if arg.forceShare == true then
self:_Close()
end
end,
})
end)
if arg and arg.roleId then
self.m_roleId = arg.roleId
else
logger.error('FriendBusinessCardRootCtrl.OnCreate: roleId is required in arg')
return
end
local fullScreen = arg.fullScreen ~= false
if fullScreen then
self.view.mask2d.enabled = false
self.view.mask2d.transform.anchoredPosition = Vector2.zero
self.view.mask2d.transform.sizeDelta = Vector2.zero
self.view.mask2d.transform.anchorMin = Vector2.zero
self.view.mask2d.transform.anchorMax = Vector2.one
self.view.mask2d.transform.pivot = Vector2(0.5, 0.5)
self.view.businessCardScale.transform.anchoredPosition = Vector2.zero
self.view.businessCardScale.localScale = Vector3.one
self.view.businessCardScale.transform.sizeDelta = Vector2.zero
self.view.shareBtn.gameObject:SetActive(false)
end
self.view.shareBtn.gameObject:SetActive(self.m_roleId == GameInstance.player.roleId and not GameInstance.player.friendSystem.isCommunicationRestricted)
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
if self.m_panel then
CSUtils.ClearUIComponents(self.m_panel)
GameObject.DestroyImmediate(self.m_panel)
end
local businessCardId = friendInfo.businessCardTopicId
if businessCardId == nil or businessCardId == '' then
logger.error('FriendBusinessCardRootCtrl.OnCreate: businessCardId is nil or empty for roleId: ' .. self.m_roleId)
return
end
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.businessCardScale)
self.m_businessCard = Utils.wrapLuaNode(self.m_panel)
self.m_forceShare = arg.forceShare == true
self.m_businessCard:InitFriendBusinessCard(self.m_roleId, true ,self.m_forceShare)
self.m_businessCard.m_bId = arg.bId
if arg.forceShare == true then
self.animationWrapper:SampleClip(self.animationWrapper.animationIn.name, self.animationWrapper.animationIn.length);
self.view.shareBtn.onClick:Invoke(nil)
else
self.m_businessCard.view.animationWrapper:PlayInAnimation()
end
end
FriendBusinessCardPreviewCtrl.OnFriendBusinessInfoChange = HL.Method() << function(self)
self.m_businessCard:InitFriendBusinessCard(self.m_roleId, true ,self.m_forceShare)
end
FriendBusinessCardPreviewCtrl._Close = HL.Method() << function(self)
if PhaseManager:IsOpen(PHASE_ID) then
PhaseManager:PopPhase(PHASE_ID)
else
self:PlayAnimationOutAndClose()
end
end
FriendBusinessCardPreviewCtrl.OnShow = HL.Override() << function(self)
self.m_businessCard:InitFriendBusinessCard(self.m_roleId, true ,self.m_forceShare)
end
HL.Commit(FriendBusinessCardPreviewCtrl)