5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
402 lines
14 KiB
Lua
402 lines
14 KiB
Lua
local TutorialDiscSkillActiveCtrl = class("TutorialDiscSkillActiveCtrl", BaseCtrl)
|
|
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
|
local WwiseManger = CS.WwiseAudioManager.Instance
|
|
TutorialDiscSkillActiveCtrl._mapNodeConfig = {
|
|
blurBg = {},
|
|
contentRoot = {
|
|
sNodeName = "----SafeAreaRoot----"
|
|
},
|
|
animRoot = {
|
|
sNodeName = "----SafeAreaRoot----",
|
|
sComponentName = "Animator"
|
|
},
|
|
btnBg = {
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_BtnBg"
|
|
},
|
|
btnShortcutBg = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_BtnBg",
|
|
sAction = "Confirm"
|
|
},
|
|
cgSkillList = {
|
|
sNodeName = "goSkillList",
|
|
sComponentName = "CanvasGroup"
|
|
},
|
|
btnDepot = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Depot"
|
|
},
|
|
txtTitle = {sComponentName = "TMP_Text"},
|
|
goAllNoteList = {},
|
|
imgNote = {sComponentName = "Image", nCount = 9},
|
|
goNoteList = {},
|
|
goNoteItem = {},
|
|
noteContent = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
btnNoteList = {
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_BtnBg"
|
|
},
|
|
goSkillList = {},
|
|
goSkillItem = {},
|
|
skillContent = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
btnSkillList = {
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_BtnBg"
|
|
},
|
|
goSkillCard = {},
|
|
goNoteCardItem = {
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateDiscSkillCardCtrl"
|
|
},
|
|
imgIconBgEffect = {sComponentName = "Image"},
|
|
imgIconEffect = {sComponentName = "Image"},
|
|
imgCornerBgEffect = {sComponentName = "Image"},
|
|
txtTips = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Tips_Continue"
|
|
},
|
|
txtClickPre = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTower_Click_Pre"
|
|
},
|
|
txtClickSuf = {
|
|
nCount = 2,
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "StarTower_Click_Suf"
|
|
},
|
|
Tips = {
|
|
sCtrlName = "Game.UI.StarTower.DiscTips.StarTowerTipsCtrl"
|
|
}
|
|
}
|
|
TutorialDiscSkillActiveCtrl._mapEventConfig = {
|
|
StarTowerShowDiscSkill = "OnEvent_ShowDiscSkillActive",
|
|
OpenNoteDepot = "OnEvent_OpenNoteDepot",
|
|
GamepadUIReopen = "OnEvent_Reopen",
|
|
StarTowerDiscTips = "OnEvent_StarTowerDiscTips"
|
|
}
|
|
TutorialDiscSkillActiveCtrl._mapRedDotConfig = {}
|
|
local panel_stage_note = 1
|
|
local panel_stage_skill = 2
|
|
local panel_stage_skill_upgrade = 3
|
|
function TutorialDiscSkillActiveCtrl:InitNoteSkillList(tbNoteList)
|
|
if self.tbShowNote == nil then
|
|
self.tbShowNote = {}
|
|
for id, _ in pairs(tbNoteList) do
|
|
table.insert(self.tbShowNote, id)
|
|
end
|
|
table.sort(self.tbShowNote, function(a, b)
|
|
return a < b
|
|
end)
|
|
for k, v in ipairs(self._mapNode.imgNote) do
|
|
v.gameObject:SetActive(self.tbShowNote[k] ~= nil)
|
|
if self.tbShowNote[k] ~= nil then
|
|
local mapNoteCfg = ConfigTable.GetData("SubNoteSkill", self.tbShowNote[k])
|
|
if nil ~= mapNoteCfg then
|
|
self:SetPngSprite(v, mapNoteCfg.Icon .. AllEnum.DiscSkillIconSurfix.Small)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:ShowNoteList(tbParam, callback)
|
|
self._mapNode.Tips.gameObject:SetActive(true)
|
|
NovaAPI.SetTMPText(self._mapNode.txtTitle, ConfigTable.GetUIText("StarTower_Disc_Skill_Active_1"))
|
|
self._panel:SetTop(self.canvas)
|
|
local bCloseCamera = false
|
|
if not self.bOpen then
|
|
PanelManager.InputDisable()
|
|
bCloseCamera = true
|
|
GamepadUIManager.EnableGamepadUI("TutorialDiscSkillActiveCtrl", self.tbGamepadUINode)
|
|
end
|
|
self.bOpen = true
|
|
EventManager.Hit("StarTowerSetButtonEnable", false, false)
|
|
self.callback = callback
|
|
self._mapNode.blurBg.gameObject:SetActive(true)
|
|
self._mapNode.btnBg.gameObject:SetActive(true)
|
|
self._mapNode.contentRoot.gameObject:SetActive(false)
|
|
EventManager.Hit(EventId.BlockInput, true)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
EventManager.Hit(EventId.BlockInput, false)
|
|
if bCloseCamera then
|
|
CS.GameCameraStackManager.Instance:CloseMainCamera(0.1)
|
|
end
|
|
self._mapNode.contentRoot.gameObject:SetActive(true)
|
|
self._mapNode.goNoteList.gameObject:SetActive(true)
|
|
self._mapNode.goSkillList.gameObject:SetActive(false)
|
|
self._mapNode.goSkillCard.gameObject:SetActive(false)
|
|
self.nPanelStage = panel_stage_note
|
|
self:RefreshAllNoteList(tbParam.tbNoteChange)
|
|
self:RefreshNoteSkill(tbParam.tbNoteChange)
|
|
WwiseManger:PlaySound("ui_roguelike_phonograph_mus")
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:RefreshAllNoteList(tbNoteChange)
|
|
for k, v in ipairs(self._mapNode.imgNote) do
|
|
local nNoteId = self.tbShowNote[k]
|
|
v.gameObject:SetActive(nNoteId ~= nil)
|
|
if nNoteId ~= nil then
|
|
local tmpCount = v.gameObject.transform:Find("txtNoteCount"):GetComponent("TMP_Text")
|
|
local imgArrow = v.gameObject.transform:Find("imgArrow")
|
|
NovaAPI.SetTMPText(tmpCount, self.tbNoteList[nNoteId] or 0)
|
|
imgArrow.gameObject:SetActive(tbNoteChange[nNoteId] ~= nil)
|
|
end
|
|
end
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:RefreshNoteSkill(tbNoteChange)
|
|
local tbNoteSkill = {}
|
|
for nId, v in pairs(tbNoteChange) do
|
|
table.insert(tbNoteSkill, {
|
|
nNoteId = nId,
|
|
nCount = v.nCount,
|
|
bLucky = v.bLucky
|
|
})
|
|
end
|
|
table.sort(tbNoteSkill, function(a, b)
|
|
return a.nNoteId < b.nNoteId
|
|
end)
|
|
for _, v in ipairs(self.tbNoteSkillItemCtrl) do
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
local tbCtrl = {}
|
|
for k, v in ipairs(tbNoteSkill) do
|
|
local objCtrl = self.tbNoteSkillItemCtrl[k]
|
|
if objCtrl == nil then
|
|
local objItem = instantiate(self._mapNode.goNoteItem, self._mapNode.noteContent)
|
|
objCtrl = self:BindCtrlByNode(objItem, "Game.UI.StarTower.DiscTips.DiscNoteSkillItemCtrl")
|
|
table.insert(self.tbNoteSkillItemCtrl, objCtrl)
|
|
end
|
|
objCtrl.gameObject:SetActive(false)
|
|
local nCurLevel = self.tbNoteList[v.nNoteId] or 0
|
|
objCtrl:SetSkillItem(v.nNoteId, nCurLevel, nCurLevel - v.nCount, v.bLucky)
|
|
table.insert(tbCtrl, objCtrl)
|
|
end
|
|
local nIndex = 1
|
|
if 0 < #tbCtrl then
|
|
EventManager.Hit(EventId.BlockInput, true)
|
|
self:AddTimer(#tbCtrl, 0.08, function()
|
|
local objCtrl = tbCtrl[nIndex]
|
|
nIndex = nIndex + 1
|
|
if objCtrl ~= nil then
|
|
objCtrl.gameObject:SetActive(true)
|
|
end
|
|
if nIndex > #tbCtrl then
|
|
EventManager.Hit(EventId.BlockInput, false)
|
|
self._mapNode.txtTips[1].gameObject:SetActive(true)
|
|
self._mapNode.txtTips[2].gameObject:SetActive(true)
|
|
EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_OpenDiscSkillActive_Tutorial")
|
|
end
|
|
end, true, true, true)
|
|
else
|
|
EventManager.Hit(EventId.BlockInput, false)
|
|
end
|
|
self._mapNode.txtTips[1].gameObject:SetActive(false)
|
|
self._mapNode.txtTips[2].gameObject:SetActive(false)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:RefreshDiscSkill(tbSkillList)
|
|
WwiseManger:PlaySound("ui_roguelike_phonograph_mus")
|
|
self._mapNode.goNoteList.gameObject:SetActive(false)
|
|
self._mapNode.goSkillList.gameObject:SetActive(true)
|
|
self._mapNode.goSkillCard.gameObject:SetActive(false)
|
|
local tbCtrl = {}
|
|
if tbSkillList ~= nil then
|
|
for _, v in ipairs(self.tbSkillItemCtrl) do
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
for k, v in ipairs(tbSkillList) do
|
|
local objCtrl = self.tbSkillItemCtrl[k]
|
|
if objCtrl == nil then
|
|
local objItem = instantiate(self._mapNode.goSkillItem, self._mapNode.skillContent)
|
|
objCtrl = self:BindCtrlByNode(objItem, "Game.UI.StarTower.DiscTips.DiscSkillItemCtrl")
|
|
table.insert(self.tbSkillItemCtrl, objCtrl)
|
|
end
|
|
objCtrl.gameObject:SetActive(false)
|
|
objCtrl:SetSkillItem(v.nSkillId, v.tbChangeNote, self.tbNoteList)
|
|
table.insert(tbCtrl, objCtrl)
|
|
end
|
|
end
|
|
local nIndex = 1
|
|
if 0 < #tbCtrl then
|
|
EventManager.Hit(EventId.BlockInput, true)
|
|
self:AddTimer(#tbCtrl, 0.08, function()
|
|
local objCtrl = tbCtrl[nIndex]
|
|
nIndex = nIndex + 1
|
|
if objCtrl ~= nil then
|
|
objCtrl.gameObject:SetActive(true)
|
|
objCtrl:PlayAnim()
|
|
end
|
|
if nIndex > #tbCtrl then
|
|
EventManager.Hit(EventId.BlockInput, false)
|
|
self._mapNode.txtTips[1].gameObject:SetActive(true)
|
|
self._mapNode.txtTips[2].gameObject:SetActive(true)
|
|
end
|
|
end, true, true, true)
|
|
self._mapNode.txtTips[1].gameObject:SetActive(false)
|
|
self._mapNode.txtTips[2].gameObject:SetActive(false)
|
|
end
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:ShowDiscUpgradeCard()
|
|
self._mapNode.txtTips[1].gameObject:SetActive(false)
|
|
self._mapNode.txtTips[2].gameObject:SetActive(false)
|
|
self._mapNode.animRoot:Play("DiscSkillActive_Card", 0, 0)
|
|
local nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
|
|
"DiscSkillActive_Card"
|
|
})
|
|
self:AddTimer(1, nAnimLen, function()
|
|
self._mapNode.txtTips[1].gameObject:SetActive(true)
|
|
self._mapNode.txtTips[2].gameObject:SetActive(true)
|
|
end, true, true, true)
|
|
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLen)
|
|
WwiseManger:PlaySound("ui_roguelike_outfit_select")
|
|
NovaAPI.SetTMPText(self._mapNode.txtTitle, ConfigTable.GetUIText("StarTower_Disc_Skill_Active_2"))
|
|
self._mapNode.goSkillCard.gameObject:SetActive(true)
|
|
self._mapNode.goNoteList.gameObject:SetActive(false)
|
|
self._mapNode.goSkillList.gameObject:SetActive(false)
|
|
local mapData = table.remove(self.tbSkillActive, 1)
|
|
if mapData ~= nil then
|
|
self.nSkillId = mapData.nSkillId
|
|
self._mapNode.goNoteCardItem:Refresh(mapData.nDiscId, nil, self.nSkillId)
|
|
self._mapNode.goNoteCardItem:ChangeWordRaycast(true)
|
|
local mapSkillCfg = ConfigTable.GetData("SecondarySkill", self.nSkillId)
|
|
if mapSkillCfg ~= nil then
|
|
self:SetPngSprite(self._mapNode.imgIconEffect, mapSkillCfg.Icon)
|
|
self:SetPngSprite(self._mapNode.imgIconBgEffect, mapSkillCfg.IconBg)
|
|
EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_OpenStarTowerDepot_Tutorial")
|
|
end
|
|
end
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:HidePanel()
|
|
self.bOpen = false
|
|
GamepadUIManager.DisableGamepadUI("TutorialDiscSkillActiveCtrl")
|
|
EventManager.Hit("StarTowerSetButtonEnable", true, true)
|
|
PanelManager.InputEnable()
|
|
self._mapNode.contentRoot.gameObject:SetActive(false)
|
|
self._mapNode.blurBg.gameObject:SetActive(false)
|
|
self._mapNode.btnBg.gameObject:SetActive(false)
|
|
NovaAPI.SetCanvasSortingOrder(self.canvas, self.nInitSortingOrder)
|
|
CS.GameCameraStackManager.Instance:OpenMainCamera()
|
|
if nil ~= self.callback then
|
|
self.callback()
|
|
end
|
|
CS.AdventureModuleHelper.ResumeLogic()
|
|
PanelManager.InputEnable()
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:ReopenPanel()
|
|
EventManager.Hit("StarTowerSetButtonEnable", false, false)
|
|
self._mapNode.blurBg.gameObject:SetActive(true)
|
|
self._mapNode.btnBg.gameObject:SetActive(true)
|
|
EventManager.Hit(EventId.BlockInput, true)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
EventManager.Hit(EventId.BlockInput, false)
|
|
CS.GameCameraStackManager.Instance:CloseMainCamera(0.1)
|
|
self._mapNode.contentRoot.gameObject:SetActive(true)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:Awake()
|
|
self.nType = 0
|
|
self.bOpen = false
|
|
self.tbNoteSkillItemCtrl = {}
|
|
self.tbSkillItemCtrl = {}
|
|
self.canvas = self.gameObject:GetComponent("Canvas")
|
|
self.nInitSortingOrder = NovaAPI.GetCanvasSortingOrder(self.canvas)
|
|
self._mapNode.blurBg.gameObject:SetActive(false)
|
|
self._mapNode.contentRoot.gameObject:SetActive(false)
|
|
self._mapNode.btnBg.gameObject:SetActive(false)
|
|
self._mapNode.goSkillItem.gameObject:SetActive(false)
|
|
self.tbGamepadUINode = self:GetGamepadUINode()
|
|
self._mapNode.btnDepot.gameObject:SetActive(false)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnEnable()
|
|
self.nPanelStage = 0
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnDisable()
|
|
for _, v in ipairs(self.tbNoteSkillItemCtrl) do
|
|
self:UnbindCtrlByNode(v)
|
|
end
|
|
self.tbNoteSkillItemCtrl = {}
|
|
for _, v in ipairs(self.tbSkillItemCtrl) do
|
|
self:UnbindCtrlByNode(v)
|
|
end
|
|
self.tbSkillItemCtrl = {}
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnBtnClick_BtnBg()
|
|
if self.nPanelStage == panel_stage_note then
|
|
if self.tbParam.tbSkill ~= nil and next(self.tbParam.tbSkill) ~= nil then
|
|
self.nPanelStage = panel_stage_skill
|
|
self:RefreshDiscSkill(self.tbParam.tbSkill)
|
|
return
|
|
else
|
|
self.nPanelStage = 0
|
|
end
|
|
elseif self.nPanelStage == panel_stage_skill then
|
|
if 0 < #self.tbSkillActive then
|
|
self.nPanelStage = panel_stage_skill_upgrade
|
|
self:ShowDiscUpgradeCard()
|
|
return
|
|
else
|
|
self.nPanelStage = 0
|
|
end
|
|
elseif self.nPanelStage == panel_stage_skill_upgrade then
|
|
if #self.tbSkillActive == 0 then
|
|
self.nPanelStage = 0
|
|
else
|
|
self:ShowDiscUpgradeCard()
|
|
return
|
|
end
|
|
end
|
|
if self.nPanelStage == 0 then
|
|
self:HidePanel()
|
|
end
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnBtnClick_Depot()
|
|
self.bDepotOpen = true
|
|
EventManager.Hit("StarTowerSetButtonEnable", false, false)
|
|
CS.GameCameraStackManager.Instance:OpenMainCamera()
|
|
self._mapNode.contentRoot.gameObject:SetActive(false)
|
|
self._mapNode.blurBg.gameObject:SetActive(false)
|
|
self._mapNode.btnBg.gameObject:SetActive(false)
|
|
EventManager.Hit(EventId.StarTowerDepot, AllEnum.StarTowerDepotTog.DiscSkill)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnEvent_ShowDiscSkillActive(tbParam, tbNoteList, callback)
|
|
CS.AdventureModuleHelper.PauseLogic()
|
|
PanelManager.InputDisable()
|
|
self:InitNoteSkillList(tbNoteList)
|
|
self.tbParam = tbParam
|
|
self.tbNoteList = tbNoteList
|
|
self.tbSkillActive = tbParam.tbDiscSkillAct
|
|
self:ShowNoteList(tbParam, callback)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnEvent_StarTowerDiscTips(tbTips)
|
|
self._mapNode.Tips.gameObject:SetActive(true)
|
|
self._mapNode.Tips:StartShowTips(tbTips)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnEvent_OpenNoteDepot()
|
|
if self._mapNode.contentRoot.gameObject.activeSelf == false then
|
|
return
|
|
end
|
|
self.bDepotOpen = true
|
|
CS.GameCameraStackManager.Instance:OpenMainCamera()
|
|
self._mapNode.contentRoot.gameObject:SetActive(false)
|
|
self._mapNode.blurBg.gameObject:SetActive(false)
|
|
self._mapNode.btnBg.gameObject:SetActive(false)
|
|
end
|
|
function TutorialDiscSkillActiveCtrl:OnEvent_Reopen(sName)
|
|
if sName ~= "TutorialDiscSkillActiveCtrl" then
|
|
return
|
|
end
|
|
if self.bDepotOpen then
|
|
self.bDepotOpen = false
|
|
self:ReopenPanel()
|
|
end
|
|
end
|
|
return TutorialDiscSkillActiveCtrl
|