80af235e05
EN: 1.12.0.120 CN: 1.12.0.120 JP: 1.12.0.124 KR: 1.12.0.124
275 lines
9.0 KiB
Lua
275 lines
9.0 KiB
Lua
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
|
local MainlineExCtrl = class("MainlineExCtrl", BaseCtrl)
|
|
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
|
|
local ResTypeAny = GameResourceLoader.ResType.Any
|
|
local AvgData = PlayerData.Avg
|
|
local typeof = typeof
|
|
MainlineExCtrl._mapNodeConfig = {
|
|
goChapterLine = {
|
|
sNodeName = "goChapterLine",
|
|
sComponentName = "GameObject"
|
|
},
|
|
txtTitle = {
|
|
sNodeName = "txtChapterTitle",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
txtChapter = {sNodeName = "txtChapter", sComponentName = "TMP_Text"},
|
|
btnClue = {
|
|
sNodeName = "btnClue",
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtn_ClickOpenClue"
|
|
},
|
|
imgCharHead = {
|
|
sNodeName = "imgCharHead",
|
|
sComponentName = "Image"
|
|
},
|
|
txtCharName = {
|
|
sNodeName = "txtCharName",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
txtPersonalityPercent1 = {
|
|
sNodeName = "txtPersonalityPercent1",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
txtPersonalityPercent2 = {
|
|
sNodeName = "txtPersonalityPercent2",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
txtPersonalityPercent3 = {
|
|
sNodeName = "txtPersonalityPercent3",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
gogoPersonality = {
|
|
sNodeName = "goPersonality",
|
|
sComponentName = "GameObject"
|
|
},
|
|
ctlgoMainLineAvgRoot = {
|
|
sNodeName = "goMainLineAvgRoot",
|
|
sCtrlName = "Game.UI.MainlineEx.MainlineAvgInfoExCtrl"
|
|
},
|
|
ctlgoEnemyInfo = {
|
|
sNodeName = "goEnemyInfo",
|
|
sCtrlName = "Game.UI.MainlineEx.MainlineMonsterInfoCtrl"
|
|
},
|
|
got_fullscreen_blur_01 = {
|
|
sNodeName = "t_fullscreen_blur_01",
|
|
sComponentName = "GameObject"
|
|
},
|
|
btnsnapshot = {
|
|
sNodeName = "snapshot_main",
|
|
sComponentName = "Button",
|
|
callback = "OnBtn_ClickCloseLevelInfoPanel"
|
|
},
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
ctrlClue = {
|
|
sNodeName = "goClue",
|
|
sCtrlName = "Game.UI.MainlineEx.StoryClueCtrl"
|
|
},
|
|
aniBg = {sNodeName = "----Bg----", sComponentName = "Animator"},
|
|
aniSafeRoot = {
|
|
sNodeName = "----SafeAreaRoot----",
|
|
sComponentName = "Animator"
|
|
},
|
|
txtChapterTimeStamp = {sComponentName = "TMP_Text"},
|
|
goChapterComplete = {},
|
|
redDotClue = {},
|
|
txtPersonality1 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Personality_Instinct"
|
|
},
|
|
txtPersonality2 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Personality_Analyze"
|
|
},
|
|
txtPersonality3 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Personality_Chaos"
|
|
},
|
|
txtBtnClue = {sComponentName = "TMP_Text", sLanguageId = "Story_Clue"}
|
|
}
|
|
MainlineExCtrl._mapEventConfig = {
|
|
[EventId.ChoseMainlineStory] = "OnEvent_ChooseMainlineStory",
|
|
SelectMainlineBattle = "OnEvent_SelectMainlineBattle",
|
|
Story_Done = "OnEvent_Story_Done",
|
|
[EventId.UIBackConfirm] = "OnEvent_UIBackConfirm",
|
|
[EventId.UIHomeConfirm] = "OnEvent_BackHome",
|
|
Story_RewardClosed = "OnEvent_Story_RewardClosed"
|
|
}
|
|
MainlineExCtrl._mapRedDotConfig = {
|
|
[RedDotDefine.MainStoryClue] = {sNodeName = "redDotClue"}
|
|
}
|
|
function MainlineExCtrl:Awake()
|
|
local tbParam = self:GetPanelParam()
|
|
self.curChapter = tbParam[1]
|
|
self.fromPanel = tbParam[2] ~= nil and tbParam[2] or 0
|
|
self._mapNode.btnClue.gameObject:SetActive(false)
|
|
self.canvase = self.gameObject:GetComponent("Canvas")
|
|
end
|
|
function MainlineExCtrl:OnEnable()
|
|
self:RefreshPanel()
|
|
end
|
|
function MainlineExCtrl:OnDisable()
|
|
if self.curChapterCtrl ~= nil then
|
|
self:UnbindCtrlByNode(self.curChapterCtrl)
|
|
self.curChapterCtrl = nil
|
|
destroy(self.curChapterObj)
|
|
self.curChapterObj = nil
|
|
end
|
|
end
|
|
function MainlineExCtrl:RefreshPanel()
|
|
local config = ConfigTable.GetData("StoryChapter", self.curChapter)
|
|
NovaAPI.SetTMPText(self._mapNode.txtTitle, config.Desc)
|
|
NovaAPI.SetTMPText(self._mapNode.txtChapter, config.Name)
|
|
NovaAPI.SetTMPText(self._mapNode.txtChapterTimeStamp, config.ChapterYear)
|
|
self:RefreshChapterLine()
|
|
self:RefreshPersonality()
|
|
self:CheckClueReddot()
|
|
end
|
|
function MainlineExCtrl:RefreshChapterLine()
|
|
if self.curChapterCtrl ~= nil then
|
|
self.curChapterCtrl:Refresh(self.canvase)
|
|
return
|
|
end
|
|
if self.curChapterObj ~= nil then
|
|
self.curChapterCtrl = self:BindCtrlByNode(self.curChapterObj, "Game.UI.MainlineEx.ChapterLineCtrl")
|
|
return
|
|
end
|
|
local sPrefabFolder = "UI/MainlineEx/goChapter_%d.prefab"
|
|
local sPrefabPath = string.format(sPrefabFolder, self.curChapter)
|
|
local goObj = self:CreatePrefabInstance(sPrefabPath, self._mapNode.goChapterLine.transform)
|
|
if goObj ~= nil then
|
|
self.curChapterObj = goObj
|
|
self.curChapterCtrl = self:BindCtrlByNode(goObj, "Game.UI.MainlineEx.ChapterLineCtrl")
|
|
self.curChapterCtrl:Refresh(self.canvase)
|
|
end
|
|
end
|
|
function MainlineExCtrl:RefreshPersonality()
|
|
local tbPersonality, sTitle, sFace, tbPData, nTotalCount, sHead = AvgData:CalcPersonality(1)
|
|
NovaAPI.SetPersonalityRing(self._mapNode.gogoPersonality, tbPersonality)
|
|
NovaAPI.SetTMPText(self._mapNode.txtPersonalityPercent1, math.floor(tbPersonality[1] * 100) .. "%")
|
|
NovaAPI.SetTMPText(self._mapNode.txtPersonalityPercent2, math.floor(tbPersonality[2] * 100) .. "%")
|
|
NovaAPI.SetTMPText(self._mapNode.txtPersonalityPercent3, math.floor(tbPersonality[3] * 100) .. "%")
|
|
NovaAPI.SetTMPText(self._mapNode.txtCharName, sTitle)
|
|
local sIcon = "Icon/PlayerHead/" .. sHead
|
|
self:SetPngSprite(self._mapNode.imgCharHead, sIcon)
|
|
end
|
|
function MainlineExCtrl:PlayAnimOut()
|
|
self._mapNode.aniBg:Play("MainlineEx_bg_out")
|
|
self._mapNode.aniSafeRoot:Play("MainlineEx_out")
|
|
local time1 = NovaAPI.GetAnimClipLength(self._mapNode.aniBg, {
|
|
"MainlineEx_bg_out"
|
|
})
|
|
local time2 = NovaAPI.GetAnimClipLength(self._mapNode.aniSafeRoot, {
|
|
"MainlineEx_out"
|
|
})
|
|
local time = math.min(time1, time2)
|
|
self:AddTimer(1, time, function()
|
|
if self.fromPanel ~= 0 and self.fromPanel ~= PanelId.StoryChapter then
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.StoryChapter, self.fromPanel)
|
|
end
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.MainlineEx)
|
|
end)
|
|
end
|
|
function MainlineExCtrl:OnBtn_ClickOpenClue()
|
|
self._mapNode.ctrlClue:RefreshPanel()
|
|
end
|
|
function MainlineExCtrl:OnBtn_ClickCloseLevelInfoPanel()
|
|
self._mapNode.ctlgoMainLineAvgRoot.gameObject:SetActive(false)
|
|
self._mapNode.goChapterComplete:SetActive(false)
|
|
self._mapNode.got_fullscreen_blur_01:SetActive(false)
|
|
self.bAllCompleted = self.curChapterCtrl:IsAllStoryCompleted()
|
|
if self.bAllCompleted then
|
|
AvgData:SetNewLockChapterIndex(self.curChapter)
|
|
if self.fromPanel ~= 0 and self.fromPanel ~= PanelId.StoryChapter then
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.StoryChapter, self.fromPanel)
|
|
else
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.MainlineEx)
|
|
end
|
|
end
|
|
end
|
|
function MainlineExCtrl:OnEvent_ChooseMainlineStory(avgId, bNewestStory)
|
|
self.avgId = avgId
|
|
self._mapNode.ctlgoMainLineAvgRoot.gameObject:SetActive(true)
|
|
self._mapNode.ctlgoMainLineAvgRoot:OpenLevelInfo(avgId, bNewestStory)
|
|
self._mapNode.got_fullscreen_blur_01:SetActive(true)
|
|
NovaAPI.UIEffectSnapShotCapture(self._mapNode.btnsnapshot.gameObject)
|
|
end
|
|
function MainlineExCtrl:OnEvent_SelectMainlineBattle(bConfirm)
|
|
self._mapNode.got_fullscreen_blur_01:SetActive(false)
|
|
local OpenPanel = function()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.RegionBossFormation, AllEnum.RegionBossFormationType.Story, 0, self.avgId)
|
|
end
|
|
if bConfirm then
|
|
local storyCfgData = PlayerData.Avg:GetStoryCfgData(self.avgId)
|
|
if storyCfgData ~= nil then
|
|
local nBattleType = storyCfgData.EnterMethod
|
|
if nBattleType == GameEnum.EnterMethod.JumpFormation then
|
|
PlayerData.Avg:SendMsg_STORY_ENTER(self.avgId, 0)
|
|
return
|
|
end
|
|
end
|
|
EventManager.Hit(EventId.SetTransition, 2, OpenPanel)
|
|
end
|
|
end
|
|
function MainlineExCtrl:OnEvent_Story_Done(bHasReward)
|
|
self:RefreshPanel()
|
|
if bHasReward and self.curChapterCtrl ~= nil then
|
|
self.curChapterCtrl:ForbidClick()
|
|
end
|
|
end
|
|
function MainlineExCtrl:OnEvent_UIBackConfirm(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
self:PlayAnimOut()
|
|
end
|
|
function MainlineExCtrl:OnEvent_BackHome(nPanelId)
|
|
if self._panel._nPanelId ~= nPanelId then
|
|
return
|
|
end
|
|
PanelManager.Home()
|
|
end
|
|
function MainlineExCtrl:OnEvent_Story_RewardClosed()
|
|
if self.curChapterCtrl ~= nil then
|
|
self.bAllCompleted = self.curChapterCtrl:IsAllStoryCompleted()
|
|
if self.bAllCompleted then
|
|
AvgData:SetNewLockChapterIndex(self.curChapter)
|
|
self._mapNode.got_fullscreen_blur_01:SetActive(true)
|
|
self._mapNode.goChapterComplete:SetActive(true)
|
|
self:AddTimer(1, 2.5, function()
|
|
if self.fromPanel ~= 0 and self.fromPanel ~= PanelId.StoryChapter then
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.StoryChapter, self.fromPanel)
|
|
else
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.MainlineEx)
|
|
end
|
|
end, true, true, true)
|
|
end
|
|
end
|
|
end
|
|
function MainlineExCtrl:CheckClueReddot()
|
|
local forEachLine_Ev = function(evConfig)
|
|
local bUnlock = AvgData:IsEvidenceUnlock(evConfig.EvId)
|
|
if not bUnlock then
|
|
return
|
|
end
|
|
local tbEvStory = AvgData.tbEvData[evConfig.EvId]
|
|
if tbEvStory == nil then
|
|
return
|
|
end
|
|
local bUsed = true
|
|
for i, v in ipairs(tbEvStory) do
|
|
local nStoryId = AvgData.CFG_Story[v]
|
|
if not AvgData:IsStoryReaded(nStoryId) then
|
|
bUsed = false
|
|
break
|
|
end
|
|
end
|
|
RedDotManager.SetValid(RedDotDefine.MianStoryClue_Use, evConfig.Id, not bUsed)
|
|
end
|
|
ForEachTableLine(DataTable.StoryEvidence, forEachLine_Ev)
|
|
end
|
|
return MainlineExCtrl
|