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:
@@ -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
|
||||
Reference in New Issue
Block a user