Files
StellaSora_DataLua/lua/game/ui/tutorial/tutorialnotectrl.lua
T
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

173 lines
4.7 KiB
Lua

local TutorialNoteCtrl = class("TutorialNoteCtrl", BaseCtrl)
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
TutorialNoteCtrl._mapNodeConfig = {
contentRoot = {
sNodeName = "----SafeAreaRoot----"
},
canvasGroup = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "CanvasGroup"
}
}
TutorialNoteCtrl._mapEventConfig = {
RefreshNoteCount = "OnEvent_RefreshNoteCount"
}
TutorialNoteCtrl._mapRedDotConfig = {}
function TutorialNoteCtrl:InitPanel()
self.tbDiscSubSkill = {}
if nil == self._panel.tbDisc then
return
end
for k, nId in ipairs(self._panel.tbDisc) do
if k <= 3 then
local discData = self._panel.mapDiscData[nId]
if 0 ~= nId and discData ~= nil then
self.tbDiscSubSkill[nId] = {}
local tbSubSkillId = discData:GetAllSubSkill(self.mapNoteCount)
for _, nSubSkillId in ipairs(tbSubSkillId) do
self.tbDiscSubSkill[nId][nSubSkillId] = {}
local mapCfg = ConfigTable.GetData("SecondarySkill", nSubSkillId)
if mapCfg ~= nil then
local tbActiveNote = decodeJson(mapCfg.NeedSubNoteSkills)
for k, v in pairs(tbActiveNote) do
local nNoteId = tonumber(k)
local nNoteCount = tonumber(v)
self.tbDiscSubSkill[nId][nSubSkillId][nNoteId] = {nNeed = nNoteCount, nCur = 0}
end
end
end
end
end
end
end
function TutorialNoteCtrl:GetChangeDiscSkillList(mapNoteChange)
local tbChangeDiscSkill = {}
for nDiscId, discData in pairs(self.tbDiscSubSkill) do
for nSkillId, v in pairs(discData) do
local bChange = false
local changeNoteList = {}
for nNoteId, data in pairs(v) do
if mapNoteChange[nNoteId] ~= nil then
local nCount = mapNoteChange[nNoteId].nCount
local bLucky = mapNoteChange[nNoteId].bLucky
if data.nCur < data.nNeed then
changeNoteList[nNoteId] = {
nChangeCount = nCount,
nNeed = data.nNeed,
bLucky = bLucky
}
bChange = true
end
data.nCur = data.nCur + nCount
end
end
if bChange then
table.insert(tbChangeDiscSkill, {
nDiscId = nDiscId,
nSkillId = nSkillId,
tbChangeNote = changeNoteList
})
end
end
end
return tbChangeDiscSkill
end
function TutorialNoteCtrl:Awake()
self.canvas = self.gameObject:GetComponent("Canvas")
self.mapNoteCount = {}
end
function TutorialNoteCtrl:OnEnable()
self:InitPanel()
end
function TutorialNoteCtrl:OnEvent_RefreshNoteCount(mapNote, mapChange, mapChangeSecondarySkill, bManual)
local tbChange = {}
local tbLose = {}
local bChange = false
if next(self.mapNoteCount) == nil then
for k, v in pairs(mapNote) do
if 0 < v then
bChange = true
tbChange[k] = {nCount = v, bLucky = false}
end
end
else
for k, v in pairs(mapNote) do
local nLastCount = self.mapNoteCount[k] or 0
if v > nLastCount then
local bLucky = false
if mapChange ~= nil and 0 < mapChange[k].LuckyLevel then
bLucky = true
end
bChange = true
tbChange[k] = {
nCount = v - nLastCount,
bLucky = bLucky
}
elseif v < nLastCount then
tbLose[k] = {
nCount = v - nLastCount
}
end
end
end
local tbTips = {}
if mapChangeSecondarySkill ~= nil then
for _, v in ipairs(mapChangeSecondarySkill) do
if v.Active == false then
table.insert(tbTips, {
nSkillId = v.SecondaryId,
nTipType = AllEnum.StarTowerTipsType.DiscTip
})
end
end
end
if 0 < #tbTips then
EventManager.Hit("StarTowerDiscTips", tbTips)
end
local tbNoteReduceTips = {}
for nNoteId, data in pairs(tbLose) do
local nCount = math.abs(data.nCount)
table.insert(tbNoteReduceTips, {
nNoteId = nNoteId,
nCount = nCount,
nTipType = AllEnum.StarTowerTipsType.NoteTip
})
end
if 0 < #tbNoteReduceTips then
EventManager.Hit("StarTowerDiscTips", tbNoteReduceTips)
end
local tbDiscSkillChange = self:GetChangeDiscSkillList(tbChange)
local tbDiscSkillAct = {}
for i = 1, 3 do
local nDiscId = self._panel.tbDisc[i]
local discData = self._panel.mapDiscData[nDiscId]
if discData ~= nil and mapChangeSecondarySkill ~= nil then
local tbSecondarySkills = discData:GetAllSubSkill(self.mapNoteCount)
for _, v in ipairs(tbSecondarySkills) do
for _, data in ipairs(mapChangeSecondarySkill) do
if data.Active == true and data.SecondaryId == v then
table.insert(tbDiscSkillAct, {
nDiscId = nDiscId,
nSkillId = data.SecondaryId
})
break
end
end
end
end
end
if bChange and not bManual then
table.sort(tbDiscSkillChange, function(a, b)
return a.nSkillId < b.nSkillId
end)
local tbParam = {
tbSkill = tbDiscSkillChange,
tbNoteChange = tbChange,
tbDiscSkillAct = tbDiscSkillAct
}
EventManager.Hit("StarTowerShowDiscSkill", tbParam, clone(mapNote))
end
self.mapNoteCount = clone(mapNote)
end
return TutorialNoteCtrl