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