PGRData/Script/matrix/xui/xuistronghold/XUiGridStrongholdCharacter.lua
2024-09-01 22:49:41 +02:00

297 lines
No EOL
11 KiB
Lua

local mathFloor = math.floor
local IsNumberValid = XTool.IsNumberValid
local CsXTextManagerGetText = CsXTextManagerGetText
local XUiGridStrongholdCharacter = XClass(nil, "XUiGridStrongholdCharacter")
function XUiGridStrongholdCharacter:Ctor(ui)
---@type XCharacterAgency
local ag = XMVCA:GetAgency(ModuleId.XCharacter)
self.CharacterAgency = ag
self.GameObject = ui.gameObject
self.Transform = ui.transform
XTool.InitUiObject(self)
self:SetSelect(false)
end
function XUiGridStrongholdCharacter:Refresh(characterId, groupId, teamId, teamList, playerId)
self.CharacterId = characterId
self.GroupId = groupId
self.TeamId = teamId
self.TeamList = teamList
self.PlayerId = playerId
self.TxtPlayerName.gameObject:SetActiveEx(IsNumberValid(playerId))
self:UpdateBaseInfo()
if XRobotManager.CheckIsRobotId(characterId) then
self:UpdateRobot()
elseif IsNumberValid(playerId) then
self:UpdateAssistant()
else
self:UpdateCharacter()
end
end
function XUiGridStrongholdCharacter:UpdateBaseInfo()
-- 独域
self.PanelUniframe.gameObject:SetActiveEx(self.CharacterAgency:GetIsIsomer(self.CharacterId))
-- 初始品质
self.PanelInitQuality.gameObject:SetActiveEx(true)
local initQuality = self.CharacterAgency:GetCharacterInitialQuality(self.CharacterId)
local icon = self.CharacterAgency:GetModelCharacterQualityIcon(initQuality).IconCharacterInit
self.ImgInitQuality:SetSprite(icon)
-- 相同构造体
if self.PanelSameRole then
local curTeam = self.TeamList[self.TeamId]
local pos = curTeam:GetSameCharacterPos(self.CharacterId)
local inTeamId = XDataCenter.StrongholdManager.GetCharacterInTeamId(self.CharacterId, self.TeamList)
local isShowSame = inTeamId ~= self.TeamId and XTool.IsNumberValid(pos)
self.PanelSameRole.gameObject:SetActiveEx(isShowSame)
end
end
function XUiGridStrongholdCharacter:UpdateRobot()
local teamList = self.TeamList
local groupId = self.GroupId
local robotId = self.CharacterId
local robotTemplate = XRobotManager.GetRobotTemplate(robotId)
local characterId = XRobotManager.GetCharacterId(robotId)
if self.PanelCharElement then
local detailConfig = XCharacterConfigs.GetCharDetailTemplate(characterId)
local elementList = detailConfig.ObtainElementList
for i = 1, 3 do
local rImg = self["RImgCharElement" .. i]
if elementList[i] then
rImg.gameObject:SetActiveEx(true)
local elementConfig = XCharacterConfigs.GetCharElement(elementList[i])
rImg:SetRawImage(elementConfig.Icon)
else
rImg.gameObject:SetActiveEx(false)
end
end
end
if self.RImgHeadIcon then
local head = self.CharacterAgency:GetCharSmallHeadIcon(characterId, true)
self.RImgHeadIcon:SetRawImage(head)
end
if self.TxtLevel then
local level = robotTemplate.CharacterLevel
self.TxtLevel.text = level
end
if self.PanelFight then
local ability = XRobotManager.GetRobotAbility(robotId)
self.TxtFight.text = mathFloor(ability)
self.PanelFight.gameObject:SetActiveEx(true)
end
if self.RImgQuality then
local quality = XCharacterConfigs.GetCharacterQualityIcon(robotTemplate.CharacterQuality)
self.RImgQuality:SetRawImage(quality)
end
local isInTeam = XDataCenter.StrongholdManager.CheckInTeamList(robotId, teamList)
local isInTeamLock = XDataCenter.StrongholdManager.CheckInTeamListLock(groupId, robotId, teamList)
if self.ImgInTeam then
local showInTeam = not isInTeamLock and isInTeam
if showInTeam then
local oldTeamId = XDataCenter.StrongholdManager.GetCharacterInTeamId(robotId, teamList)
self.TxtInTeam.text = CsXTextManagerGetText("StrongholdTeamIndex", oldTeamId)
self.ImgInTeam.gameObject:SetActiveEx(true)
else
self.ImgInTeam.gameObject:SetActiveEx(false)
end
end
if self.PanelInTeamLock then
self.PanelInTeamLock.gameObject:SetActiveEx(isInTeamLock)
end
if self.PanelTeamSupport then
self.PanelTeamSupport.gameObject:SetActiveEx(false)
end
if self.PanelTry then
self.PanelTry.gameObject:SetActiveEx(true)
end
if self.PanelRecommend then
local stageId = groupId and XDataCenter.StrongholdManager.GetGroupStageId(groupId, self.TeamId) or nil
local isStageRecomend = XFubenConfigs.IsStageRecommendCharacterType(stageId, characterId)
self.PanelRecommend.gameObject:SetActiveEx(isStageRecomend)
end
end
function XUiGridStrongholdCharacter:UpdateAssistant()
local teamList = self.TeamList
local groupId = self.GroupId
local playerId = self.PlayerId
local assistantInfo = XDataCenter.StrongholdManager.GetAssistantInfo(playerId)
local character = assistantInfo.Character
local characterId = character.Id
if self.TxtPlayerName then
self.TxtPlayerName.text = assistantInfo.Name or ""
end
if self.PanelCharElement then
local detailConfig = XCharacterConfigs.GetCharDetailTemplate(characterId)
local elementList = detailConfig.ObtainElementList
for i = 1, 3 do
local rImg = self["RImgCharElement" .. i]
if elementList[i] then
rImg.gameObject:SetActiveEx(true)
local elementConfig = XCharacterConfigs.GetCharElement(elementList[i])
rImg:SetRawImage(elementConfig.Icon)
else
rImg.gameObject:SetActiveEx(false)
end
end
end
if self.RImgHeadIcon then
local headInfo = character.CharacterHeadInfo or {}
local head = self.CharacterAgency:GetCharSmallHeadIcon(characterId, true, headInfo.HeadFashionId, headInfo.HeadFashionType)
self.RImgHeadIcon:SetRawImage(head)
end
if self.TxtLevel then
local level = character.Level
self.TxtLevel.text = level
end
if self.PanelFight then
local ability = character.Ability
self.TxtFight.text = mathFloor(ability)
self.PanelFight.gameObject:SetActiveEx(true)
end
if self.RImgQuality then
self.RImgQuality:SetRawImage(XCharacterConfigs.GetCharacterQualityIcon(character.Quality))
end
local isInTeam = XDataCenter.StrongholdManager.CheckInTeamList(characterId, teamList, playerId)
local isInTeamLock = XDataCenter.StrongholdManager.CheckInTeamListLock(groupId, characterId, teamList, playerId)
if self.ImgInTeam then
local showInTeam = not isInTeamLock and isInTeam
if showInTeam then
local oldTeamId = XDataCenter.StrongholdManager.GetCharacterInTeamId(characterId, teamList, playerId)
self.TxtInTeam.text = CsXTextManagerGetText("StrongholdTeamIndex", oldTeamId)
self.ImgInTeam.gameObject:SetActiveEx(true)
else
self.ImgInTeam.gameObject:SetActiveEx(false)
end
end
if self.PanelInTeamLock then
self.PanelInTeamLock.gameObject:SetActiveEx(isInTeamLock)
end
if self.PanelTeamSupport then
self.PanelTeamSupport.gameObject:SetActiveEx(false)
end
if self.PanelTry then
self.PanelTry.gameObject:SetActiveEx(false)
end
if self.PanelRecommend then
local stageId = groupId and XDataCenter.StrongholdManager.GetGroupStageId(groupId, self.TeamId) or nil
local isStageRecomend = XFubenConfigs.IsStageRecommendCharacterType(stageId, characterId)
self.PanelRecommend.gameObject:SetActiveEx(isStageRecomend)
end
end
function XUiGridStrongholdCharacter:UpdateCharacter()
local teamId = self.TeamId
local teamList = self.TeamList
local groupId = self.GroupId
local characterId = self.CharacterId
local character = self.CharacterAgency:GetCharacter(characterId)
if self.PanelCharElement then
local detailConfig = XCharacterConfigs.GetCharDetailTemplate(characterId)
local elementList = detailConfig.ObtainElementList
for i = 1, 3 do
local rImg = self["RImgCharElement" .. i]
if elementList[i] then
rImg.gameObject:SetActiveEx(true)
local elementConfig = XCharacterConfigs.GetCharElement(elementList[i])
rImg:SetRawImage(elementConfig.Icon)
else
rImg.gameObject:SetActiveEx(false)
end
end
end
if self.RImgHeadIcon then
self.RImgHeadIcon:SetRawImage(self.CharacterAgency:GetCharSmallHeadIcon(characterId))
end
if self.TxtLevel then
self.TxtLevel.text = character.Level
end
if self.PanelFight then
self.PanelFight.gameObject:SetActiveEx(true)
local ability = self.CharacterAgency:GetCharacterAbilityById(characterId)
self.TxtFight.text = mathFloor(ability)
end
if self.RImgQuality then
self.RImgQuality:SetRawImage(XCharacterConfigs.GetCharacterQualityIcon(character.Quality))
end
local isInTeam = XDataCenter.StrongholdManager.CheckInTeamList(characterId, teamList)
local isInTeamLock = XDataCenter.StrongholdManager.CheckInTeamListLock(groupId, characterId, teamList)
if self.ImgInTeam then
local showInTeam = not isInTeamLock and isInTeam
if showInTeam then
local oldTeamId, oldTeamPos = XDataCenter.StrongholdManager.GetCharacterInTeamId(characterId, teamList)
local desc = CsXTextManagerGetText("StrongholdTeamIndex", oldTeamId)
if IsNumberValid(groupId) then
local requireTeamMemberDic = XDataCenter.StrongholdManager.GetGroupRequireTeamMemberDic(groupId)
local memberNum = requireTeamMemberDic[teamId]
if memberNum < oldTeamPos and oldTeamId == teamId then
desc = CsXTextManagerGetText("StrongholdGridInPrefab")
end
end
self.TxtInTeam.text = desc
self.ImgInTeam.gameObject:SetActiveEx(true)
else
self.ImgInTeam.gameObject:SetActiveEx(false)
end
end
if self.PanelInTeamLock then
self.PanelInTeamLock.gameObject:SetActiveEx(isInTeamLock)
end
if self.PanelTeamSupport then
local IsElectric = XDataCenter.StrongholdManager.CheckInElectricTeam(characterId)
self.PanelTeamSupport.gameObject:SetActiveEx(IsElectric)
end
if self.PanelTry then
self.PanelTry.gameObject:SetActiveEx(false)
end
if self.PanelRecommend then
local stageId = groupId and XDataCenter.StrongholdManager.GetGroupStageId(groupId, self.TeamId) or nil
local isStageRecomend = XFubenConfigs.IsStageRecommendCharacterType(stageId, characterId)
self.PanelRecommend.gameObject:SetActiveEx(isStageRecomend)
end
end
function XUiGridStrongholdCharacter:SetSelect(value)
if self.PanelSelected then
self.PanelSelected.gameObject:SetActiveEx(value)
end
end
return XUiGridStrongholdCharacter