Initial version - 1.2.0.60

EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
This commit is contained in:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
+401
View File
@@ -0,0 +1,401 @@
local DiscSkillCtrl = class("DiscSkillCtrl", BaseCtrl)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
DiscSkillCtrl._mapNodeConfig = {
blur = {
sNodeName = "t_fullscreen_blur_blue"
},
aniBlur = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "Animator"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnCloseDatail = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_Close"
},
window = {},
aniWindow = {sNodeName = "window", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "DiscSkill_Title"
},
DiscItem = {nCount = 6},
goNone = {nCount = 6},
btnItem = {
nCount = 6,
sComponentName = "UIButton",
callback = "OnBtnClick_DiscItem"
},
txtMainDiscTitle = {
sComponentName = "TMP_Text",
sLanguageId = "DiscFormation_MainTitle"
},
txtSubDiscTitle = {
sComponentName = "TMP_Text",
sLanguageId = "DiscFormation_SubTitle"
},
txtMainDiscTip = {
sComponentName = "TMP_Text",
sLanguageId = "Tip_DiscMainTitle"
},
txtSubDiscTip = {
sComponentName = "TMP_Text",
sLanguageId = "Tip_DiscSubTitle"
},
txtDiscName = {sComponentName = "TMP_Text"},
goProperty = {
nCount = 2,
sCtrlName = "Game.UI.TemplateEx.TemplatePropertyCtrl"
},
imgDiscEET = {sComponentName = "Image"},
imgTag = {nCount = 3},
txtTag = {nCount = 3, sComponentName = "TMP_Text"},
ScrollView = {sComponentName = "ScrollRect"},
goMainSkill = {},
txtMainSkillTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Disc_MainSkill_Title"
},
txtMainSkillName = {sComponentName = "TMP_Text"},
imgMainSkillIcon = {sComponentName = "Image"},
imgMainSkillIconBg = {sComponentName = "Image"},
goMainLevel = {sComponentName = "Image"},
txtMainSkillDesc = {sComponentName = "TMP_Text"},
TMP_Link1 = {
sNodeName = "txtMainSkillDesc",
sComponentName = "TMPHyperLink",
callback = "OnLinkClick_Word"
},
goSubSkill = {},
txtSubSkillTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Disc_SubSkill_Title"
},
rtSubBg = {nCount = 2},
txtSubSkillName = {nCount = 2, sComponentName = "TMP_Text"},
imgSubSkillIcon = {nCount = 2, sComponentName = "Image"},
imgSubSkillIconBg = {nCount = 2, sComponentName = "Image"},
txtSubSkillDesc = {nCount = 2, sComponentName = "TMP_Text"},
TMP_Link2 = {
sNodeName = "txtSubSkillDesc1",
sComponentName = "TMPHyperLink",
callback = "OnLinkClick_Word"
},
TMP_Link3 = {
sNodeName = "txtSubSkillDesc2",
sComponentName = "TMPHyperLink",
callback = "OnLinkClick_Word"
},
txtActiveNeed = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Disc_SubSkill_ActiveConditions"
},
txtSubSkillLevel = {nCount = 2, sComponentName = "TMP_Text"},
btnPrevLevel = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Prev"
},
btnNextLevel = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Next"
},
imgPrevOn = {nCount = 2},
imgPrevOff = {nCount = 2},
imgNextOn = {nCount = 2},
imgNextOff = {nCount = 2},
imgNeedNoteBg1_ = {nCount = 3},
imgNeedNoteIcon1_ = {nCount = 3, sComponentName = "Image"},
txtNeedNoteName1_ = {nCount = 3, sComponentName = "TMP_Text"},
txtNoteActiveLv1_ = {nCount = 3, sComponentName = "TMP_Text"},
imgNeedNoteBg2_ = {nCount = 3},
imgNeedNoteIcon2_ = {nCount = 3, sComponentName = "Image"},
txtNeedNoteName2_ = {nCount = 3, sComponentName = "TMP_Text"},
txtNoteActiveLv2_ = {nCount = 3, sComponentName = "TMP_Text"},
ActionBar = {
sCtrlName = "Game.UI.ActionBar.ActionBarCtrl"
},
btnShortcutClose = {
sComponentName = "NaviButton",
callback = "OnBtnClick_Close"
},
goRightContent = {
sComponentName = "RectTransform"
},
goNoteInfo = {}
}
DiscSkillCtrl._mapEventConfig = {}
function DiscSkillCtrl:Open()
self._mapNode.blur:SetActive(true)
self:PlayInAni()
self:Refresh()
end
function DiscSkillCtrl:PlayInAni()
self._mapNode.window:SetActive(true)
self._mapNode.aniWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function DiscSkillCtrl:PlayOutAni()
self._mapNode.aniWindow:Play("t_window_04_t_out")
self._mapNode.aniBlur:SetTrigger("tOut")
self:AddTimer(1, 0.2, "Close", true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function DiscSkillCtrl:Close()
self._mapNode.window:SetActive(false)
EventManager.Hit(EventId.ClosePanel, PanelId.DiscSkill)
end
function DiscSkillCtrl:Refresh()
local nDiscToSelect = 0
if nil ~= self.tbDisc then
for i = 1, 6 do
local nDiscId = self.tbDisc[i]
if 0 ~= nDiscId then
if nDiscToSelect == 0 then
nDiscToSelect = i
end
local discData = self.mapDiscData[nDiscId]
if nil ~= discData then
local objCtrl = self:BindCtrlByNode(self._mapNode.DiscItem[i], "Game.UI.TemplateEx.TemplateDiscItemCtrl")
objCtrl:Refresh(nDiscId, discData.nStar, discData.nMaxStar, discData.nLevel, self.mapNote)
self._mapNode.DiscItem[i]:SetActive(true)
self._mapNode.goNone[i]:SetActive(false)
end
else
self._mapNode.goNone[i]:SetActive(true)
self._mapNode.DiscItem[i]:SetActive(false)
end
end
end
if nDiscToSelect ~= 0 then
self:OnBtnClick_DiscItem(nil, nDiscToSelect)
end
end
function DiscSkillCtrl:RefreshSkill(mapDisc, nIdx)
self._mapNode.txtMainDiscTip.gameObject:SetActive(nIdx <= 3)
self._mapNode.txtSubDiscTip.gameObject:SetActive(3 < nIdx)
local nMainSkillId = mapDisc.nMainSkillId
if nIdx <= 3 and nMainSkillId then
self._mapNode.goMainSkill:SetActive(true)
for k, v in pairs(self.tbSubNoteItem) do
v.gameObject:SetActive(false)
end
local mapCfg = ConfigTable.GetData("MainSkill", nMainSkillId)
if mapCfg then
self:SetPngSprite(self._mapNode.imgMainSkillIcon, mapCfg.Icon .. AllEnum.DiscSkillIconSurfix.Small)
self:SetPngSprite(self._mapNode.imgMainSkillIconBg, mapCfg.IconBg .. AllEnum.DiscSkillIconSurfix.Small)
NovaAPI.SetTMPText(self._mapNode.txtMainSkillName, mapCfg.Name)
self:SetAtlasSprite(self._mapNode.goMainLevel, "12_rare", AllEnum.FrameType_New.DiscLimitS .. AllEnum.FrameColor_New[mapDisc.nRarity] .. "_0" .. mapDisc.nStar + 1)
NovaAPI.SetImageNativeSize(self._mapNode.goMainLevel)
local sDesc = UTILS.ParseParamDesc(mapCfg.Desc, mapCfg)
NovaAPI.SetTMPText(self._mapNode.txtMainSkillDesc, sDesc)
end
self.tbSubLayer = {}
self.tbSubMaxLayer = {}
self:RefreshSubSkill(mapDisc)
else
self._mapNode.goMainSkill:SetActive(false)
self._mapNode.goSubSkill:SetActive(false)
end
if 3 < nIdx and mapDisc.nId then
for k, v in pairs(self.tbSubNoteItem) do
self.tbSubNoteItem[k].gameObject:SetActive(false)
end
for i, tbNote in pairs(mapDisc.tbSubNoteSkills) do
if nil ~= self.tbSubNoteItem[i] then
self.tbSubNoteItem[i].gameObject:SetActive(true)
self.tbSubNoteItem[i]:SetItem(tbNote.nId, tbNote.nCount)
else
local itemObj = instantiate(self._mapNode.goNoteInfo, self._mapNode.goRightContent)
itemObj:SetActive(true)
local itemCtrl = self:BindCtrlByNode(itemObj, "Game.UI.DiscSkill.DiscSubSkillItem")
itemCtrl:SetItem(tbNote.nId, tbNote.nCount)
table.insert(self.tbSubNoteItem, itemCtrl)
end
end
end
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.ScrollView, 1)
end
function DiscSkillCtrl:RefreshSubSkill(mapDisc)
if not self.tbSubLayer then
self.tbSubLayer = {}
end
if not self.tbSubMaxLayer then
self.tbSubMaxLayer = {}
end
local tbSubSkillGroupId = mapDisc.tbSubSkillGroupId
self._mapNode.goSubSkill:SetActive(next(tbSubSkillGroupId))
for i = 1, 2 do
if tbSubSkillGroupId[i] then
self._mapNode.rtSubBg[i]:SetActive(true)
local tbGroup = CacheTable.GetData("_SecondarySkill", tbSubSkillGroupId[i])
if tbGroup then
if not self.tbSubLayer[i] then
self.tbSubLayer[i] = 1
local nMaxLayer = #tbGroup
for j = nMaxLayer, 1, -1 do
if tbGroup[j] then
local bActive = mapDisc:CheckSubSkillActive(self.mapNote, tbGroup[j])
if bActive then
self.tbSubLayer[i] = j
break
end
end
end
end
if not self.tbSubMaxLayer[i] then
self.tbSubMaxLayer[i] = #tbGroup
end
NovaAPI.SetTMPText(self._mapNode.txtSubSkillLevel[i], orderedFormat(ConfigTable.GetUIText("Disc_SubSkill_Level"), self.tbSubLayer[i]))
self._mapNode.imgPrevOn[i]:SetActive(self.tbSubLayer[i] > 1)
self._mapNode.imgPrevOff[i]:SetActive(self.tbSubLayer[i] == 1)
self._mapNode.imgNextOn[i]:SetActive(self.tbSubLayer[i] < self.tbSubMaxLayer[i])
self._mapNode.imgNextOff[i]:SetActive(self.tbSubLayer[i] == self.tbSubMaxLayer[i])
local mapCfg = tbGroup[self.tbSubLayer[i]]
if mapCfg then
self:SetPngSprite(self._mapNode.imgSubSkillIcon[i], mapCfg.Icon .. AllEnum.DiscSkillIconSurfix.Small)
self:SetPngSprite(self._mapNode.imgSubSkillIconBg[i], mapCfg.IconBg .. AllEnum.DiscSkillIconSurfix.Small)
NovaAPI.SetTMPText(self._mapNode.txtSubSkillName[i], mapCfg.Name)
local sDesc = UTILS.ParseParamDesc(mapCfg.Desc, mapCfg)
NovaAPI.SetTMPText(self._mapNode.txtSubSkillDesc[i], sDesc)
local tbActiveNote = decodeJson(mapCfg.NeedSubNoteSkills)
local j = 1
for nNeed = 1, 3 do
self._mapNode["imgNeedNoteBg" .. i .. "_"][nNeed]:SetActive(false)
end
for k, v in pairs(tbActiveNote) do
local nNoteId = tonumber(k)
local nNoteCount = tonumber(v)
if nNoteId then
local mapNote = ConfigTable.GetData("SubNoteSkill", nNoteId)
if mapNote then
self._mapNode["imgNeedNoteBg" .. i .. "_"][j]:SetActive(true)
self:SetPngSprite(self._mapNode["imgNeedNoteIcon" .. i .. "_"][j], mapNote.Icon .. AllEnum.DiscSkillIconSurfix.Small)
NovaAPI.SetTMPText(self._mapNode["txtNeedNoteName" .. i .. "_"][j], mapNote.Name)
NovaAPI.SetTMPText(self._mapNode["txtNoteActiveLv" .. i .. "_"][j], orderedFormat(ConfigTable.GetUIText("Disc_SubSkill_ActiveLevel"), nNoteCount))
j = j + 1
end
end
end
end
end
else
self._mapNode.rtSubBg[i]:SetActive(false)
end
end
end
function DiscSkillCtrl:SelectDiscItem(nDiscId, nStar, nMaxStar, nLevel, nIdx)
local discData = self.mapDiscData[nDiscId]
if nil == discData then
return
end
NovaAPI.SetTMPText(self._mapNode.txtDiscName, discData.sName)
local tbAttr = discData.mapAttrBase
local nAttrIdx = 1
for _, mapAttachAttr in pairs(AllEnum.AttachAttr) do
local mapAttr = tbAttr[mapAttachAttr.sKey]
if mapAttr.Value > 0 then
self._mapNode.goProperty[nAttrIdx]:SetItemProperty(mapAttr.Key, mapAttr.Value, nil, true)
nAttrIdx = nAttrIdx + 1
end
end
for i = 1, 3 do
local nTag = discData.tbTag[i]
if nTag then
self._mapNode.imgTag[i]:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtTag[i], ConfigTable.GetData("DiscTag", nTag).Title)
else
self._mapNode.imgTag[i]:SetActive(false)
end
end
local sName = AllEnum.ElementIconType.Icon .. discData.nEET
self:SetAtlasSprite(self._mapNode.imgDiscEET, "12_rare", sName)
self:RefreshSkill(discData, nIdx)
end
function DiscSkillCtrl:Awake()
self._mapNode.window:SetActive(false)
local tbParam = self:GetPanelParam()
self.tbDisc = {}
self.mapNote = {}
self.mapDiscData = {}
if type(tbParam) == "table" then
self.tbDisc = tbParam[1]
self.mapNote = tbParam[2]
self.mapDiscData = tbParam[3]
end
self.tbDiscId = {}
self.tbSubNoteItem = {}
self._mapNode.btnShortcutClose.gameObject:SetActive(GamepadUIManager.GetInputState())
if GamepadUIManager.GetInputState() then
local tbConfig = {
{
sAction = "Back",
sLang = "ActionBar_Back"
}
}
self._mapNode.ActionBar:InitActionBar(tbConfig)
end
end
function DiscSkillCtrl:OnEnable()
if GamepadUIManager.GetInputState() then
GamepadUIManager.EnableGamepadUI("DiscSkillCtrl", self:GetGamepadUINode(), nil, true)
end
self:Open()
end
function DiscSkillCtrl:OnDisable()
if GamepadUIManager.GetInputState() then
GamepadUIManager.DisableGamepadUI("DiscSkillCtrl")
end
for k, v in pairs(self.tbSubNoteItem) do
self:UnbindCtrlByNode(v)
self.tbSubNoteItem[k] = nil
end
self.tbSubNoteItem = {}
end
function DiscSkillCtrl:OnDestroy()
end
function DiscSkillCtrl:OnBtnClick_Close()
self:PlayOutAni()
end
function DiscSkillCtrl:OnBtnClick_DiscItem(obj, nIdx)
if nil == self.tbDisc or 0 == self.tbDisc[nIdx] then
return
end
self.nSelectDiscId = self.tbDisc[nIdx]
self.nSelectIdx = nIdx
for i = 1, 6 do
if 0 ~= self.tbDisc[i] then
local tr = self._mapNode.btnItem[i]:GetComponent("Transform")
local goSelect = tr:Find("AnimRoot/tc_disc_item_01/Select").gameObject
goSelect:SetActive(self.tbDisc[i] == self.nSelectDiscId)
end
end
local discData = self.mapDiscData[self.nSelectDiscId]
self:SelectDiscItem(self.nSelectDiscId, discData.nStar, discData.nMaxStar, discData.nLevel, self.nSelectIdx)
end
function DiscSkillCtrl:OnBtnClick_Prev(btn, nIndex)
if self.tbSubLayer and self.tbSubLayer[nIndex] == 1 then
return
end
self.tbSubLayer[nIndex] = self.tbSubLayer[nIndex] - 1
local discData = self.mapDiscData[self.nSelectDiscId]
self:RefreshSubSkill(discData)
end
function DiscSkillCtrl:OnBtnClick_Next(btn, nIndex)
if self.tbSubMaxLayer and self.tbSubLayer and self.tbSubLayer[nIndex] == self.tbSubMaxLayer[nIndex] then
return
end
self.tbSubLayer[nIndex] = self.tbSubLayer[nIndex] + 1
local discData = self.mapDiscData[self.nSelectDiscId]
self:RefreshSubSkill(discData)
end
function DiscSkillCtrl:OnLinkClick_Word(link, sWordId)
UTILS.ClickWordLink(link, sWordId)
end
return DiscSkillCtrl