5f417fbe9d
EN: 1.3.0.69 CN: 1.3.0.70 JP: 1.3.0.72 KR: 1.3.0.76
257 lines
8.5 KiB
Lua
257 lines
8.5 KiB
Lua
local AVProVideoGUICtrl = class("AVProVideoGUICtrl", BaseCtrl)
|
|
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
|
local PlayerData = require("GameCore.Data.PlayerData")
|
|
AVProVideoGUICtrl._mapNodeConfig = {
|
|
PlayerVideo = {},
|
|
cg_a = {
|
|
sNodeName = "canvas_group_a",
|
|
sComponentName = "CanvasGroup"
|
|
},
|
|
img_back = {sComponentName = "Image"},
|
|
btnSkip = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Skip",
|
|
sAction = "Skip"
|
|
},
|
|
cg_b = {
|
|
sNodeName = "canvas_group_b",
|
|
sComponentName = "CanvasGroup"
|
|
},
|
|
img_front = {sComponentName = "Image"}
|
|
}
|
|
AVProVideoGUICtrl._mapEventConfig = {
|
|
CS2LUA_Video_FirstFrameReady = "OnEvent_VideoFirstFrameReady",
|
|
CS2LUA_Video_Finished = "OnEvent_VideoFinished"
|
|
}
|
|
function AVProVideoGUICtrl:Awake()
|
|
self.tbGamepadUINode = self:GetGamepadUINode()
|
|
if not GamepadUIManager.GetInputState() then
|
|
for _, v in pairs(self.tbGamepadUINode) do
|
|
if v.sComponentName == "NaviButton" then
|
|
NovaAPI.SetNaviButtonAction(v.mapNode, false)
|
|
end
|
|
end
|
|
end
|
|
self.sVideoFileName = ""
|
|
self.bTrans = true
|
|
self.nTransDuration = 0.2
|
|
self.bFade = true
|
|
self.nFadeDuration = 0.2
|
|
self.bSkipable = true
|
|
self.bEndTrans = true
|
|
self.bEndFade = true
|
|
local tbParam = self:GetPanelParam()
|
|
self:SetParam(tbParam)
|
|
self.nVideoDuration = 10
|
|
self.timerVideo = nil
|
|
self.nOffset = 0.2
|
|
end
|
|
function AVProVideoGUICtrl:SetParam(tbParam, bActive)
|
|
if type(bActive) == "boolean" then
|
|
self.gameObject:SetActive(bActive == true)
|
|
self.bInAvg = true
|
|
if self.bAddedInAvg ~= true then
|
|
self.bAddedInAvg = true
|
|
GamepadUIManager.AddGamepadUINode("AVG", self.tbGamepadUINode)
|
|
end
|
|
end
|
|
if type(tbParam) == "table" then
|
|
if type(tbParam[1]) == "string" and tbParam[1] ~= "" then
|
|
self.sVideoFileName = tbParam[1]
|
|
end
|
|
if type(tbParam[2]) == "boolean" then
|
|
self.bTrans = tbParam[2]
|
|
end
|
|
if type(tbParam[3]) == "number" then
|
|
self.nTransDuration = tbParam[3]
|
|
end
|
|
if type(tbParam[4]) == "boolean" then
|
|
self.bFade = tbParam[4]
|
|
end
|
|
if type(tbParam[5]) == "number" then
|
|
self.nFadeDuration = tbParam[5]
|
|
end
|
|
if type(tbParam[6]) == "boolean" then
|
|
self.bSkipable = tbParam[6]
|
|
end
|
|
if type(tbParam[7]) == "boolean" then
|
|
self.bEndTrans = tbParam[7]
|
|
else
|
|
self.bEndTrans = self.bTrans
|
|
end
|
|
if type(tbParam[8]) == "boolean" then
|
|
self.bEndFade = tbParam[8]
|
|
else
|
|
self.bEndFade = self.bFade
|
|
end
|
|
if type(tbParam[9]) == "number" then
|
|
local nColor = tbParam[9]
|
|
NovaAPI.SetImageColor(self._mapNode.img_front, nColor == 1 and Color.white or Color.black)
|
|
end
|
|
end
|
|
end
|
|
function AVProVideoGUICtrl:FadeIn()
|
|
if self:GetPanelId() == PanelId.AvgEditor then
|
|
return
|
|
end
|
|
if self:GetPanelId() == PanelId.AvgST and self.bInAvg ~= true then
|
|
return
|
|
end
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cg_a, true)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cg_a, true)
|
|
self._mapNode.btnSkip.gameObject:SetActive(false)
|
|
if self.bTrans == true then
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_a, 0)
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cg_b, true)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cg_b, true)
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_b, 0)
|
|
NovaAPI.SetCanvasGroupDoFade(self._mapNode.cg_b, 1, self.nTransDuration, true)
|
|
self:AddTimer(1, self.nTransDuration + self.nOffset, self.START, true, true, true)
|
|
else
|
|
self:START()
|
|
end
|
|
end
|
|
function AVProVideoGUICtrl:START()
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_a, 1)
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cg_b, false)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cg_b, false)
|
|
if self.bFade == true then
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_b, 1)
|
|
NovaAPI.SetCanvasGroupDoFade(self._mapNode.cg_b, 0, self.nFadeDuration, true)
|
|
else
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_b, 0)
|
|
end
|
|
local tbVideoFile, tbSoundTrack, tbSrtFile = self:ParseFileName()
|
|
NovaAPI.PlayVideo(self._mapNode.PlayerVideo, tbVideoFile, tbSoundTrack, tbSrtFile)
|
|
end
|
|
function AVProVideoGUICtrl:OnEvent_VideoFirstFrameReady(nVideoDuration)
|
|
NovaAPI.DispatchEventWithData("VIDEO_START")
|
|
EventManager.Hit("VIDEO_START")
|
|
self._mapNode.btnSkip.gameObject:SetActive(self.bSkipable == true)
|
|
self.nVideoDuration = nVideoDuration
|
|
if self.bEndFade == true then
|
|
self.timerVideo = self:AddTimer(1, self.nVideoDuration - self.nFadeDuration - self.nOffset, self.DoFadeOut, true, true, true)
|
|
end
|
|
end
|
|
function AVProVideoGUICtrl:DoFadeOut()
|
|
self._mapNode.btnSkip.gameObject:SetActive(false)
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cg_b, true)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cg_b, true)
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_b, 0)
|
|
NovaAPI.SetCanvasGroupDoFade(self._mapNode.cg_b, 1, self.nFadeDuration, true)
|
|
self.timerVideo = nil
|
|
end
|
|
function AVProVideoGUICtrl:OnEvent_VideoFinished(bIsSkip)
|
|
self._mapNode.btnSkip.gameObject:SetActive(false)
|
|
NovaAPI.DispatchEventWithData("VIDEO_FINISHED", nil, bIsSkip == true)
|
|
if bIsSkip == true then
|
|
self.bEndTrans = true
|
|
self.nTransDuration = self.nTransDuration > 0 and self.nTransDuration or 0.2
|
|
self.bEndFade = true
|
|
self.nFadeDuration = 0.2
|
|
if self.timerVideo ~= nil then
|
|
self.timerVideo:Cancel(true)
|
|
else
|
|
self:DoFadeOut()
|
|
end
|
|
self:AddTimer(1, self.nFadeDuration, self.DoTransOut, true, true, true)
|
|
else
|
|
self:DoTransOut()
|
|
end
|
|
end
|
|
function AVProVideoGUICtrl:DoTransOut()
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cg_a, false)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cg_a, false)
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_a, 0)
|
|
NovaAPI.DispatchEventWithData("CLOSE_VIDEO")
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cg_b, true)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cg_b, true)
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cg_b, 1)
|
|
if self.bInAvg == true then
|
|
EventManager.Hit("VIDEO_FINISHED")
|
|
elseif self.bEndTrans == true then
|
|
NovaAPI.SetCanvasGroupDoFade(self._mapNode.cg_b, 0, self.nTransDuration, true)
|
|
self:AddTimer(1, self.nTransDuration + self.nOffset, self.END, true, true, true)
|
|
else
|
|
self:END()
|
|
end
|
|
end
|
|
function AVProVideoGUICtrl:END()
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.ProVideoGUI)
|
|
EventManager.Hit("VIDEO_END")
|
|
end
|
|
function AVProVideoGUICtrl:OnBtnClick_Skip()
|
|
if self.timerVideo ~= nil then
|
|
self.timerVideo:Pause(true)
|
|
end
|
|
NovaAPI.DispatchEventWithData("Pause_Video")
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = ConfigTable.GetUIText("Video_SkipTip"),
|
|
callbackConfirm = function()
|
|
self._mapNode.btnSkip.gameObject:SetActive(false)
|
|
NovaAPI.DispatchEventWithData("Jump_Video")
|
|
end,
|
|
callbackCancel = function()
|
|
if self.timerVideo ~= nil then
|
|
self.timerVideo:Pause(false)
|
|
end
|
|
NovaAPI.DispatchEventWithData("Resume_Video")
|
|
end
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
function AVProVideoGUICtrl:ParseFileName()
|
|
local sBaseName = self.sVideoFileName
|
|
local curTxtLan = Settings.sCurrentTxtLanguage
|
|
local curVoLan = Settings.sCurrentVoLanguage
|
|
local EnumLan = AllEnum.Language
|
|
local sGenderSurfix = PlayerData.Base:GetPlayerSex() == true and "_MP" or "_FP"
|
|
local sVoTag = curVoLan == EnumLan.CN and "CNVA" or "JPVA"
|
|
local sLanSurfix = ""
|
|
if curTxtLan == EnumLan.CN then
|
|
sLanSurfix = "_CN"
|
|
elseif curTxtLan == EnumLan.EN then
|
|
sLanSurfix = "_EN"
|
|
elseif curTxtLan == EnumLan.JP then
|
|
sLanSurfix = "_JP"
|
|
elseif curTxtLan == EnumLan.KR then
|
|
sLanSurfix = "_KR"
|
|
elseif curTxtLan == EnumLan.TW then
|
|
sLanSurfix = "_TW"
|
|
end
|
|
local tbVideoFileNameOrder = {
|
|
[1] = sBaseName .. sGenderSurfix .. sLanSurfix .. ".mp4",
|
|
[2] = sBaseName .. sGenderSurfix .. ".mp4",
|
|
[3] = sBaseName .. sLanSurfix .. ".mp4",
|
|
[4] = sBaseName .. ".mp4"
|
|
}
|
|
local sTrackIdx_JP_Female = "0"
|
|
local sTrackIdx_CN_Female = "1"
|
|
local sTrackIdx_JP_Male = "2"
|
|
local sTracnIdx_CN_Male = "3"
|
|
local tbSoundTrackNameOrder = {}
|
|
if curVoLan == EnumLan.CN then
|
|
if PlayerData.Base:GetPlayerSex() == true then
|
|
tbSoundTrackNameOrder[1] = sTracnIdx_CN_Male
|
|
tbSoundTrackNameOrder[2] = sTrackIdx_CN_Female
|
|
else
|
|
tbSoundTrackNameOrder[1] = sTrackIdx_CN_Female
|
|
end
|
|
elseif curVoLan == EnumLan.JP then
|
|
if PlayerData.Base:GetPlayerSex() == true then
|
|
tbSoundTrackNameOrder[1] = sTrackIdx_JP_Male
|
|
tbSoundTrackNameOrder[2] = sTrackIdx_JP_Female
|
|
else
|
|
tbSoundTrackNameOrder[1] = sTrackIdx_JP_Female
|
|
end
|
|
end
|
|
local tbSrtFileNameOrder = {
|
|
[1] = sBaseName .. "_" .. sVoTag .. sGenderSurfix .. sLanSurfix .. ".srt",
|
|
[2] = sBaseName .. "_" .. sVoTag .. "_FP" .. sLanSurfix .. ".srt",
|
|
[3] = sBaseName .. sLanSurfix .. ".srt"
|
|
}
|
|
return tbVideoFileNameOrder, tbSoundTrackNameOrder, tbSrtFileNameOrder
|
|
end
|
|
return AVProVideoGUICtrl
|