Files
StellaSora_DataLua/lua/game/ui/play_icecreamtruck/icecreamlevelsselectctrl.lua
T
SL1900 fb98bcdc16 Hotfix - 1.13.0.126
EN: 1.13.0.126
CN: 1.13.0.126
JP: 1.13.0.130
KR: 1.13.0.132
2026-07-23 17:00:00 +09:00

156 lines
5.4 KiB
Lua

local TimerManager = require("GameCore.Timer.TimerManager")
local IceCreamLevelsSelectCtrl = class("IceCreamLevelsSelectCtrl", BaseCtrl)
local SpineManager = require("Game.Spine.SpineManager")
IceCreamLevelsSelectCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
LevelDetailsPanel = {
sCtrlName = "Game.UI.Play_IceCreamTruck.IceCreamLevelDetailCtrl"
},
LevelGroup = {
nCount = 4,
sCtrlName = "Game.UI.Play_IceCreamTruck.IceCreamLevelGroupCtrl"
},
btnTarget = {
sComponentName = "UIButton",
callback = "OnBtnClick_Target"
},
TMPBtnTarget = {
sComponentName = "TMP_Text",
sLanguageId = "IceCreamTruck_Target"
},
goRedDotTarget = {}
}
IceCreamLevelsSelectCtrl._mapEventConfig = {}
function IceCreamLevelsSelectCtrl:Awake()
end
function IceCreamLevelsSelectCtrl:FadeIn()
end
function IceCreamLevelsSelectCtrl:FadeOut()
end
function IceCreamLevelsSelectCtrl:OnEnable()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.animatorRoot = self.gameObject:GetComponent("Animator")
self:InitLevel(self.nActId)
self:RegisterTaskRedNode()
EventManager.Hit(EventId.SetTransition)
end
function IceCreamLevelsSelectCtrl:OnDisable()
if self._tmrSwitchDetail ~= nil then
TimerManager.Remove(self._tmrSwitchDetail, false)
self._tmrSwitchDetail = nil
end
SpineManager.ClearAll()
end
function IceCreamLevelsSelectCtrl:OnDestroy()
SpineManager.ClearAll()
end
function IceCreamLevelsSelectCtrl:InitLevel(nActId)
self.IceCreamActData = PlayerData.Activity:GetActivityDataById(nActId)
if self.IceCreamActData == nil then
printError("没有冰淇淋活动数据")
return
end
self.AllLevelTypeTable = self.IceCreamActData:GetLevelTypeTable()
if self.AllLevelTypeTable == nil then
printError("关卡组信息为空")
return
end
local nGroupCount = #self._mapNode.LevelGroup
for i = 1, nGroupCount do
local value = self.AllLevelTypeTable[i]
if value ~= nil then
self._mapNode.LevelGroup[i].gameObject:SetActive(true)
self:OnRefreshLevelGroup(i, value)
else
self._mapNode.LevelGroup[i].gameObject:SetActive(false)
end
end
if nGroupCount < #self.AllLevelTypeTable then
printError(string.format("[IceCream] LevelType 数(%d) 超出预绑定 LevelGroup 数(%d)", #self.AllLevelTypeTable, nGroupCount))
end
end
function IceCreamLevelsSelectCtrl:OnRefreshLevelGroup(gridIndex, tbLevels)
self._mapNode.LevelGroup[gridIndex]:InitData(self.nActId, gridIndex, tbLevels, self)
end
function IceCreamLevelsSelectCtrl:OpenLevelDetail_Animator(nTypeIndex)
if nTypeIndex < 1 or 4 < nTypeIndex then
return
end
local sAnimatorIn = string.format("IceCreamLevelsSelectPanel_in%d", nTypeIndex)
self.animatorRoot:Play(sAnimatorIn, 0, 0)
local nAnimTime = NovaAPI.GetAnimClipLength(self.animatorRoot, {sAnimatorIn})
EventManager.Hit(EventId.TemporaryBlockInput, nAnimTime)
end
function IceCreamLevelsSelectCtrl:OpenNextLevelDetail(nTypeIndex, NextTypeIndex)
if nTypeIndex < 1 or 4 < nTypeIndex or NextTypeIndex < 1 or 4 < NextTypeIndex then
return
end
local sAnimatorOut = string.format("IceCreamLevelsSelectPanel_out%d", nTypeIndex)
self.animatorRoot:Play(sAnimatorOut, 0, 0)
local nAnimTime = NovaAPI.GetAnimClipLength(self.animatorRoot, {sAnimatorOut})
if type(nAnimTime) ~= "number" or nAnimTime <= 0 then
printWarn("[IceCream] 拿不到 out 动画时长,直接切到下一关详情:anim=" .. sAnimatorOut)
EventManager.Hit("Event_OpenLevelDetail", NextTypeIndex)
return
end
EventManager.Hit(EventId.TemporaryBlockInput, nAnimTime)
if self._tmrSwitchDetail ~= nil then
TimerManager.Remove(self._tmrSwitchDetail, false)
self._tmrSwitchDetail = nil
end
self._tmrSwitchDetail = self:AddTimer(1, nAnimTime, function()
self._tmrSwitchDetail = nil
EventManager.Hit("Event_OpenLevelDetail", NextTypeIndex)
end, true, true, true)
end
function IceCreamLevelsSelectCtrl:CloseLevelDetail_AnimatorOut(nTypeIndex)
if nTypeIndex < 1 or 4 < nTypeIndex then
return
end
local sAnimatorOut = string.format("IceCreamLevelsSelectPanel_out%d", nTypeIndex)
self.animatorRoot:Play(sAnimatorOut, 0, 0)
end
function IceCreamLevelsSelectCtrl:RegisterTaskRedNode()
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
if mapActivityData ~= nil then
local nGroupId = mapActivityData.MidGroupId
local mapGroupData = PlayerData.Activity:GetActivityGroupDataById(nGroupId)
if mapGroupData ~= nil then
local actData = mapGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task)
if actData ~= nil then
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task_Group, {
nGroupId,
actData.ActivityId,
mapActivityData.MiniGameRedDot
}, self._mapNode.goRedDotTarget)
else
self._mapNode.goRedDotTarget:SetActive(false)
end
else
self._mapNode.goRedDotTarget:SetActive(false)
end
else
self._mapNode.goRedDotTarget:SetActive(false)
end
end
function IceCreamLevelsSelectCtrl:OnBtnClick_Target()
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
if mapActivityData ~= nil then
local nGroupId = mapActivityData.MidGroupId
local mapGroupData = PlayerData.Activity:GetActivityGroupDataById(nGroupId)
if mapGroupData ~= nil then
local actData = mapGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task)
if actData ~= nil then
EventManager.Hit(EventId.OpenPanel, self._panel.nQuestPanelId, actData.ActivityId, 4)
end
end
end
end
return IceCreamLevelsSelectCtrl