|
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
|