35c8d87e86
EN: 1.4.0.73 CN: 1.4.0.74 JP: 1.4.0.77 KR: 1.4.0.80
293 lines
9.1 KiB
Lua
293 lines
9.1 KiB
Lua
local StorySetCtrl = class("StorySetCtrl", BaseCtrl)
|
|
StorySetCtrl._mapNodeConfig = {
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
imgBgPanel = {},
|
|
imgBgChapter = {sComponentName = "Image"},
|
|
goList = {sNodeName = "---List---"},
|
|
chapterLsv = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
goInfo = {sNodeName = "---Info---"},
|
|
imgChapterIcon = {sComponentName = "Image"},
|
|
txtTitle = {sComponentName = "TMP_Text"},
|
|
txtChapter = {sComponentName = "TMP_Text"},
|
|
sectionLsv = {
|
|
sComponentName = "LoopScrollView"
|
|
}
|
|
}
|
|
StorySetCtrl._mapEventConfig = {
|
|
[EventId.UIBackConfirm] = "OnEvent_Back",
|
|
[EventId.UIHomeConfirm] = "OnEvent_BackHome",
|
|
[EventId.TransAnimOutClear] = "OnEvent_TransAnimOutClear",
|
|
ReceiveStorySetRewardSuc = "OnEvent_ReceiveStorySetRewardSuc",
|
|
StorySetChapterRefresh = "OnEvent_StorySetChapterRefresh"
|
|
}
|
|
StorySetCtrl._mapRedDotConfig = {}
|
|
local panelType_chapter = 1
|
|
local panelType_Section = 2
|
|
function StorySetCtrl:Refresh()
|
|
if self.nPanelType == panelType_chapter then
|
|
self.animRoot:Play("StorySetPanel_Switch_List", 0, 0)
|
|
self:RefreshChapter()
|
|
elseif self.nPanelType == panelType_Section then
|
|
self.animRoot:Play("StorySetPanel_Switch_Info", 0, 0)
|
|
self:RefreshSection()
|
|
end
|
|
end
|
|
function StorySetCtrl:RefreshChapter()
|
|
self._mapNode.goList.gameObject:SetActive(true)
|
|
self._mapNode.goInfo.gameObject:SetActive(false)
|
|
for nInstanceId, v in pairs(self.tbChapterGrid) do
|
|
self:UnbindCtrlByNode(v)
|
|
self.tbChapterGrid[nInstanceId] = nil
|
|
end
|
|
if #self.tbChapter == 0 then
|
|
self._mapNode.chapterLsv:Init(4, self, self.OnRefreshChapterGrid, self.OnChapterGridClick)
|
|
else
|
|
self._mapNode.chapterLsv:Init(#self.tbChapter, self, self.OnRefreshChapterGrid, self.OnChapterGridClick, true)
|
|
if self.bLocation then
|
|
self.bLocation = false
|
|
local nNewIndex = 0
|
|
for k, v in ipairs(self.tbChapter) do
|
|
if v ~= nil and v.bUnlock then
|
|
local nChapterId = v.nId
|
|
local mapCfg = ConfigTable.GetData("StorySetChapter", nChapterId)
|
|
if mapCfg ~= nil and mapCfg.IsShow then
|
|
nNewIndex = k
|
|
end
|
|
end
|
|
end
|
|
if 1 < nNewIndex then
|
|
do
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.chapterLsv:SetScrollGridPos(nNewIndex - 1, 0.5, 0)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
end
|
|
else
|
|
local nRecentChapterId = PlayerData.StorySet:GetRecentChapterId()
|
|
local nNewIndex = 0
|
|
for k, v in ipairs(self.tbChapter) do
|
|
if v ~= nil and v.bUnlock then
|
|
local nChapterId = v.nId
|
|
local mapCfg = ConfigTable.GetData("StorySetChapter", nChapterId)
|
|
if mapCfg ~= nil and mapCfg.Id == nRecentChapterId then
|
|
nNewIndex = k
|
|
end
|
|
end
|
|
end
|
|
if 0 < nNewIndex then
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.chapterLsv:SetScrollGridPos(nNewIndex - 1, 0)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
else
|
|
do
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.chapterLsv:SetScrollGridPos(#self.tbChapter, 0)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function StorySetCtrl:OnRefreshChapterGrid(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local data = self.tbChapter[nIndex]
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
if not self.tbChapterGrid[nInstanceId] then
|
|
self.tbChapterGrid[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.StorySet.StorySetChapterItemCtrl")
|
|
end
|
|
self.tbChapterGrid[nInstanceId]:RefreshItem(data)
|
|
end
|
|
function StorySetCtrl:OnChapterGridClick(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
local data = self.tbChapter[nIndex]
|
|
if data == nil then
|
|
return
|
|
end
|
|
local mapCfg = ConfigTable.GetData("StorySetChapter", data.nId)
|
|
if mapCfg ~= nil then
|
|
if not mapCfg.IsShow then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StorySet_Chapter_Empty"))
|
|
return
|
|
end
|
|
if not data.bUnlock then
|
|
if mapCfg.LockText ~= "" then
|
|
EventManager.Hit(EventId.OpenMessageBox, mapCfg.LockText)
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StorySet_Chapter_Lock"))
|
|
end
|
|
return
|
|
end
|
|
end
|
|
local nAnimLen = 0
|
|
if self.tbChapterGrid[nInstanceId] ~= nil then
|
|
nAnimLen = self.tbChapterGrid[nInstanceId]:PlayAnim(false)
|
|
end
|
|
self.nSelectIndex = nIndex
|
|
self.bResetLsvPos = true
|
|
self.nPanelType = panelType_Section
|
|
CS.WwiseAudioManager.Instance:PlaySound("ui_mainline_story_menu")
|
|
if 0 < nAnimLen then
|
|
self:AddTimer(1, nAnimLen, function()
|
|
self:Refresh()
|
|
end, true, true, true)
|
|
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLen)
|
|
else
|
|
self:Refresh()
|
|
end
|
|
end
|
|
function StorySetCtrl:RefreshSection()
|
|
self._mapNode.goList.gameObject:SetActive(false)
|
|
self._mapNode.goInfo.gameObject:SetActive(true)
|
|
for nInstanceId, v in pairs(self.tbSectionGrid) do
|
|
self:UnbindCtrlByNode(v)
|
|
self.tbSectionGrid[nInstanceId] = nil
|
|
end
|
|
local data = self.tbChapter[self.nSelectIndex]
|
|
if nil ~= data then
|
|
self.tbSectionList = data.tbSectionList
|
|
self._mapNode.sectionLsv:Init(#self.tbSectionList, self, self.OnRefreshSectionGrid, self.OnSectionGridClick, not self.bResetLsvPos)
|
|
local mapChapterCfg = ConfigTable.GetData("StorySetChapter", data.nId)
|
|
if mapChapterCfg ~= nil then
|
|
self:SetPngSprite(self._mapNode.imgChapterIcon, "Icon/MapEpisode/" .. mapChapterCfg.Image)
|
|
self:SetPngSprite(self._mapNode.imgBgChapter, "Icon/MapEpisode/" .. mapChapterCfg.Bg)
|
|
NovaAPI.SetTMPText(self._mapNode.txtTitle, ConfigTable.GetUIText("StorySet_Title") .. mapChapterCfg.Title)
|
|
NovaAPI.SetTMPText(self._mapNode.txtChapter, mapChapterCfg.Name)
|
|
end
|
|
end
|
|
self.bResetLsvPos = false
|
|
end
|
|
function StorySetCtrl:OnRefreshSectionGrid(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local data = self.tbSectionList[nIndex]
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
if not self.tbSectionGrid[nInstanceId] then
|
|
self.tbSectionGrid[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.StorySet.StorySetSectionItemCtrl")
|
|
end
|
|
self.tbSectionGrid[nInstanceId]:RefreshItem(data)
|
|
end
|
|
function StorySetCtrl:OnSectionGridClick(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local data = self.tbSectionList[nIndex]
|
|
if data.nStatus == AllEnum.StorySetStatus.Lock then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("StorySet_Section_Lock_Tip"))
|
|
return
|
|
end
|
|
local mapCfg = ConfigTable.GetData("StorySetSection", data.nId)
|
|
if mapCfg ~= nil then
|
|
local avgEndCallback = function()
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.PureAvgStory)
|
|
self.bGetReward = false
|
|
self.bTransitionEnd = false
|
|
if data.nStatus == AllEnum.StorySetStatus.UnLock then
|
|
PlayerData.StorySet:ReceiveStorySetReward(mapCfg.ChapterId, data.nId, function(netMsg)
|
|
self.bGetReward = true
|
|
self.tbReward = netMsg
|
|
end)
|
|
end
|
|
end
|
|
local mapData = {
|
|
nType = AllEnum.StoryAvgType.Plot,
|
|
sAvgId = mapCfg.AVGId,
|
|
nNodeId = nil,
|
|
callback = avgEndCallback
|
|
}
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.PureAvgStory, mapData)
|
|
end
|
|
end
|
|
function StorySetCtrl:ShowGetReward()
|
|
if self.bGetReward and self.tbReward ~= nil and self.bTransitionEnd then
|
|
UTILS.OpenReceiveByChangeInfo(self.tbReward, function()
|
|
self.tbChapter = PlayerData.StorySet:GetAllChapterList()
|
|
if self.nPanelType == panelType_Section then
|
|
self:RefreshSection()
|
|
end
|
|
end)
|
|
self.bGetReward = false
|
|
self.tbReward = nil
|
|
self.bTransitionEnd = false
|
|
end
|
|
end
|
|
function StorySetCtrl:Awake()
|
|
self.nSelectIndex = 0
|
|
self.nPanelType = panelType_chapter
|
|
self.bResetLsvPos = true
|
|
local tbParam = self:GetPanelParam()
|
|
if type(tbParam) == "table" then
|
|
self.bLocation = tbParam[1]
|
|
end
|
|
end
|
|
function StorySetCtrl:OnEnable()
|
|
self.tbChapterGrid = {}
|
|
self.tbSectionGrid = {}
|
|
self.tbChapter = PlayerData.StorySet:GetAllChapterList()
|
|
self.animRoot = self.gameObject:GetComponent("Animator")
|
|
self:Refresh()
|
|
self.animRoot:Play("StorySetPanel_in", 0, 0)
|
|
end
|
|
function StorySetCtrl:OnDisable()
|
|
for _, v in pairs(self.tbChapterGrid) do
|
|
self:UnbindCtrlByNode(v)
|
|
end
|
|
self.tbChapterGrid = {}
|
|
for _, v in pairs(self.tbSectionGrid) do
|
|
self:UnbindCtrlByNode(v)
|
|
end
|
|
self.tbSectionGrid = {}
|
|
end
|
|
function StorySetCtrl:OnDestroy()
|
|
end
|
|
function StorySetCtrl:OnRelease()
|
|
end
|
|
function StorySetCtrl:OnEvent_Back(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
if self.nPanelType == panelType_Section then
|
|
self.bResetLsvPos = true
|
|
self.nPanelType = panelType_chapter
|
|
self:Refresh()
|
|
else
|
|
EventManager.Hit(EventId.CloesCurPanel)
|
|
end
|
|
end
|
|
function StorySetCtrl:OnEvent_BackHome(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
PanelManager.Home()
|
|
end
|
|
function StorySetCtrl:OnEvent_TransAnimOutClear()
|
|
self.bTransitionEnd = true
|
|
self:ShowGetReward()
|
|
end
|
|
function StorySetCtrl:OnEvent_ReceiveStorySetRewardSuc()
|
|
self:ShowGetReward()
|
|
end
|
|
function StorySetCtrl:OnEvent_StorySetChapterRefresh()
|
|
if self.bSendMsg then
|
|
return
|
|
end
|
|
self.bSendMsg = true
|
|
local serverCallback = function()
|
|
self.tbChapter = PlayerData.StorySet:GetAllChapterList()
|
|
self.bSendMsg = false
|
|
if self.nPanelType == panelType_chapter then
|
|
self:RefreshChapter()
|
|
end
|
|
end
|
|
PlayerData.StorySet:SendGetStorySetData(serverCallback)
|
|
end
|
|
return StorySetCtrl
|