源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

213 行
6.8 KiB

ChangeSceneMovieRT = ChangeSceneMovieRT or BaseClass()
local ChangeSceneMovieRT = ChangeSceneMovieRT
local Time = Time
function ChangeSceneMovieRT:__init()
local w,h = ScreenWidth,ScreenHeight
self.enabled = false
self.show_type = 1
self.rect = UnityEngine.Rect.New(0,0,w * 0.8,h * 0.8)
-- self.renderTexture = UnityEngine.RenderTexture.GetTemporary(self.rect.width,self.rect.height,32)
self.gameObject = GameObject.New("ChangeSceneMovieRT")
self.parent = panelMgr:GetParent("Top")
self.gameObject.transform:SetParent(self.parent)
-- UIDepth.SetUIDepth(self.gameObject,true,400)
self.rawImage = self.gameObject:AddComponent(typeof(UnityEngine.UI.RawImage))
-- self.rawImage.texture = self.renderTexture
self.transform = self.gameObject.transform
-- self.transform:SetAsFirstSibling()
self.transform.anchorMin = Vector2(0,0)
self.transform.anchorMax = Vector2(1,1)
self.transform.localPosition = Vector3(0,0,-48000)
self.transform.sizeDelta = Vector2(0,0)
self.transform.localScale = Vector3(1,1,1)
self.rawImage.raycastTarget = false
self.gameObject:SetActive(false)
ChangeSceneMovieRT.Instance = self
end
function ChangeSceneMovieRT:getInstance()
if not ChangeSceneMovieRT.Instance then
ChangeSceneMovieRT.New()
end
return ChangeSceneMovieRT.Instance
end
function ChangeSceneMovieRT:TryOpen(show_type)
local show_effect = function()
if SceneManager.Instance:NeedEnterSceneEffect() then
MainCamera.Instance:ShowEnterSceneEffect()
end
end
if SceneManager.Instance:IsEnterSameScene() then
local call_func = function()
self.has_fire_event = true
EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
end
setTimeout(call_func,1)
show_effect()
return
end
if self.enabled then return end
self.enabled = true
self.has_fire_event = false
--math.randomseed(os.time())
self.show_type = 2 --show_type or math.random(1, 2)
-- local mainCam = MainCamera.Instance
--mainCam:StopShake()
self.renderTexture = UnityEngine.RenderTexture.GetTemporary(self.rect.width,self.rect.height,32)
self.rawImage.texture = self.renderTexture
self.main_movie_obj, self.main_movie_camera = MainCamera:getInstance():GetMovieCamera()
self.main_movie_obj:SetActive(true)
self.main_movie_camera.targetTexture = self.renderTexture
self.main_movie_camera:Render()
self.main_movie_camera.targetTexture = nil
self.main_movie_obj:SetActive(false)
-- mainCam.camera.targetTexture = self.renderTexture
-- mainCam.camera:Render()
-- mainCam.camera.targetTexture = nil
-- Optimizer.ResetCameraTexture(mainCam.camera)
self.gameObject:SetActive(true)
if self.timer_id then
GlobalTimerQuest:CancelQuest(self.timer_id)
self.timer_id = false
end
if self.delay_show_type2_id then
GlobalTimerQuest:CancelQuest(self.delay_show_type2_id)
self.delay_show_type2_id = false
end
if self.show_type == 1 then
local function onComplete1()
if self.curr_value < 0.9 then
self.curr_value = self.curr_value + 0.015 * Time.deltaTime / 0.02
ShaderTools.dissolve_mat:SetFloat("_DissolveThreshold", self.curr_value)
if self.curr_value > 0.7 then
if not self.has_fire_event then
EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
self.has_fire_event = true
end
end
else
if self.timer_id then
GlobalTimerQuest:CancelQuest(self.timer_id)
self.timer_id = false
end
self:TryClose()
end
end
self.curr_value = 0.3
if ShaderTools.dissolve_mat then
self.rawImage.material = ShaderTools.dissolve_mat
ShaderTools.dissolve_mat:SetFloat("_DissolveThreshold", self.curr_value)
self.timer_id = GlobalTimerQuest:AddPeriodQuest(onComplete1, 0.03, -1)
setTimeout(show_effect,0.5)
end
else
if ShaderTools.dissolve_mat2 then
self.rawImage.material = ShaderTools.dissolve_mat2
-- ShaderTools.dissolve_mat2:SetFloat("_ParentAlpha", 500)
ShaderTools.dissolve_mat2:SetFloat("_ParentDist", 0)
end
local function onDelayShowType2()
self.delay_show_type2_id = false
local function playEffect()
if self.ui_cut_screen_timer_id then
GlobalTimerQuest:CancelQuest(self.ui_cut_screen_timer_id)
self.ui_cut_screen_timer_id = false
end
self.cut_effect_go:SetActive(true)
local function onDelay()
self.ui_cut_screen_timer_id = false
self.cut_effect_go:SetActive(false)
end
self.ui_cut_screen_timer_id = GlobalTimerQuest:AddDelayQuest(onDelay, 1)
local function onDelay2()
local function onComplete1()
if self.curr_value < 8 then
self.curr_value = self.curr_value + Time.deltaTime * 12
ShaderTools.dissolve_mat2:SetFloat("_ParentDist", self.curr_value)
if self.curr_value > 6 then
if not self.has_fire_event then
EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
self.has_fire_event = true
end
end
else
if self.timer_id then
GlobalTimerQuest:CancelQuest(self.timer_id)
self.timer_id = false
end
self:TryClose()
end
end
self.curr_value = 0
if ShaderTools.dissolve_mat2 then
self.timer_id = GlobalTimerQuest:AddPeriodQuest(onComplete1, 0.01, -1)
setTimeout(show_effect,0.5)
end
end
GlobalTimerQuest:AddDelayQuest(onDelay2, 0.1)
end
if not self.cut_effect_go then
local function onLoadCallback(objs, is_gameObject)
if objs and objs[0] then
self.cut_effect_go = is_gameObject and objs[0] or newObject(objs[0])
local go_trasform = self.cut_effect_go.transform
go_trasform:SetParent(self.parent)
SetLocalPosition(go_trasform, 0, 0, -49000)
SetLocalRotation(go_trasform, 0, 0, 270)
go_trasform.localRotation = Quaternion.Euler(0,0,-30)
SetLocalScale(go_trasform, 100)
for i = 0,go_trasform.childCount - 1 do
go_trasform:GetChild(i).gameObject.layer = UIPartical.RenderingOther_List.UI
end
UIDepth.SetUIDepth(self.cut_effect_go,false, 500)
playEffect()
else
logWarn("can not load effect. name is ui_cutscreen")
end
end
lua_resM:loadPrefab(self, "ui_cutscreen", "ui_cutscreen", onLoadCallback)
else
playEffect()
end
end
self.delay_show_type2_id = GlobalTimerQuest:AddDelayQuest(onDelayShowType2, 0.08)
end
end
function ChangeSceneMovieRT:TryClose()
if not self.enabled then return end
-- self.renderTexture:Release()
if self.renderTexture then
UnityEngine.RenderTexture.ReleaseTemporary(self.renderTexture)
self.renderTexture = nil
end
self.enabled = false
self.gameObject:SetActive(false)
if self.timer_id then
GlobalTimerQuest:CancelQuest(self.timer_id)
self.timer_id = false
end
if self.delay_show_type2_id then
GlobalTimerQuest:CancelQuest(self.delay_show_type2_id)
self.delay_show_type2_id = false
end
if not self.has_fire_event then
EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
self.has_fire_event = true
end
end