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

371 lines
13 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
local ChatType = CS.Beyond.Gameplay.SNSFriendChatSystem.ChatType
SNSFriendDialogContentCell = HL.Class('SNSFriendDialogContentCell', UIWidgetBase)
SNSFriendDialogContentCell.m_curActiveGo = HL.Field(GameObject)
SNSFriendDialogContentCell.m_curActiveWeight = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetTextLeft = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetTextRight = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetEmotionLeft = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetEmotionRight = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetBlueprintLeft = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetBlueprintRight = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetSocialBuildingLeft = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_widgetSocialBuildingRight = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_showLeft = HL.Field(HL.Boolean) << false
SNSFriendDialogContentCell.m_message = HL.Field(HL.Any)
SNSFriendDialogContentCell.m_msgIndex = HL.Field(HL.Number) << -1
SNSFriendDialogContentCell.m_inAnimationType = HL.Field(HL.Any) << ""
SNSFriendDialogContentCell.InitSNSFriendDialogContentCell = HL.Method(HL.Number, HL.Any, HL.Any, HL.Function) << function(
self, showRoleId, message, dialogContentNaviGroup, callback)
if message.showTimeStamp then
self.view.timeNode.gameObject:SetActive(true)
self.view.rightIsFirstPlaceholder.gameObject:SetActive(true)
self.view.leftIsFirstPlaceholder.gameObject:SetActive(true)
self.view.rightPlayerHead.gameObject:SetActive(true)
self.view.leftPlayerHead.gameObject:SetActive(true)
self.view.timeNode.gameObject:SetActive(true)
local showTimeStamp = message.showUseTimeStamp + Utils.getServerTimeZoneOffsetSeconds()
if message.showUseTimeStamp < Utils.getTimestampNowYear1M1Day() then
self.view.timeTxt.text = os.date("!" .. Language.LUA_CHAT_DATE_YEAR_MONTH_DAY_HOUR_MIN, showTimeStamp)
elseif message.showUseTimeStamp < Utils.getTimestampToday0AM() then
self.view.timeTxt.text = os.date("!" .. Language.LUA_CHAT_DATE_MONTH_DAY_HOUR_MIN, showTimeStamp)
else
self.view.timeTxt.text = os.date("!" .. Language.LUA_CHAT_DATE_HOUR_MIN, showTimeStamp)
end
else
self.view.timeNode.gameObject:SetActive(false)
self.view.rightIsFirstPlaceholder.gameObject:SetActive(false)
self.view.leftIsFirstPlaceholder.gameObject:SetActive(false)
self.view.rightPlayerHead.gameObject:SetActive(false)
self.view.leftPlayerHead.gameObject:SetActive(false)
end
self:_CloseAllChildWidget()
self.view.contentMyselfNode.gameObject:SetActive(false)
self.view.contentOtherNode.gameObject:SetActive(false)
self.m_message = message
self.m_msgIndex = message.msgIndex
if message.ownerId == GameInstance.player.roleId then
self.m_showLeft = false
self.view.contentMyselfNode.gameObject:SetActive(true)
self.view.rightPlayerHead:UpdateHideLevelTxt(true)
self.view.rightPlayerHead:UpdateHideSignature(true)
self.view.rightPlayerHead:InitCommonPlayerHeadByRoleId(GameInstance.player.roleId, false)
if message.type == ChatType.Text then
if not self.m_widgetTextRight then
self.m_widgetTextRight = self:_CreateWidget("SNSFriendChatTextRight", self.view.rightContent)
end
local success, info = GameInstance.player.friendChatSystem.m_uniq2chatText:TryGetValue(message.textId)
local showText = ""
if success then
local haveText, tableData = Tables.friendChatTextTable:TryGetValue(info.textName)
if haveText then
showText = tableData.messageText
else
showText = Language.LUA_FRIEND_CHAT_INVALID_TEXT
end
else
showText = Language.LUA_FRIEND_CHAT_INVALID_TEXT
end
self.m_widgetTextRight:InitSNSFriendChatTextRight(showText)
self.m_curActiveGo = self.m_widgetTextRight.gameObject
self.m_curActiveWeight = self.m_widgetTextRight
self.m_inAnimationType = "normal"
elseif message.type == ChatType.Emotion then
if not self.m_widgetEmotionRight then
self.m_widgetEmotionRight = self:_CreateWidget("SNSFriendChatEmotionRight", self.view.rightContent)
end
local success, info = GameInstance.player.friendChatSystem.m_uniq2chatEmotion:TryGetValue(message.emojiId)
local showImg = ""
if success then
showImg = info.emotionImgPath
end
self.m_widgetEmotionRight:InitSNSFriendChatEmotionRight(showImg)
self.m_curActiveGo = self.m_widgetEmotionRight.gameObject
self.m_curActiveWeight = self.m_widgetEmotionRight
self.m_inAnimationType = "normal"
elseif message.type == ChatType.Blueprint then
if not self.m_widgetBlueprintRight then
self.m_widgetBlueprintRight = self:_CreateWidget("SNSFriendBlueprintItem", self.view.rightContent)
end
self.m_widgetBlueprintRight:InitSNSFriendBlueprintItem(message, dialogContentNaviGroup)
self.m_curActiveGo = self.m_widgetBlueprintRight.gameObject
self.m_curActiveWeight = self.m_widgetBlueprintRight
self.m_inAnimationType = "sns_friendblueprintitem_leftin"
elseif message.type == ChatType.SocialBuilding then
if not self.m_widgetSocialBuildingRight then
self.m_widgetSocialBuildingRight = self:_CreateWidget("SNSFriendSocialBuilding", self.view.rightContent)
end
self.m_widgetSocialBuildingRight:InitSNSFriendSocialBuilding(message, dialogContentNaviGroup)
self.m_curActiveGo = self.m_widgetSocialBuildingRight.gameObject
self.m_curActiveWeight = self.m_widgetSocialBuildingRight
self.m_inAnimationType = "sns_friendsociabuilding_leftin"
end
else
self.m_showLeft = true
self.view.contentOtherNode.gameObject:SetActive(true)
self.view.leftPlayerHead:UpdateHideLevelTxt(true)
self.view.leftPlayerHead:UpdateHideSignature(true)
self.view.leftPlayerHead:InitCommonPlayerHeadByRoleId(showRoleId, function()
FriendUtils.FRIEND_CELL_HEAD_FUNC.BUSINESS_CARD_PHASE(message.ownerId).action()
end)
if message.type == ChatType.Text then
if not self.m_widgetTextLeft then
self.m_widgetTextLeft = self:_CreateWidget("SNSFriendChatTextLeft", self.view.leftContent)
end
local success, info = GameInstance.player.friendChatSystem.m_uniq2chatText:TryGetValue(message.textId)
local showText = ""
if success then
local haveText, tableData = Tables.friendChatTextTable:TryGetValue(info.textName)
if haveText then
showText = tableData.messageText
else
showText = Language.LUA_FRIEND_CHAT_INVALID_TEXT
end
else
showText = Language.LUA_FRIEND_CHAT_INVALID_TEXT
end
self.m_widgetTextLeft:InitSNSFriendChatTextLeft(showText)
self.m_curActiveGo = self.m_widgetTextLeft.gameObject
self.m_curActiveWeight = self.m_widgetTextLeft
self.m_inAnimationType = "normal"
elseif message.type == ChatType.Emotion then
if not self.m_widgetEmotionLeft then
self.m_widgetEmotionLeft = self:_CreateWidget("SNSFriendChatEmotionLeft", self.view.leftContent)
end
local success, info = GameInstance.player.friendChatSystem.m_uniq2chatEmotion:TryGetValue(message.emojiId)
local showImg = ""
if success then
showImg = info.emotionImgPath
end
self.m_widgetEmotionLeft:InitSNSFriendChatEmotionLeft(showImg)
self.m_curActiveGo = self.m_widgetEmotionLeft.gameObject
self.m_curActiveWeight = self.m_widgetEmotionLeft
self.m_inAnimationType = "normal"
elseif message.type == ChatType.Blueprint then
if not self.m_widgetBlueprintLeft then
self.m_widgetBlueprintLeft = self:_CreateWidget("SNSFriendBlueprintItem", self.view.leftContent)
end
self.m_widgetBlueprintLeft:InitSNSFriendBlueprintItem(message, dialogContentNaviGroup)
self.m_curActiveGo = self.m_widgetBlueprintLeft.gameObject
self.m_curActiveWeight = self.m_widgetBlueprintLeft
self.m_inAnimationType = "sns_friendblueprintitem_in"
elseif message.type == ChatType.SocialBuilding then
if not self.m_widgetSocialBuildingLeft then
self.m_widgetSocialBuildingLeft = self:_CreateWidget("SNSFriendSocialBuilding", self.view.leftContent)
end
self.m_widgetSocialBuildingLeft:InitSNSFriendSocialBuilding(message, dialogContentNaviGroup)
self.m_curActiveGo = self.m_widgetSocialBuildingLeft.gameObject
self.m_curActiveWeight = self.m_widgetSocialBuildingLeft
self.m_inAnimationType = "sns_friendsociabuilding_in"
end
end
if self.m_curActiveGo then
self.m_curActiveGo:SetActiveIfNecessary(true)
end
if callback then
callback()
end
end
SNSFriendDialogContentCell.UpdateInfoFromServer = HL.Method(HL.Any)<< function(self, showRoleId)
if showRoleId == nil then
return
end
local msg = self.m_message
if msg.type == ChatType.Blueprint or msg.type == ChatType.SocialBuilding then
GameInstance.player.friendChatSystem:QueryAdd(showRoleId, msg.msgIndex, msg.type, msg.bpSharedCode, msg.sbCreatorId)
end
end
SNSFriendDialogContentCell.CheckCanJumpIn = HL.Method().Return(HL.Boolean)<< function(self)
if not self.m_curActiveWeight then
return false
end
if self.m_message.type == ChatType.Blueprint then
return self.m_curActiveWeight:CheckCanJumpIn()
elseif self.m_message.type == ChatType.SocialBuilding then
return self.m_curActiveWeight:CheckCanJumpIn()
end
return false
end
SNSFriendDialogContentCell.SetTargetNode = HL.Method()<< function(self)
if not self.m_curActiveWeight then
return
end
self.m_curActiveWeight:SetTargetNode()
end
SNSFriendDialogContentCell.PlayInAnimation = HL.Method()<< function(self)
if not self.m_curActiveWeight then
return
end
if self.m_curActiveWeight.view.animationWrapper then
if self.m_inAnimationType == "normal" then
self.m_curActiveWeight.view.animationWrapper:PlayInAnimation()
else
self.m_curActiveWeight.view.animationWrapper:PlayWithTween(self.m_inAnimationType)
end
end
end
SNSFriendDialogContentCell.UpdateDataShowInfo = HL.Method()<< function(self)
if not self.m_curActiveWeight then
return
end
if self.m_message.type == ChatType.Blueprint then
self.m_curActiveWeight:UpdateBluePrintShow(self.m_message)
elseif self.m_message.type == ChatType.SocialBuilding then
self.m_curActiveWeight:UpdateSocialBuildingShow(self.m_message)
end
end
SNSFriendDialogContentCell._CloseAllChildWidget = HL.Method()<< function(self)
self:_CloseOneChildWidget(self.m_curActiveGo, true)
self:_CloseOneChildWidget(self.m_widgetTextLeft, false)
self:_CloseOneChildWidget(self.m_widgetTextRight, false)
self:_CloseOneChildWidget(self.m_widgetEmotionLeft, false)
self:_CloseOneChildWidget(self.m_widgetEmotionRight, false)
self:_CloseOneChildWidget(self.m_widgetBlueprintLeft, false)
self:_CloseOneChildWidget(self.m_widgetBlueprintRight, false)
self:_CloseOneChildWidget(self.m_widgetSocialBuildingLeft, false)
self:_CloseOneChildWidget(self.m_widgetSocialBuildingRight, false)
end
SNSFriendDialogContentCell._CloseOneChildWidget = HL.Method(HL.Any, HL.Boolean)<< function(self, widget, isObj)
if widget then
if isObj then
widget:SetActiveIfNecessary(false)
else
widget.gameObject:SetActiveIfNecessary(false)
end
end
end
SNSFriendDialogContentCell._CreateWidget = HL.Method(HL.String, HL.Any).Return(HL.Any)
<< function(self, widgetName, parentNode)
local go = self:_CreateGameObject(widgetName, parentNode)
return Utils.wrapLuaNode(go)
end
SNSFriendDialogContentCell._CreateGameObject = HL.Method(HL.String, HL.Any).Return(GameObject)
<< function(self, widgetName, parentNode)
local path = string.format(UIConst.UI_SNS_FRIEND_CHAT_WIDGETS_PATH, widgetName)
local goAsset = self:LoadGameObject(path)
local go = CSUtils.CreateObject(goAsset, parentNode)
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero
return go
end
HL.Commit(SNSFriendDialogContentCell)
return SNSFriendDialogContentCell