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