Files
StellaSora_DataLua/lua/game/ui/avprovideo/avprovideoguictrl.lua
T
SL1900 5f417fbe9d Update - 1.3.0.69
EN: 1.3.0.69
CN: 1.3.0.70
JP: 1.3.0.72
KR: 1.3.0.76
2025-12-14 22:30:00 +09:00

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