ChangeSceneMovie = ChangeSceneMovie or BaseClass()
|
|
local ChangeSceneMovie = ChangeSceneMovie
|
|
local Time = Time
|
|
function ChangeSceneMovie:__init()
|
|
self.enabled = false
|
|
self.show_type = 1
|
|
ChangeSceneMovie.Instance = self
|
|
end
|
|
|
|
function ChangeSceneMovie:getInstance()
|
|
if not ChangeSceneMovie.Instance then
|
|
ChangeSceneMovie.New()
|
|
end
|
|
return ChangeSceneMovie.Instance
|
|
end
|
|
|
|
function ChangeSceneMovie:InitRenderTexture( )
|
|
if not self.rect then
|
|
self.rect = UnityEngine.Rect.New(0,0,ScreenWidth * 0.8,ScreenHeight * 0.8)
|
|
end
|
|
if not self.renderTexture then
|
|
self.renderTexture = UnityEngine.RenderTexture.GetTemporary(self.rect.width,self.rect.height,0)
|
|
end
|
|
if not self.gameObject then
|
|
self.gameObject = GameObject.New("ChangeSceneMovie")
|
|
end
|
|
self.parent = panelMgr:GetParent("Top")
|
|
self.gameObject.transform:SetParent(self.parent)
|
|
if not self.rawImage then
|
|
self.rawImage = self.gameObject:AddComponent(typeof(UnityEngine.UI.RawImage))
|
|
end
|
|
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)
|
|
end
|
|
|
|
function ChangeSceneMovie:TryOpen(show_type, ignore_fire_event)
|
|
-- self:InitRenderTexture()
|
|
-- if self.enabled then return end
|
|
self.enabled = true
|
|
self.has_fire_event = false
|
|
if ignore_fire_event then --单纯的展示,不需要派发切换场景完成事件
|
|
self.has_fire_event = true
|
|
end
|
|
|
|
MainCamera.Instance:ShowEnterSceneEffect()
|
|
|
|
|
|
-- local function on_load_finish( )
|
|
-- if not self.has_fire_event then
|
|
-- EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
|
|
-- self.has_fire_event = true
|
|
-- end
|
|
-- end
|
|
-- if self.load_scene_finish_id then
|
|
-- GlobalEventSystem:UnBind(self.load_scene_finish_id)
|
|
-- self.load_scene_finish_id = nil
|
|
-- end
|
|
-- self.load_scene_finish_id = GlobalEventSystem:Bind(EventName.NPC_LOAD_FINISH, on_load_finish)
|
|
-- setTimeout(on_delay, 1)
|
|
-- on_delay()
|
|
|
|
local function on_close( )
|
|
self:TryClose()
|
|
end
|
|
setTimeout(on_close, 2.5)
|
|
|
|
|
|
--[[
|
|
self.show_type = 1
|
|
local mainCam = MainCamera.Instance
|
|
-- mainCam.camera.targetTexture = self.renderTexture
|
|
-- mainCam.camera:Render()
|
|
-- mainCam.camera.targetTexture = nil
|
|
|
|
|
|
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
|
|
|
|
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
|
|
]]
|
|
end
|
|
|
|
function ChangeSceneMovie:TryClose()
|
|
if self.renderTexture then
|
|
UnityEngine.RenderTexture.ReleaseTemporary(self.renderTexture)
|
|
self.renderTexture = nil
|
|
end
|
|
self.enabled = false
|
|
if not IsNull(self.gameObject) then
|
|
self.gameObject:SetActive(false)
|
|
end
|
|
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.NOTICE_SCENE_LOAD_WILL_COMPLETE, true)
|
|
self.has_fire_event = true
|
|
end
|
|
if self.load_scene_finish_id then
|
|
GlobalEventSystem:UnBind(self.load_scene_finish_id)
|
|
self.load_scene_finish_id = nil
|
|
end
|
|
end
|