400 lines
No EOL
14 KiB
Lua
400 lines
No EOL
14 KiB
Lua
XUiGridCharacter = XClass(nil, "XUiGridCharacter")
|
|
|
|
function XUiGridCharacter:Ctor(ui, rootUi, character, clickCallback)
|
|
self.RootUi = rootUi
|
|
self.GameObject = ui.gameObject
|
|
self.Transform = ui.transform
|
|
self.Character = character
|
|
self.ClickCallback = clickCallback
|
|
self.RectTransform = ui:GetComponent("RectTransform")
|
|
|
|
---@type XCharacterAgency
|
|
local ag = XMVCA:GetAgency(ModuleId.XCharacter)
|
|
self.CharacterAgency = ag
|
|
|
|
self:InitAutoScript()
|
|
XTool.InitUiObject(self)
|
|
|
|
if self.PanelStaminaBar then
|
|
self.PanelStaminaBar.gameObject:SetActiveEx(false)
|
|
end
|
|
if self.PanelTeamBuff then
|
|
self.PanelTeamBuff.gameObject:SetActiveEx(false)
|
|
end
|
|
self:SetSelect(false)
|
|
self:SetInTeam(false)
|
|
self:UpdateGrid()
|
|
end
|
|
|
|
function XUiGridCharacter:Init(rootUi)
|
|
self.RootUi = rootUi
|
|
end
|
|
|
|
-- auto
|
|
-- Automatic generation of code, forbid to edit
|
|
function XUiGridCharacter:InitAutoScript()
|
|
self:AutoInitUi()
|
|
self.SpecialSoundMap = {}
|
|
self:AutoAddListener()
|
|
end
|
|
|
|
function XUiGridCharacter:AutoInitUi()
|
|
self.BtnCharacter = XUiHelper.TryGetComponent(self.Transform, "BtnCharacter", "Button")
|
|
self.PanelSelected = XUiHelper.TryGetComponent(self.Transform, "PanelSelected", nil)
|
|
self.ImgSelected = XUiHelper.TryGetComponent(self.Transform, "PanelSelected/ImgSelected", "Image")
|
|
self.PanelLevel = XUiHelper.TryGetComponent(self.Transform, "PanelLevel", nil)
|
|
self.TxtLevel = XUiHelper.TryGetComponent(self.Transform, "PanelLevel/TxtLevel", "Text")
|
|
self.TxtGradeLevel = XUiHelper.TryGetComponent(self.Transform, "TxtGradeLevel", "Text")
|
|
self.PanelGrade = XUiHelper.TryGetComponent(self.Transform, "PanelGrade", nil)
|
|
self.RImgGrade = XUiHelper.TryGetComponent(self.Transform, "PanelGrade/RImgGrade", "RawImage")
|
|
self.RImgQuality = XUiHelper.TryGetComponent(self.Transform, "RImgQuality", "RawImage")
|
|
self.ImgLock = XUiHelper.TryGetComponent(self.Transform, "ImgLock", "Image")
|
|
self.ImgLimited = XUiHelper.TryGetComponent(self.Transform, "ImgLimited", "Image")
|
|
self.PanelHead = XUiHelper.TryGetComponent(self.Transform, "PanelHead", nil)
|
|
self.RImgHeadIcon = XUiHelper.TryGetComponent(self.Transform, "PanelHead/RImgHeadIcon", "RawImage")
|
|
self.ImgHeadIconBg = XUiHelper.TryGetComponent(self.Transform, "PanelHead/ImgHeadIconBg", "Image")
|
|
self.PanelFragment = XUiHelper.TryGetComponent(self.Transform, "PanelFragment", nil)
|
|
self.TxtCurCount = XUiHelper.TryGetComponent(self.Transform, "PanelFragment/TxtCurCount", "Text")
|
|
self.TxtNeedCount = XUiHelper.TryGetComponent(self.Transform, "PanelFragment/TxtNeedCount", "Text")
|
|
self.ImgInTeam = XUiHelper.TryGetComponent(self.Transform, "ImgInTeam", "Image")
|
|
self.TxtInTeam = XUiHelper.TryGetComponent(self.Transform, "ImgInTeam/TxtInTeam", "Text")
|
|
self.ImgRedPoint = XUiHelper.TryGetComponent(self.Transform, "ImgRedPoint", "Image")
|
|
self.ImgStaminaExpFill = XUiHelper.TryGetComponent(self.Transform, "PanelStaminaBar/ImgStaminaExpFill", "Image")
|
|
self.PanelStaminaBar = XUiHelper.TryGetComponent(self.Transform, "PanelStaminaBar", nil)
|
|
self.PanelFight = XUiHelper.TryGetComponent(self.Transform, "PanelFight", nil)
|
|
self.TxtFight = XUiHelper.TryGetComponent(self.Transform, "PanelFight/TxtFight", "Text")
|
|
self.RogueLikeUp = XUiHelper.TryGetComponent(self.Transform, "PanelRogueLikeTheme", nil)
|
|
end
|
|
|
|
function XUiGridCharacter:AutoAddListener()
|
|
self.AutoCreateListeners = {}
|
|
XUiHelper.RegisterClickEvent(self, self.BtnCharacter, self.OnBtnCharacterClick)
|
|
end
|
|
-- auto
|
|
function XUiGridCharacter:OnBtnCharacterClick()
|
|
if self.ClickCallback then
|
|
local characterId = 0
|
|
if self.Character.IsRobot then
|
|
local robotTemplate = XRobotManager.GetRobotTemplate(self.Character.Id)
|
|
characterId = robotTemplate.CharacterId
|
|
else
|
|
characterId = self.Character.Id
|
|
end
|
|
if XCharacterConfigs.IsCharacterForeShow(characterId) then
|
|
self.ClickCallback(self.Character)
|
|
else
|
|
XUiManager.TipMsg(CS.XTextManager.GetText("ComingSoon"), XUiManager.UiTipType.Tip)
|
|
end
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateStamina(curStamina, maxStamina)
|
|
if self.PanelStaminaBar then
|
|
self.PanelStaminaBar.gameObject:SetActiveEx(true)
|
|
end
|
|
self.ImgStaminaExpFill.fillAmount = curStamina / maxStamina
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateStaminaByPercent(percent)
|
|
if self.PanelStaminaBar then
|
|
self.PanelStaminaBar.gameObject:SetActiveEx(true)
|
|
end
|
|
self.ImgStaminaExpFill.fillAmount = percent * 0.01
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateGrid(character, selectCharacterId)
|
|
if character then
|
|
self.Character = character
|
|
end
|
|
if not self.Character then return end
|
|
|
|
if not self.Character.Id then
|
|
return
|
|
end
|
|
|
|
self:SetSelect(selectCharacterId == self.Character.Id)
|
|
|
|
self:UpdataBaseInfo()
|
|
if self.Character.IsRobot then
|
|
self:UpdateRobotGrid()
|
|
else
|
|
self:UpdateNormalGrid()
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:UpdataBaseInfo()
|
|
-- 独域
|
|
if self.PanelUniframe then
|
|
self.PanelUniframe.gameObject:SetActiveEx(self.CharacterAgency:GetIsIsomer(self.Character.Id))
|
|
end
|
|
|
|
-- 初始品质
|
|
if self.PanelInitQuality then
|
|
self.PanelInitQuality.gameObject:SetActiveEx(true)
|
|
local initQuality = self.CharacterAgency:GetCharacterInitialQuality(self.Character.Id)
|
|
local icon = self.CharacterAgency:GetModelCharacterQualityIcon(initQuality).IconCharacterInit
|
|
self.ImgInitQuality:SetSprite(icon)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateRobotGrid()
|
|
local robotId = self.Character.Id
|
|
local robotTemplate = XRobotManager.GetRobotTemplate(robotId)
|
|
local level = robotTemplate.CharacterLevel
|
|
local quality = XCharacterConfigs.GetCharacterQualityIcon(robotTemplate.CharacterQuality)
|
|
local head = self.CharacterAgency:GetCharSmallHeadIcon(robotTemplate.CharacterId, true)
|
|
local grade = XCharacterConfigs.GetCharGradeIcon(robotTemplate.CharacterId, robotTemplate.CharacterGrade)
|
|
local ability = self.Character.Ability or XRobotManager.GetRobotAbility(robotId)
|
|
|
|
if self.PanelLevel then
|
|
self.PanelLevel.gameObject:SetActiveEx(true)
|
|
self.TxtLevel.text = level
|
|
end
|
|
|
|
if self.PanelGrade then
|
|
self.PanelGrade.gameObject:SetActiveEx(true)
|
|
self.RImgGrade:SetRawImage(grade)
|
|
end
|
|
|
|
if self.RImgQuality then
|
|
self.RImgQuality.gameObject:SetActiveEx(true)
|
|
self.RImgQuality:SetRawImage(quality)
|
|
end
|
|
|
|
if self.PanelHead then
|
|
self.PanelHead.gameObject:SetActiveEx(true)
|
|
self.RImgHeadIcon:SetRawImage(head)
|
|
end
|
|
|
|
if self.PanelFight then
|
|
self.PanelFight.gameObject:SetActiveEx(true)
|
|
self.TxtFight.text = math.floor(ability)
|
|
end
|
|
|
|
if self.PanelCharElement then
|
|
local detailConfig = XCharacterConfigs.GetCharDetailTemplate(robotTemplate.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.PanelTry then
|
|
self.PanelTry.gameObject:SetActiveEx(not self.Character.HideTryTag)
|
|
end
|
|
|
|
if self.PanelCurrentLocation then
|
|
self.PanelCurrentLocation.gameObject:SetActiveEx(false)
|
|
end
|
|
|
|
self:CheckSameRoleTag()
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateNormalGrid()
|
|
local isOwn = self.CharacterAgency:IsOwnCharacter(self.Character.Id)
|
|
XRedPointManager.CheckOnce(self.OnCheckCharacterRedPoint, self, { XRedPointConditions.Types.CONDITION_CHARACTER }, self.Character.Id)
|
|
|
|
if self.PanelLevel then
|
|
self.PanelLevel.gameObject:SetActiveEx(isOwn)
|
|
end
|
|
|
|
if self.PanelGrade then
|
|
self.PanelGrade.gameObject:SetActiveEx(isOwn)
|
|
end
|
|
|
|
if self.RImgQuality then
|
|
self.RImgQuality.gameObject:SetActiveEx(isOwn)
|
|
end
|
|
|
|
if self.ImgLock then
|
|
self.ImgLock.gameObject:SetActiveEx(not isOwn)
|
|
end
|
|
|
|
if self.PanelFragment then
|
|
self.PanelFragment.gameObject:SetActiveEx(not isOwn)
|
|
end
|
|
|
|
if self.PanelFight then
|
|
self.TxtFight.text = math.floor(self.Character.Ability)
|
|
end
|
|
|
|
if self.PanelCharElement then
|
|
local detailConfig = XCharacterConfigs.GetCharDetailTemplate(self.Character.Id)
|
|
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 isOwn then
|
|
self:UpdateOwnInfo()
|
|
else
|
|
self:UpdateUnOwnInfo()
|
|
end
|
|
|
|
if self.PanelTry then
|
|
self.PanelTry.gameObject:SetActiveEx(false)
|
|
end
|
|
|
|
if self.PanelCurrentLocation then
|
|
self.PanelCurrentLocation.gameObject:SetActiveEx(false)
|
|
end
|
|
|
|
self:CheckSameRoleTag()
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateRecommendTag(stageId)
|
|
if self.PanelRecommend then
|
|
local isStageRecomend = XFubenConfigs.IsStageRecommendCharacterType(stageId, self.Character.Id)
|
|
self.PanelRecommend.gameObject:SetActiveEx(isStageRecomend)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateUnOwnInfo()
|
|
local characterId = self.Character.Id
|
|
|
|
if self.TxtCurCount then
|
|
self.TxtCurCount.text = self.CharacterAgency:GetCharUnlockFragment(characterId)
|
|
end
|
|
|
|
local bornQuality = XCharacterConfigs.GetCharMinQuality(characterId)
|
|
|
|
if self.TxtNeedCount then
|
|
local characterType = XCharacterConfigs.GetCharacterType(characterId)
|
|
self.TxtNeedCount.text = XCharacterConfigs.GetComposeCount(characterType, bornQuality)
|
|
end
|
|
|
|
if self.RImgHeadIcon then
|
|
self.RImgHeadIcon:SetRawImage(self.CharacterAgency:GetCharSmallHeadIcon(characterId))
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:UpdateOwnInfo()
|
|
if self.TxtLevel then
|
|
self.TxtLevel.text = self.Character.Level
|
|
end
|
|
|
|
if self.TxtGradeLevel then
|
|
self.TxtGradeLevel.text = XCharacterConfigs.GetCharGradeName(self.Character.Id, self.Character.Grade)
|
|
end
|
|
|
|
if self.RImgGrade then
|
|
self.RImgGrade:SetRawImage(XCharacterConfigs.GetCharGradeIcon(self.Character.Id, self.Character.Grade))
|
|
end
|
|
|
|
if self.RImgQuality then
|
|
self.RImgQuality:SetRawImage(XCharacterConfigs.GetCharacterQualityIcon(self.Character.Quality))
|
|
end
|
|
|
|
if self.RImgHeadIcon then
|
|
self.RImgHeadIcon:SetRawImage(self.CharacterAgency:GetCharSmallHeadIcon(self.Character.Id))
|
|
end
|
|
|
|
if self.TxtTradeName then
|
|
self.TxtTradeName.text = XCharacterConfigs.GetCharacterTradeName(self.Character.Id)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:SetTeamBuff(isShow)
|
|
if not self.PanelTeamBuff then
|
|
return
|
|
end
|
|
self.PanelTeamBuff.gameObject:SetActiveEx(isShow)
|
|
end
|
|
|
|
function XUiGridCharacter:OnCheckCharacterRedPoint(count)
|
|
if self.ImgRedPoint then
|
|
self.ImgRedPoint.gameObject:SetActiveEx(count >= 0)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:SetSelect(isSelect)
|
|
if self.ImgSelected then
|
|
self.ImgSelected.gameObject:SetActiveEx(isSelect)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:SetInTeam(isInTeam, inTeamText, pos)
|
|
if self.ImgInTeam then
|
|
if isInTeam then
|
|
if inTeamText and self.TxtInTeam then
|
|
self.TxtInTeam.text = inTeamText
|
|
end
|
|
self.ImgInTeam.gameObject:SetActiveEx(true)
|
|
|
|
if self.PanelCurrentLocation then
|
|
if XLuaUiManager.IsUiLoad("UiRoomTeamPrefab") and pos then
|
|
self.Image1.color = XDataCenter.TeamManager.GetTeamMemberColor(pos)
|
|
self.Image2.color = XDataCenter.TeamManager.GetTeamMemberColor(pos)
|
|
self.PanelCurrentLocation.gameObject:SetActiveEx(true)
|
|
end
|
|
end
|
|
else
|
|
self.ImgInTeam.gameObject:SetActiveEx(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:SetIsLock(isLock)
|
|
if self.ImgLock then
|
|
self.ImgLock.gameObject:SetActiveEx(isLock)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:SetLimited(isLimited)
|
|
if self.ImgLimited then
|
|
self.ImgLimited.gameObject:SetActiveEx(isLimited)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:SetArrowUp(isUp)
|
|
if self.RogueLikeUp then
|
|
self.RogueLikeUp.gameObject:SetActiveEx(isUp)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:Reset()
|
|
self.GameObject:SetActiveEx(false)
|
|
self:SetSelect(false)
|
|
self:SetInTeam(false)
|
|
end
|
|
|
|
function XUiGridCharacter:SetPosition(x, y)
|
|
self.RectTransform.anchoredPosition = CS.UnityEngine.Vector2(x, y)
|
|
end
|
|
|
|
function XUiGridCharacter:SetSameRoleTag(isShow, showText)
|
|
if self.PanelSameRole then
|
|
self.PanelSameRole.gameObject:SetActiveEx(isShow)
|
|
end
|
|
if self.TextSameRole and isShow then
|
|
local characterId = self.Character.Id
|
|
local characterType = XCharacterConfigs.GetCharacterType(characterId)
|
|
local characterTypeName = characterType == XCharacterConfigs.CharacterType.Isomer and CS.XTextManager.GetText("TypeIsomer") or CS.XTextManager.GetText("TypeCharacter")
|
|
self.TextSameRole.text = showText or CS.XTextManager.GetText("TeamGridSameRole", characterTypeName)
|
|
end
|
|
end
|
|
|
|
function XUiGridCharacter:CheckSameRoleTag()
|
|
-- 样式与“编队中有相同构造体”提示相同,居中横幅
|
|
if self.Character.ShowText then
|
|
self.PanelSameRole.gameObject:SetActiveEx(true)
|
|
self.TextSameRole.text = self.Character.ShowText
|
|
else
|
|
self:SetSameRoleTag(false)
|
|
end
|
|
end |