Files
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

436 lines
14 KiB
Lua

local DiscPreviewCtrl = class("DiscPreviewCtrl", BaseCtrl)
DiscPreviewCtrl._mapNodeConfig = {
aniBlur = {sComponentName = "Animator"},
aniBlur2 = {sComponentName = "Animator"},
btnBlur = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_Close"
},
btnBlur2 = {
sNodeName = "snapshot2",
sComponentName = "Button",
callback = "OnBtnClick_Close"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnConfirm = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
txtBtnConfirm = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Confirm"
},
t_window = {},
aniWindow = {sNodeName = "t_window", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "ItemTip_DiscCYOTitle"
},
srDiscList = {
sComponentName = "LoopScrollView"
},
ItemContent = {sComponentName = "Transform"},
txtDiscName = {sComponentName = "TMP_Text"},
goProperty = {
nCount = 2,
sCtrlName = "Game.UI.TemplateEx.TemplatePropertyCtrl"
},
btnSample = {
sComponentName = "UIButton",
callback = "OnBtnClick_Sample"
},
imgDiscEET = {sComponentName = "Image"},
imgTag = {nCount = 3},
txtTag = {nCount = 3, sComponentName = "TMP_Text"},
DiscNote = {},
DiscSkill = {},
imgOn = {nCount = 2},
imgOff = {nCount = 2},
txtCoreSkill = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Disc_Btn_MainSkill"
},
txtCommonSkill = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Disc_Btn_SubSkill"
},
btnSkill = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Tab"
},
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"},
btnNote = {
nCount = 3,
sComponentName = "UIButton",
callback = "OnBtnClick_Note"
},
imgNoteCount = {nCount = 3, sComponentName = "Image"},
imgNoteIcon = {nCount = 3, sComponentName = "Image"},
txtNoteName = {nCount = 3, sComponentName = "TMP_Text"},
txtNoteLv = {nCount = 3, sComponentName = "TMP_Text"},
txtNoteDesc = {nCount = 3, sComponentName = "TMP_Text"}
}
DiscPreviewCtrl._mapEventConfig = {}
function DiscPreviewCtrl:Open()
self._mapNode.aniBlur.gameObject:SetActive(self.bBlur)
self._mapNode.aniBlur2.gameObject:SetActive(not self.bBlur)
self:PlayInAni()
self:Refresh()
end
function DiscPreviewCtrl:PlayInAni()
self._mapNode.t_window:SetActive(true)
self._mapNode.aniWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function DiscPreviewCtrl:PlayOutAni()
if self.bBlur then
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)
else
self._mapNode.aniBlur2.gameObject:SetActive(false)
self:Close()
end
end
function DiscPreviewCtrl:Close()
self._mapNode.t_window:SetActive(false)
EventManager.Hit(EventId.ClosePanel, PanelId.DiscPreview)
end
function DiscPreviewCtrl:Refresh()
self.tbDisc = {}
local mapItemCfgData = ConfigTable.GetData_Item(self.nCYOId)
if not mapItemCfgData then
return
end
local mapItemUseCfg = decodeJson(mapItemCfgData.UseArgs)
for sTid, nCount in pairs(mapItemUseCfg) do
local nItemTid = tonumber(sTid)
if nItemTid ~= nil then
local mapDisc = PlayerData.Disc:GenerateLocalDiscData(nItemTid)
table.insert(self.tbDisc, mapDisc)
end
end
local sort = function(a, b)
return a.nRarity < b.nRarity or a.nRarity == b.nRarity and a.nEET < b.nEET or a.nRarity == b.nRarity and a.nEET == b.nEET and a.nId < b.nId
end
table.sort(self.tbDisc, sort)
self.tbGridCtrl = {}
self.nCurSelectItem = 1
if #self.tbDisc > 0 then
self._mapNode.srDiscList:SetAnim(0.05)
self._mapNode.srDiscList:Init(#self.tbDisc, self, self.OnGridRefresh, self.OnGridBtnClick, true)
end
self.nCurTab = 1
for i = 1, 2 do
self._mapNode.imgOn[i]:SetActive(i == self.nCurTab)
self._mapNode.imgOff[i]:SetActive(i ~= self.nCurTab)
end
self:RefreshInfo(self.tbDisc[self.nCurSelectItem])
end
function DiscPreviewCtrl:OnGridRefresh(goGrid, gridIndex)
if self.tbGridCtrl[goGrid] == nil then
local mapCtrl = self:BindCtrlByNode(goGrid, "Game.UI.TemplateEx.TemplateDiscPreviewItemCtrl")
self.tbGridCtrl[goGrid] = mapCtrl
end
local nIdx = gridIndex
if nIdx ~= nil then
nIdx = nIdx + 1
else
return
end
local nItemTid = self.tbDisc[nIdx].nId
local mapItemCfgData = ConfigTable.GetData_Item(nItemTid)
if not mapItemCfgData then
return
end
self.tbGridCtrl[goGrid]:Refresh(nItemTid, self.tbDisc[nIdx].nLevel)
self.tbGridCtrl[goGrid]:SetSelect(nIdx == self.nCurSelectItem)
end
function DiscPreviewCtrl:OnGridBtnClick(goGrid, gridIndex)
local nIdx = gridIndex
if nIdx ~= nil then
nIdx = nIdx + 1
else
return
end
if nIdx == self.nCurSelectItem then
return
end
local rtItemBefore = self._mapNode.ItemContent:Find(tostring(self.nCurSelectItem - 1))
if rtItemBefore ~= nil and self.tbGridCtrl[rtItemBefore.gameObject] ~= nil then
self.tbGridCtrl[rtItemBefore.gameObject]:SetSelect(false)
end
if self.tbGridCtrl[goGrid] ~= nil then
self.tbGridCtrl[goGrid]:SetSelect(true)
end
self.nCurSelectItem = nIdx
self:RefreshInfo(self.tbDisc[nIdx])
end
function DiscPreviewCtrl:SwitchTab()
self._mapNode.DiscSkill:SetActive(self.nCurTab == 1)
self._mapNode.DiscNote:SetActive(self.nCurTab == 2)
end
function DiscPreviewCtrl:RefreshInfo(mapDisc)
self.mapSelectDisc = mapDisc
NovaAPI.SetTMPText(self._mapNode.txtDiscName, self.mapSelectDisc.sName)
local sName = AllEnum.ElementIconType.Icon .. self.mapSelectDisc.nEET
self:SetAtlasSprite(self._mapNode.imgDiscEET, "12_rare", sName)
for i = 1, 3 do
local nTag = mapDisc.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 tbAttr = self.mapSelectDisc.mapAttrBase
local i = 1
for _, mapAttachAttr in pairs(AllEnum.AttachAttr) do
local mapAttr = tbAttr[mapAttachAttr.sKey]
if mapAttr.Value > 0 then
self._mapNode.goProperty[i]:SetItemProperty(mapAttr.Key, mapAttr.Value, nil, true)
i = i + 1
end
end
self:RefreshSkill()
self:SwitchTab()
end
function DiscPreviewCtrl:RefreshSkill()
local nMainSkillId = self.mapSelectDisc.nMainSkillId
if nMainSkillId then
self._mapNode.goMainSkill:SetActive(true)
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[self.mapSelectDisc.nRarity] .. "_0" .. self.mapSelectDisc.nStar + 1)
NovaAPI.SetImageNativeSize(self._mapNode.goMainLevel)
local sDesc = UTILS.ParseParamDesc(mapCfg.Desc, mapCfg)
NovaAPI.SetTMPText(self._mapNode.txtMainSkillDesc, sDesc)
end
else
self._mapNode.goMainSkill:SetActive(false)
end
self.tbSubLayer = nil
self.tbSubMaxLayer = nil
self:RefreshSubSkill()
for i = 1, 3 do
self._mapNode.btnNote[i].gameObject:SetActive(self.mapSelectDisc.tbSubNoteSkills[i])
if self.mapSelectDisc.tbSubNoteSkills[i] then
local nImgCount = 2
self:SetPngSprite(self._mapNode.imgNoteCount[i], "UI/big_sprites/zs_outfit_lv_" .. nImgCount)
NovaAPI.SetImageNativeSize(self._mapNode.imgNoteCount[i])
local mapNote = ConfigTable.GetData("SubNoteSkill", self.mapSelectDisc.tbSubNoteSkills[i].nId)
if mapNote then
self:SetPngSprite(self._mapNode.imgNoteIcon[i], mapNote.Icon)
NovaAPI.SetTMPText(self._mapNode.txtNoteName[i], mapNote.Name)
NovaAPI.SetTMPText(self._mapNode.txtNoteDesc[i], mapNote.BriefDesc)
NovaAPI.SetTMPText(self._mapNode.txtNoteLv[i], orderedFormat(ConfigTable.GetUIText("Note_Count"), self.mapSelectDisc.tbSubNoteSkills[i].nCount))
end
end
end
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.ScrollView, 1)
end
function DiscPreviewCtrl:RefreshSubSkill()
if not self.tbSubLayer then
self.tbSubLayer = {}
end
if not self.tbSubMaxLayer then
self.tbSubMaxLayer = {}
end
local tbSubSkillGroupId = self.mapSelectDisc.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
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 DiscPreviewCtrl:Awake()
self._mapNode.t_window:SetActive(false)
self.bBlur = false
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.nCYOId = tbParam[1]
self.bBlur = tbParam[2]
end
end
function DiscPreviewCtrl:OnEnable()
self:Open()
end
function DiscPreviewCtrl:OnDisable()
for k, v in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(v)
self.tbGridCtrl[k] = nil
end
self.tbGridCtrl = {}
end
function DiscPreviewCtrl:OnDestroy()
end
function DiscPreviewCtrl:OnBtnClick_Close()
self:PlayOutAni()
end
function DiscPreviewCtrl:OnBtnClick_Tab(btn, nIndex)
if nIndex == self.nCurTab then
return
end
for i = 1, 2 do
self._mapNode.imgOn[i]:SetActive(i == nIndex)
self._mapNode.imgOff[i]:SetActive(i ~= nIndex)
end
self.nCurTab = nIndex
self:SwitchTab()
end
function DiscPreviewCtrl:OnBtnClick_Prev(btn, nIndex)
if self.tbSubLayer and self.tbSubLayer[nIndex] == 1 then
return
end
self.tbSubLayer[nIndex] = self.tbSubLayer[nIndex] - 1
self:RefreshSubSkill()
end
function DiscPreviewCtrl: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
self:RefreshSubSkill()
end
function DiscPreviewCtrl:OnLinkClick_Word(link, sWordId)
UTILS.ClickWordLink(link, sWordId)
end
function DiscPreviewCtrl:OnBtnClick_Note(btn, nIndex)
local mapNote = self.mapSelectDisc.tbSubNoteSkills[nIndex]
if not mapNote then
return
end
local tbNote = {}
for _, v in ipairs(self.mapSelectDisc.tbSubNoteSkills) do
tbNote[v.nId] = v.nCount
end
EventManager.Hit(EventId.OpenPanel, PanelId.NoteSkill, tbNote, mapNote.nId, false)
end
function DiscPreviewCtrl:OnBtnClick_Sample(btn)
local tbId = {}
for _, v in ipairs(self.tbDisc) do
table.insert(tbId, v.nId)
end
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSample, self.mapSelectDisc.nId, false, tbId)
end
return DiscPreviewCtrl