forked from endernon/PGRData
297 lines
No EOL
11 KiB
Lua
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 |