forked from endernon/PGRData
297 lines
No EOL
13 KiB
Lua
297 lines
No EOL
13 KiB
Lua
-- 超解
|
||
local XUiPanelExhibitionSuperInfo = XClass(nil, "XUiPanelExhibitionSuperInfo")
|
||
local XUiGridCondition = require("XUi/XUiExhibition/XUiGridCondition")
|
||
local ConditionDesNum = 3
|
||
local CanRing = nil
|
||
|
||
local GetAureoleIndexInListById = function (aureoleId, list)
|
||
for k, v in pairs(list) do
|
||
if v.Id == aureoleId then
|
||
return k
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiPanelExhibitionSuperInfo:Ctor(ui, rootUi)
|
||
self.GameObject = ui.gameObject
|
||
self.Transform = ui.transform
|
||
self.RootUi = rootUi
|
||
XTool.InitUiObject(self)
|
||
|
||
XUiHelper.RegisterClickEvent(self, self.BtnOccupy, function () XDataCenter.FubenAwarenessManager.OpenUi() end)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnBreak, self.OnBtnBreakClick)
|
||
end
|
||
|
||
-- 摄像机对准终解环
|
||
function XUiPanelExhibitionSuperInfo:SetCameraToAureole(flag)
|
||
if not self.Character then
|
||
return
|
||
end
|
||
|
||
local root3dUi = self.RootUi.UiModelGo.transform
|
||
local charaModel = self.RootUi.PanelRoleModel:GetChild(0) -- 拿到角色模型的对象 root:FindTransform
|
||
|
||
local targetCamera = root3dUi:FindTransform("AureolenNearCamera")
|
||
targetCamera.gameObject:SetActiveEx(flag)
|
||
|
||
local rootName, _ = XDataCenter.FashionManager.GetFashionLiberationEffectRootAndPath(self.Character.FashionId) -- 获取该角色手环挂点名字
|
||
local targetTrans = charaModel.transform:FindTransform(rootName) -- 拿到要对准的目标节点
|
||
local targetTransPos = targetTrans.position
|
||
|
||
local Vector3 = CS.UnityEngine.Vector3(targetTransPos.x + 0.12, targetTransPos.y, targetCamera.position.z)
|
||
targetCamera.position = Vector3
|
||
end
|
||
|
||
-- 自定义终解环样式
|
||
function XUiPanelExhibitionSuperInfo:SetLiberationEffect(aureoleId)
|
||
if not CanRing then
|
||
return
|
||
end
|
||
|
||
if not self.Character then
|
||
return
|
||
end
|
||
|
||
-- 刷新手环
|
||
local rootName, _ = XDataCenter.FashionManager.GetFashionLiberationEffectRootAndPath(self.Character.FashionId) -- 获取该角色手环挂点名字
|
||
local modelId = XDataCenter.CharacterManager.GetCharLiberationLevelModelId(self.CharacterId, XCharacterConfigs.GrowUpLevel.Super)
|
||
self.RootUi.RoleModelPanel:SetLiberationEffect(modelId, rootName, aureoleId, self.CharacterId)
|
||
end
|
||
|
||
-- exhibitionRewardConfig 是 ExhibitionReward.tab的数据 这个是share表
|
||
function XUiPanelExhibitionSuperInfo:Refresh(characterId, exhibitionRewardConfig)
|
||
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
|
||
local levelId = exhibitionRewardConfig.LevelId
|
||
local currLevel = XDataCenter.ExhibitionManager.GetCharacterGrowUpLevel(characterId, true)
|
||
local isSuper = currLevel >= XCharacterConfigs.GrowUpLevel.Super
|
||
|
||
self.CharacterId = characterId
|
||
self.ExhibitionRewardConfig = exhibitionRewardConfig
|
||
self.Character = character
|
||
self.TxtTitle.text = XCharacterConfigs.GetCharLiberationLevelTitle(characterId, levelId) -- 这个是拆出来的前端表,和实参里的config主键一样
|
||
self.TxtDesc.text = XCharacterConfigs.GetCharLiberationLevelDesc(characterId, levelId)
|
||
|
||
local passed = true
|
||
self.ConditionGrids = self.ConditionGrids or {}
|
||
local conditionIds = exhibitionRewardConfig.ConditionIds
|
||
for i = 1, ConditionDesNum do
|
||
local conditionGrid = self.ConditionGrids[i]
|
||
if not conditionGrid then
|
||
conditionGrid = XUiGridCondition.New(self["GridCondition" .. i])
|
||
self.ConditionGrids[i] = conditionGrid
|
||
end
|
||
|
||
local conditionId = conditionIds[i]
|
||
local subPassed = conditionGrid:Refresh(conditionId, characterId)
|
||
passed = passed and subPassed
|
||
end
|
||
|
||
-- 环
|
||
local gridRing = self.GridRing
|
||
if not gridRing then
|
||
local uiObject = self.GridSupersolution
|
||
gridRing = uiObject
|
||
self.GridRing = gridRing
|
||
end
|
||
local currLiberateAureoleId = character.LiberateAureoleId
|
||
local isAurole = XTool.IsNumberValid(XExhibitionConfigs.GetCharacterExhibitonLimitCfgByCharacterId(characterId).SetAureoleId)
|
||
gridRing.gameObject:SetActiveEx(isAurole)
|
||
CanRing = isAurole
|
||
if isAurole then
|
||
local allCurrCharaAureList = XExhibitionConfigs.GetAureoleListByCharacterId(characterId) -- 拿到该角色拥有的所有超解环列表
|
||
local currIndex = 1
|
||
if XTool.IsNumberValid(currLiberateAureoleId) then -- 如果设置过超解环
|
||
currIndex = GetAureoleIndexInListById(currLiberateAureoleId, allCurrCharaAureList) or currIndex
|
||
else -- 如果没设置过超解环,则展示默认时装的终解环
|
||
local aureoleId = XFashionConfigs.GetFashionCfgById(character.FashionId).AureoleId
|
||
local tempIndex = GetAureoleIndexInListById(aureoleId, allCurrCharaAureList)
|
||
if tempIndex then
|
||
currIndex = tempIndex
|
||
currLiberateAureoleId = aureoleId
|
||
end
|
||
end
|
||
gridRing:GetObject("RImgQiu"):SetRawImage(allCurrCharaAureList[currIndex].Icon)
|
||
gridRing:GetObject("Red").gameObject:SetActiveEx(false)
|
||
local btn = gridRing:GetObject("BtnReplace")
|
||
btn:SetDisable(not isSuper)
|
||
XUiHelper.RegisterClickEvent(self, btn, function ()
|
||
-- 确认选择按钮回调
|
||
local confirmCb = function (aureoleId)
|
||
local aureoleCfg = allCurrCharaAureList[currIndex]
|
||
if aureoleId == aureoleCfg.Id then
|
||
return
|
||
end
|
||
|
||
local targetAureoleCfg = XFashionConfigs.GetAllConfigs(XFashionConfigs.TableKey.FashionAureole)[aureoleId]
|
||
if not XTool.IsTableEmpty(targetAureoleCfg.Condition) then
|
||
for k, conditionId in pairs(targetAureoleCfg.Condition) do
|
||
local res, desc = XConditionManager.CheckCondition(conditionId, characterId)
|
||
if not res then
|
||
XUiManager.TipError(conditionId..desc)
|
||
return
|
||
end
|
||
end
|
||
end
|
||
|
||
XDataCenter.ExhibitionManager.CharacterSetLiberateAureoleIdRequest(characterId, aureoleId, function ()
|
||
self:Refresh(characterId, exhibitionRewardConfig)
|
||
end)
|
||
end
|
||
-- 点击格子回调
|
||
local selectCb = function (aureoleId)
|
||
self:SetLiberationEffect(aureoleId)
|
||
end
|
||
local openCb = function ()
|
||
self:SetCameraToAureole(true)
|
||
end
|
||
|
||
local closeCb = function ()
|
||
self:SetCameraToAureole(false)
|
||
end
|
||
|
||
local title = CS.XTextManager.GetText("ExhibitionSelectAureoTitle")
|
||
local desc = CS.XTextManager.GetText("ExhibitionSelectAureoDesc")
|
||
self:OnBtnReplace(allCurrCharaAureList, currIndex, title, desc, confirmCb, selectCb, openCb, closeCb)
|
||
end)
|
||
end
|
||
self:SetLiberationEffect(currLiberateAureoleId)
|
||
|
||
-- 球
|
||
local gridBall = self.GridBall
|
||
if not gridBall then
|
||
local uiGo = CS.UnityEngine.Object.Instantiate(self.GridSupersolution.transform, self.GridSupersolution.transform.parent)
|
||
local uiObject = uiGo:GetComponent("UiObject")
|
||
gridBall = uiObject
|
||
self.GridBall = gridBall
|
||
end
|
||
local isBall = XTool.IsNumberValid(XExhibitionConfigs.GetCharacterExhibitonLimitCfgByCharacterId(characterId).SetBallColor)
|
||
gridBall.gameObject:SetActiveEx(isBall)
|
||
if isBall then
|
||
local allBallList = {} -- 该角色的三种技能球对应的skillId
|
||
local allSkillList = XCharacterConfigs.GetCharacterSkills(characterId)[1]
|
||
local magicIdList = CS.XGame.Config:GetString("HigherLiberateLvMagicId")
|
||
magicIdList = string.Split(magicIdList, "|")
|
||
for i = 1, 3, 1 do
|
||
local subSkillConfigDesc = allSkillList.subSkills[i].configDes
|
||
allBallList[i] = {Id = tonumber(magicIdList[i]), Icon = subSkillConfigDesc.Icon}
|
||
end
|
||
local currIndex = XDataCenter.CharacterManager.CheckHasSuperExhibitionBallColor(characterId) or 1 -- 如果设置过超解球 拿到超解球的颜色
|
||
gridBall:GetObject("RImgQiu"):SetRawImage(allBallList[currIndex].Icon)
|
||
gridBall:GetObject("Red").gameObject:SetActiveEx(false)
|
||
local btn = gridBall:GetObject("BtnReplace")
|
||
btn:SetDisable(not isSuper)
|
||
XUiHelper.RegisterClickEvent(self, btn, function ()
|
||
local confirmCb = function (magicId)
|
||
if magicId == allBallList[currIndex].Id then
|
||
return
|
||
end
|
||
XDataCenter.ExhibitionManager.CharacterSwitchLiberateMagicIdRequest(characterId, magicId, function ()
|
||
self.RootUi:UpdateView()
|
||
end)
|
||
end
|
||
local title = CS.XTextManager.GetText("ExhibitionSelectBallColorTitle")
|
||
local desc = CS.XTextManager.GetText("ExhibitionSelectBallColorDesc")
|
||
|
||
local selectCb = function (id, gridIndex, uiAuroProxy)
|
||
local templateTextNameGo = uiAuroProxy.TxtSkillName.gameObject
|
||
local tempTextDescGo = uiAuroProxy.TxtSkillbrief.gameObject
|
||
local tempParent = templateTextNameGo.transform.parent
|
||
for i = 0, tempParent.childCount - 1 do
|
||
local child = tempParent:GetChild(i)
|
||
child.gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
local subSkillConfigDesc = allSkillList.subSkills[gridIndex].configDes
|
||
local titleStr = ""
|
||
local descStr = ""
|
||
|
||
uiAuroProxy.TxtSkillBallName.text = subSkillConfigDesc.Name
|
||
for index, title in pairs(subSkillConfigDesc.Title) do
|
||
titleStr = title
|
||
descStr = subSkillConfigDesc.BriefDes[index]
|
||
|
||
local titleText = uiAuroProxy.TextTitleDic[index]
|
||
if not titleText then
|
||
titleText = CS.UnityEngine.Object.Instantiate(templateTextNameGo, uiAuroProxy.TxtSkillName.transform.parent)
|
||
uiAuroProxy.TextTitleDic[index] = titleText
|
||
end
|
||
titleStr = XUiHelper.ConvertLineBreakSymbol(titleStr)
|
||
titleText:GetComponent("Text").text = titleStr
|
||
titleText.gameObject:SetActiveEx(true)
|
||
|
||
local descText = uiAuroProxy.TextDescDic[index]
|
||
if not descText then
|
||
descText = CS.UnityEngine.Object.Instantiate(tempTextDescGo, uiAuroProxy.TxtSkillbrief.transform.parent)
|
||
uiAuroProxy.TextDescDic[index] = descText
|
||
end
|
||
descStr = XUiHelper.ConvertLineBreakSymbol(descStr)
|
||
descText:GetComponent("Text").text = descStr
|
||
descText.gameObject:SetActiveEx(true)
|
||
end
|
||
end
|
||
|
||
self:OnBtnReplace(allBallList, currIndex, title, desc, confirmCb, selectCb)
|
||
end)
|
||
end
|
||
-- 球和环都没有就隐藏奖励栏
|
||
local isShowReward = isAurole or isBall
|
||
self.Title1.gameObject:SetActiveEx(isShowReward)
|
||
|
||
-- 驻守按钮
|
||
local curr = XDataCenter.FubenAwarenessManager.GetAllChapterOccupyNum()
|
||
local total = #XDataCenter.FubenAwarenessManager.GetChapterIdList()
|
||
|
||
local isCharaOccupy = XDataCenter.FubenAwarenessManager.CheckCharacterInOccupy(characterId)
|
||
local isLeftOccupyPos = curr < total
|
||
local isShowOccypy = isSuper and not isCharaOccupy and isLeftOccupyPos
|
||
self.BtnOccupy.gameObject:SetActiveEx(isShowOccypy)
|
||
|
||
-- 解放按钮
|
||
local taskId = exhibitionRewardConfig.Id
|
||
local taskFinished = XDataCenter.ExhibitionManager.CheckGrowUpTaskFinish(taskId)
|
||
local canGetReward = passed and not taskFinished
|
||
self.BtnBreak:SetDisable(not canGetReward, canGetReward)
|
||
self.PanelAlreadyBreak.gameObject:SetActive(taskFinished)
|
||
self.BtnBreak.gameObject:SetActive(not taskFinished)
|
||
end
|
||
|
||
function XUiPanelExhibitionSuperInfo:OnBtnBreakClick()
|
||
-- 条件
|
||
self.ConditionGrids = self.ConditionGrids or {}
|
||
local conditionIds = self.ExhibitionRewardConfig.ConditionIds
|
||
for i = 1, ConditionDesNum do
|
||
local conditionId = conditionIds[i]
|
||
if XTool.IsNumberValid(conditionId) then
|
||
local res, desc = XConditionManager.CheckCondition(conditionId, self.CharacterId)
|
||
if not res then
|
||
XUiManager.TipError(desc)
|
||
return
|
||
end
|
||
end
|
||
end
|
||
|
||
self.RootUi:OnBtnBreakClick()
|
||
end
|
||
|
||
function XUiPanelExhibitionSuperInfo:OnBtnReplace(list, currIndex, title, desc, confirmCb, onSelectCb, openCb, closeCb)
|
||
local currLevel = XDataCenter.ExhibitionManager.GetCharacterGrowUpLevel(self.CharacterId, true)
|
||
local isSuper = currLevel >= XCharacterConfigs.GrowUpLevel.Super
|
||
if not isSuper then
|
||
XUiManager.TipError(CS.XTextManager.GetText("ExhibitionSuperLimit"))
|
||
return
|
||
end
|
||
if openCb then
|
||
openCb()
|
||
end
|
||
XLuaUiManager.Open("UiExhibitionAureole", list, currIndex, title, desc, confirmCb, onSelectCb, closeCb)
|
||
end
|
||
|
||
function XUiPanelExhibitionSuperInfo:Show()
|
||
self.GameObject:SetActive(true)
|
||
end
|
||
|
||
function XUiPanelExhibitionSuperInfo:Hide()
|
||
self.GameObject:SetActive(false)
|
||
end
|
||
|
||
return XUiPanelExhibitionSuperInfo |