Files
StellaSora_DataLua/lua/game/ui/characterinfoex/charfgctrl.lua
T
SL1900 46f967a584 Update - 1.6.0.84
EN: 1.6.0.84
CN: 1.6.0.87
JP: 1.6.0.88
KR: 1.6.0.91
2026-02-04 13:00:00 +09:00

187 lines
5.9 KiB
Lua

local CharFgCtrl = class("CharFgCtrl", BaseCtrl)
local MoveBarPos = {
-805.2,
-483.6,
-162,
159.6,
481.2,
802.8
}
local PanelToTab = {
[PanelId.CharInfo] = 1,
[PanelId.CharSkill] = 2,
[PanelId.CharEquipment] = 4,
[PanelId.CharPotential] = 3,
[PanelId.CharTalent] = 5,
[PanelId.CharacterRelation] = 6,
[PanelId.CharUpPanel] = 1
}
local TabTextKey = {
"CharacterInfo_Tab1",
"CharacterInfo_Tab2",
"CharacterInfo_Tab4",
"CharacterInfo_Tab3",
"CharacterInfo_Tab5",
"CharacterInfo_Tab6"
}
CharFgCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
goBack = {},
btnTab = {
nCount = 6,
sComponentName = "UIButton",
callback = "OnBtnClick_Tab"
},
imgOn = {nCount = 6},
txtTabOn = {nCount = 6, sComponentName = "TMP_Text"},
txtTabOff = {nCount = 6, sComponentName = "TMP_Text"},
layoutOff = {nCount = 6},
reddot = {nCount = 6},
imgMoveBar = {sComponentName = "Transform"},
Tab = {sNodeName = "--Tab--"},
aniSafeRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "Animator"
},
btnTabSwitchLeft = {
sComponentName = "NaviButton",
callback = "OnBtnClick_SwitchLeft"
},
btnTabSwitchRight = {
sComponentName = "NaviButton",
callback = "OnBtnClick_SwitchRight"
},
goTabSwitch = {}
}
CharFgCtrl._mapEventConfig = {
RefreshCharFg = "OnEvent_RefreshFg",
RefreshCharTopBar = "RefreshTopBar",
RefreshCharTopBarText = "OnEvent_SetTopBarText",
ChangeCharFgTab = "OnEvent_ChangeTab",
ChangeCharTopBar = "OnEvent_ChangeTopBar"
}
function CharFgCtrl:InitTab()
self.nTab = PanelToTab[self._panel.nPanelId]
self._mapNode.imgMoveBar.localPosition = Vector3(MoveBarPos[self.nTab], 4.5, 0)
for i = 1, 6 do
NovaAPI.SetTMPText(self._mapNode.txtTabOn[i], ConfigTable.GetUIText(TabTextKey[i]))
NovaAPI.SetTMPText(self._mapNode.txtTabOff[i], ConfigTable.GetUIText(TabTextKey[i]))
self._mapNode.imgOn[i]:SetActive(PanelToTab[self._panel.nPanelId] == i)
self._mapNode.txtTabOn[i].gameObject:SetActive(PanelToTab[self._panel.nPanelId] == i)
self._mapNode.layoutOff[i].gameObject:SetActive(PanelToTab[self._panel.nPanelId] ~= i)
end
end
function CharFgCtrl:RegisterRedDot()
RedDotManager.RegisterNode(RedDotDefine.Role_Upgrade, self._panel.nCharId, self._mapNode.reddot[1])
RedDotManager.RegisterNode(RedDotDefine.Role_Talent, self._panel.nCharId, self._mapNode.reddot[5])
RedDotManager.RegisterNode(RedDotDefine.Role_Relation, self._panel.nCharId, self._mapNode.reddot[6])
end
function CharFgCtrl:RefreshTopBar()
local nPanelId = self._panel.nPanelId
local panelCfg = self.tbPanelCfg[nPanelId]
if nil ~= panelCfg then
if panelCfg.bShowTopBar then
self._mapNode.TopBar.gameObject:SetActive(true)
self._mapNode.TopBar:InitTopBar(nPanelId)
if nPanelId == PanelId.CharTalent then
local mapCharCfg = ConfigTable.GetData_Character(self._panel.nCharId)
self._mapNode.TopBar:CreateCoin({
mapCharCfg.FragmentsId
})
elseif nPanelId == PanelId.CharUpPanel then
local nGrade = ConfigTable.GetData_Character(self._panel.nCharId).Grade
local tbAdvanceLevel = PlayerData.Char:GetAdvanceLevelTable()
local curGradeLevelArr = tbAdvanceLevel[nGrade]
local playerCharData = PlayerData.Char:GetCharDataByTid(self._panel.nCharId)
local nLevel = playerCharData.nLevel
local nAdvance = playerCharData.nAdvance
local maxAdvance = -1
for i = 1, #curGradeLevelArr do
maxAdvance = maxAdvance + 1
if nAdvance + 1 == i then
local MaxLevel = curGradeLevelArr[nAdvance + 1]
if nLevel == MaxLevel then
self._mapNode.TopBar:SetTitleTxt(ConfigTable.GetUIText("UITitle_CharUp2"))
elseif nLevel < MaxLevel then
self._mapNode.TopBar:SetTitleTxt(ConfigTable.GetUIText("UITitle_CharUp1"))
end
end
end
end
else
self._mapNode.TopBar.gameObject:SetActive(false)
end
end
if self._panel.bSecondPanel then
self:OnEvent_ChangeTopBar(false)
end
end
function CharFgCtrl:Awake()
self:InitTab()
end
function CharFgCtrl:OnEnable()
self.tbPanelCfg = self._panel:GetPanelShowCfg()
local tbSubPanel = self._panel:GetSubPanel()
if tbSubPanel[self._panel.nPanelId] or self._panel.bSecondPanel then
self._mapNode.aniSafeRoot:Play("CharFgPanel_out", 0, 1)
else
self._mapNode.aniSafeRoot:Play("CharFgPanel_in")
end
self:RegisterRedDot()
if self._panel.tbCharList ~= nil then
self._mapNode.goTabSwitch.gameObject:SetActive(1 < #self._panel.tbCharList)
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self:RefreshTopBar()
end
cs_coroutine.start(wait)
end
function CharFgCtrl:OnDisable()
end
function CharFgCtrl:OnDestroy()
end
function CharFgCtrl:OnEvent_RefreshFg()
self:RegisterRedDot()
end
function CharFgCtrl:OnEvent_ChangeTab(bOpen)
if bOpen then
self._mapNode.aniSafeRoot:Play("CharFgPanel_in")
else
self._mapNode.aniSafeRoot:Play("CharFgPanel_out")
end
end
function CharFgCtrl:OnEvent_ChangeTopBar(bShowBack)
self._mapNode.goBack:SetActive(bShowBack)
end
function CharFgCtrl:OnBtnClick_Tab(btn, nIndex)
if self.nTab == nIndex then
return
end
local nNextPanel = table.keyof(PanelToTab, nIndex)
self._mapNode.imgMoveBar:DOLocalMoveX(MoveBarPos[nIndex], 0.1):SetUpdate(true)
self._mapNode.imgOn[self.nTab]:SetActive(false)
self._mapNode.txtTabOn[self.nTab].gameObject:SetActive(false)
self._mapNode.layoutOff[self.nTab].gameObject:SetActive(true)
self._mapNode.imgOn[nIndex]:SetActive(true)
self._mapNode.txtTabOn[nIndex].gameObject:SetActive(true)
self._mapNode.layoutOff[nIndex].gameObject:SetActive(false)
self.nTab = nIndex
if nNextPanel then
EventManager.Hit(EventId.CharRelatePanelOpen, nNextPanel, self._panel.nCharId)
end
end
function CharFgCtrl:OnEvent_SetTopBarText(sTitle)
self._mapNode.TopBar:SetTitleTxt(sTitle)
end
function CharFgCtrl:OnBtnClick_SwitchLeft()
EventManager.Hit("SwitchCurChar", true)
end
function CharFgCtrl:OnBtnClick_SwitchRight()
EventManager.Hit("SwitchCurChar", false)
end
return CharFgCtrl