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

156 lines
4.3 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.FacSourceDetails
FacSourceDetailsCtrl = HL.Class('FacSourceDetailsCtrl', uiCtrl.UICtrl)
FacSourceDetailsCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_FRIEND_CELL_INFO_CHANGE] = "_UpdateView",
}
FacSourceDetailsCtrl.m_arg = HL.Field(HL.Table)
FacSourceDetailsCtrl.m_nodeId = HL.Field(HL.Number) << -1
FacSourceDetailsCtrl.m_social = HL.Field(CS.Beyond.Gameplay.RemoteFactory.ServerChapterInfo.ComponentHandler.Payload_Social)
FacSourceDetailsCtrl.m_stabilitySliderTween = HL.Field(HL.Any)
FacSourceDetailsCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.btnClose.onClick:AddListener(function()
self:PlayAnimationOutAndClose()
end)
self.view.likeBtn.onClick:AddListener(function()
self:_LikeSocialBuilding()
end)
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
self.m_arg = arg
self.m_nodeId = arg.nodeId
self.m_social = FactoryUtils.getBuildingComponentPayload_Social(arg.nodeId)
end
FacSourceDetailsCtrl.OnShow = HL.Override() << function(self)
self:_UpdateView(true)
end
FacSourceDetailsCtrl.OnClose = HL.Override() << function(self)
self:_StopStabilityAnimation()
end
FacSourceDetailsCtrl._UpdateView = HL.Method(HL.Opt(HL.Boolean)) << function(self, updateStability)
local social = self.m_social
local preset = social.preset
local ownerId = social.ownerId
local node = FactoryUtils.getBuildingNodeHandler(self.m_nodeId)
local buildingData = Tables.factoryBuildingTable:GetValue(node.templateId)
self.view.npcListCell.rectTransform.gameObject:SetActive(preset)
self.view.friendListCell.view.gameObject:SetActive(not preset)
local ownerName = ""
if preset then
local npcData = self.m_arg.npcData
ownerName = npcData.name
self.view.npcListCell.commonPlayerHead:InitCommonPlayerHead(npcData.avatarPath, npcData.avatarFramePath,
false, 0, npcData.name, npcData.signature)
else
local ownerInfo = self.m_arg.ownerInfo
ownerName = ownerInfo and ownerInfo.name or ""
local config = FriendUtils.getFriendCellInitConfigByRoleId(ownerId)
config = config and lume.copy(config) or {}
config.stateName = FriendUtils.FRIEND_CELL_INIT_CONFIG.Stranger.stateName
self.view.friendListCell:RefreshFriendListCell(ownerId, config, "")
self.view.friendListCell.m_buildNodeId = self.m_nodeId
self.view.friendListCell.view.commonPlayerHead:SetClick(function()
Notify(MessageConst.ON_OPEN_BUSINESS_CARD_PREVIEW, { roleId = ownerId, bId = self.m_nodeId })
end)
end
self.view.titleText.text = string.isEmpty(ownerName)
and buildingData.name
or string.format(Language.LUA_FAC_SOCIAL_BUILDING_SOURCE_TITLE, ownerName, buildingData.name)
if updateStability then
self.view.stabilitySlider.value = FactoryUtils.getSocialBuildingStability(self.m_nodeId)
end
self.view.likeValueText.text = social.like
local canLike = FactoryUtils.canLikeSocialBuilding(self.m_nodeId)
self.view.likeBtn.interactable = canLike
self.view.likeBtnStateCtrl:SetState(canLike and "NormalState" or "DisableState")
Notify(MessageConst.REFRESH_CONTROLLER_HINT)
end
FacSourceDetailsCtrl._LikeSocialBuilding = HL.Method() << function(self)
FactoryUtils.likeSocialBuilding(self.m_nodeId, function()
self:_PlayStabilityAnimation()
self:_UpdateView(false)
end)
end
FacSourceDetailsCtrl._PlayStabilityAnimation = HL.Method() << function(self)
self:_StopStabilityAnimation()
self:PlayAnimation("facsourcedetails_repairdone")
local newStability = FactoryUtils.getSocialBuildingStability(self.m_nodeId)
self.m_stabilitySliderTween = DOTween.To(function()
return self.view.stabilitySlider.value
end, function(value)
self.view.stabilitySlider.value = value
end, newStability, self.view.config.STABILITY_SLIDER_TWEEN_DURATION)
end
FacSourceDetailsCtrl._StopStabilityAnimation = HL.Method() << function(self)
if self.m_stabilitySliderTween then
self.m_stabilitySliderTween:Kill()
self.m_stabilitySliderTween = nil
end
end
HL.Commit(FacSourceDetailsCtrl)