Files
Endfield-Data/LuaScripts/UI/Panels/DialogTimelineMask/DialogTimelineMaskCtrl.lua
2026-01-31 21:42:01 +07:00

142 lines
3.2 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.DialogTimelineMask
DialogTimelineMaskCtrl = HL.Class('DialogTimelineMaskCtrl', uiCtrl.UICtrl)
DialogTimelineMaskCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_START_CAMERA_CROSS_FADE] = 'OnStartCameraCrossFade',
[MessageConst.ON_STOP_CAMERA_CROSS_FADE] = 'OnStopCameraCrossFade',
}
DialogTimelineMaskCtrl.m_setCaptureCor = HL.Field(HL.Thread)
DialogTimelineMaskCtrl.m_captureRtHandle = HL.Field(HL.Userdata)
DialogTimelineMaskCtrl.m_timelineHandle = HL.Field(HL.Userdata)
DialogTimelineMaskCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.m_timelineHandle = unpack(arg)
end
DialogTimelineMaskCtrl._InitBorderMask = HL.Method() << function(self, arg)
local useBlack = true
if GameWorld.dialogManager.dialogTree then
local dialogType = GameWorld.dialogManager.dialogTree.dialogType
local normal = dialogType == Const.DialogType.Normal
if normal then
useBlack = false
end
else
useBlack = false
end
if useBlack then
local screenWidth = Screen.width
local screenHeight = Screen.height
local maxScreenWidth = UIConst.MAX_DIALOG_ASPECT_RATIO * screenHeight
local borderSize = (screenWidth - maxScreenWidth) / 2
local ratio = self.view.transform.rect.width / Screen.width
self.view.leftBorder.gameObject:SetActive(true)
self.view.rightBorder.gameObject:SetActive(true)
else
self.view.leftBorder.gameObject:SetActive(false)
self.view.rightBorder.gameObject:SetActive(false)
end
end
DialogTimelineMaskCtrl.OnShow = HL.Override() << function(self)
self:_InitBorderMask()
GameWorld.dialogTimelineManager:BindCameraCrossFadeMask(self.m_timelineHandle, self.view.cameraCrossFade)
end
DialogTimelineMaskCtrl.OnStartCameraCrossFade = HL.Method() << function(self)
self:_ReleaseCaptureRt()
self.m_captureRtHandle = ScreenCaptureUtils.GetScreenCaptureWithoutUI();
self.m_setCaptureCor = self:_StartCoroutine(function() return self:_SetScreenCapture() end)
end
DialogTimelineMaskCtrl._SetScreenCapture = HL.Method() << function(self)
coroutine.waitForRenderDone()
if self.m_captureRtHandle then
self.view.cameraCrossFade.texture = self.m_captureRtHandle.rt
self.view.cameraCrossFade.gameObject:SetActive(true)
end
end
DialogTimelineMaskCtrl._ReleaseCaptureRt = HL.Method() << function(self)
if self.m_captureRtHandle then
self.m_captureRtHandle:Release()
self.m_captureRtHandle = nil
end
end
DialogTimelineMaskCtrl.OnStopCameraCrossFade = HL.Method() << function(self)
if self.m_setCaptureCor then
self:_ClearCoroutine(self.m_setCaptureCor)
self.m_setCaptureCor = nil
end
self:_ReleaseCaptureRt()
self.view.cameraCrossFade.gameObject:SetActive(false)
self.view.cameraCrossFade.texture = nil
end
DialogTimelineMaskCtrl.OnClose = HL.Override() << function(self)
if self.m_setCaptureCor then
self:_ClearCoroutine(self.m_setCaptureCor)
self.m_setCaptureCor = nil
end
self:_ReleaseCaptureRt()
end
HL.Commit(DialogTimelineMaskCtrl)