Files
StellaSora_DataLua/lua/game/ui/tutorial/tutorialdiscskillactivectrl.lua
SL1900 5e0d58cfad 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
2025-12-03 01:00:00 +09:00

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