Files
StellaSora_DataLua/lua/game/ui/play_penguincard/penguincardselectctrl.lua
T
SL1900 86d82306fe Update - 1.7.0.88
EN: 1.7.0.88
CN: 1.7.0.90
JP: 1.7.0.91
KR: 1.7.0.94
2026-02-24 22:00:00 +09:00

121 lines
3.8 KiB
Lua

local PenguinCardSelectCtrl = class("PenguinCardSelectCtrl", BaseCtrl)
local WwiseManger = CS.WwiseAudioManager.Instance
PenguinCardSelectCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
btnQuest = {
sComponentName = "UIButton",
callback = "OnBtnClick_Quest"
},
txtQuest = {
sComponentName = "TMP_Text",
sLanguageId = "PenguinCard_Btn_Quest"
},
reddotQuest = {},
sv = {sComponentName = "ScrollRect"},
sc = {
sNodeName = "sv",
sComponentName = "UIScrollToClick"
},
LevelContent = {sComponentName = "Transform"},
goHardLevel = {},
goNormalLevel = {}
}
PenguinCardSelectCtrl._mapEventConfig = {
PenguinCard_ClickLevel = "OnEvent_Click",
PenguinCard_EnterLevel = "OnEvent_Enter"
}
PenguinCardSelectCtrl._mapRedDotConfig = {
[RedDotDefine.Activity_PenguinCard_AllQuest] = {
sNodeName = "reddotQuest"
}
}
function PenguinCardSelectCtrl:Refresh()
self.goFirstLock = nil
self.tbLevel = self.actData:GetLevelList()
delChildren(self._mapNode.LevelContent)
for k, nLevelId in ipairs(self.tbLevel) do
local mapCfg = ConfigTable.GetData("ActivityPenguinCardLevel", nLevelId)
if mapCfg then
if mapCfg.ScoreLevel then
self:RefreshHard(k, nLevelId)
else
self:RefreshNormal(k, nLevelId)
end
end
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if self._panel.nPos then
NovaAPI.SetHorizontalNormalizedPosition(self._mapNode.sv, self._panel.nPos)
elseif self.goFirstLock ~= nil then
self._mapNode.sc:ScrollToClick(self.goFirstLock, 0.01)
self.goFirstLock = nil
else
NovaAPI.SetHorizontalNormalizedPosition(self._mapNode.sv, 1)
end
end
cs_coroutine.start(wait)
EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_PenguinCard_304")
end
function PenguinCardSelectCtrl:RefreshHard(nIndex, nLevelId)
local goObj = instantiate(self._mapNode.goHardLevel, self._mapNode.LevelContent)
local ctrlObj = self:BindCtrlByNode(goObj, "Game.UI.Play_PenguinCard.PenguinCardLevelGridCtrl")
self.tbGridCtrl[nIndex] = ctrlObj
goObj:SetActive(true)
ctrlObj:RefreshHard(self.actData, nLevelId)
local bLock = ctrlObj:GetLock()
if bLock and not self.goFirstLock then
self.goFirstLock = goObj
end
end
function PenguinCardSelectCtrl:RefreshNormal(nIndex, nLevelId)
local goObj = instantiate(self._mapNode.goNormalLevel, self._mapNode.LevelContent)
local ctrlObj = self:BindCtrlByNode(goObj, "Game.UI.Play_PenguinCard.PenguinCardLevelGridCtrl")
self.tbGridCtrl[nIndex] = ctrlObj
goObj:SetActive(true)
ctrlObj:RefreshNormal(self.actData, nIndex, nLevelId)
local bLock = ctrlObj:GetLock()
if bLock and not self.goFirstLock then
self.goFirstLock = goObj
end
end
function PenguinCardSelectCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.actData = PlayerData.Activity:GetActivityDataById(self.nActId)
self.tbGridCtrl = {}
end
function PenguinCardSelectCtrl:OnEnable()
self:Refresh()
end
function PenguinCardSelectCtrl:OnDisable()
for k, v in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(v)
self.tbGridCtrl[k] = nil
end
self.tbGridCtrl = {}
self._panel.nPos = NovaAPI.GetHorizontalNormalizedPosition(self._mapNode.sv)
self.actData:SkipLevelRedDot()
end
function PenguinCardSelectCtrl:OnDestroy()
end
function PenguinCardSelectCtrl:OnBtnClick_Quest()
EventManager.Hit(EventId.OpenPanel, PanelId.PenguinCardQuest, self.nActId)
end
function PenguinCardSelectCtrl:OnEvent_Click(go)
self._mapNode.sc:ScrollToClick(go)
end
function PenguinCardSelectCtrl:OnEvent_Enter(callback)
local ani = self.gameObject:GetComponent("Animator")
ani:Play("PenguinCardSelect_out")
WwiseManger:PostEvent("Mode_Card_level")
self:AddTimer(1, 0.5, callback, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.5)
end
return PenguinCardSelectCtrl