源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 line
4.3 KiB

  1. ChangeSceneMovie = ChangeSceneMovie or BaseClass()
  2. local ChangeSceneMovie = ChangeSceneMovie
  3. local Time = Time
  4. function ChangeSceneMovie:__init()
  5. self.enabled = false
  6. self.show_type = 1
  7. ChangeSceneMovie.Instance = self
  8. end
  9. function ChangeSceneMovie:getInstance()
  10. if not ChangeSceneMovie.Instance then
  11. ChangeSceneMovie.New()
  12. end
  13. return ChangeSceneMovie.Instance
  14. end
  15. function ChangeSceneMovie:InitRenderTexture( )
  16. if not self.rect then
  17. self.rect = UnityEngine.Rect.New(0,0,ScreenWidth * 0.8,ScreenHeight * 0.8)
  18. end
  19. if not self.renderTexture then
  20. self.renderTexture = UnityEngine.RenderTexture.GetTemporary(self.rect.width,self.rect.height,0)
  21. end
  22. if not self.gameObject then
  23. self.gameObject = GameObject.New("ChangeSceneMovie")
  24. end
  25. self.parent = panelMgr:GetParent("Top")
  26. self.gameObject.transform:SetParent(self.parent)
  27. if not self.rawImage then
  28. self.rawImage = self.gameObject:AddComponent(typeof(UnityEngine.UI.RawImage))
  29. end
  30. self.rawImage.texture = self.renderTexture
  31. self.transform = self.gameObject.transform
  32. -- self.transform:SetAsFirstSibling()
  33. self.transform.anchorMin = Vector2(0,0)
  34. self.transform.anchorMax = Vector2(1,1)
  35. self.transform.localPosition = Vector3(0,0,-48000)
  36. self.transform.sizeDelta = Vector2(0,0)
  37. self.transform.localScale = Vector3(1,1,1)
  38. self.rawImage.raycastTarget = false
  39. self.gameObject:SetActive(false)
  40. end
  41. function ChangeSceneMovie:TryOpen(show_type, ignore_fire_event)
  42. -- self:InitRenderTexture()
  43. -- if self.enabled then return end
  44. self.enabled = true
  45. self.has_fire_event = false
  46. if ignore_fire_event then --单纯的展示,不需要派发切换场景完成事件
  47. self.has_fire_event = true
  48. end
  49. MainCamera.Instance:ShowEnterSceneEffect()
  50. -- local function on_load_finish( )
  51. -- if not self.has_fire_event then
  52. -- EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
  53. -- self.has_fire_event = true
  54. -- end
  55. -- end
  56. -- if self.load_scene_finish_id then
  57. -- GlobalEventSystem:UnBind(self.load_scene_finish_id)
  58. -- self.load_scene_finish_id = nil
  59. -- end
  60. -- self.load_scene_finish_id = GlobalEventSystem:Bind(EventName.NPC_LOAD_FINISH, on_load_finish)
  61. -- setTimeout(on_delay, 1)
  62. -- on_delay()
  63. local function on_close( )
  64. self:TryClose()
  65. end
  66. setTimeout(on_close, 2.5)
  67. --[[
  68. self.show_type = 1
  69. local mainCam = MainCamera.Instance
  70. -- mainCam.camera.targetTexture = self.renderTexture
  71. -- mainCam.camera:Render()
  72. -- mainCam.camera.targetTexture = nil
  73. self.gameObject:SetActive(true)
  74. if self.timer_id then
  75. GlobalTimerQuest:CancelQuest(self.timer_id)
  76. self.timer_id = false
  77. end
  78. if self.delay_show_type2_id then
  79. GlobalTimerQuest:CancelQuest(self.delay_show_type2_id)
  80. self.delay_show_type2_id = false
  81. end
  82. local function onComplete1()
  83. if self.curr_value < 0.9 then
  84. self.curr_value = self.curr_value + 0.015 * Time.deltaTime / 0.02
  85. ShaderTools.dissolve_mat:SetFloat("_DissolveThreshold", self.curr_value)
  86. if self.curr_value > 0.7 then
  87. if not self.has_fire_event then
  88. EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
  89. self.has_fire_event = true
  90. end
  91. end
  92. else
  93. if self.timer_id then
  94. GlobalTimerQuest:CancelQuest(self.timer_id)
  95. self.timer_id = false
  96. end
  97. self:TryClose()
  98. end
  99. end
  100. self.curr_value = 0.3
  101. if ShaderTools.dissolve_mat then
  102. self.rawImage.material = ShaderTools.dissolve_mat
  103. ShaderTools.dissolve_mat:SetFloat("_DissolveThreshold", self.curr_value)
  104. self.timer_id = GlobalTimerQuest:AddPeriodQuest(onComplete1, 0.03, -1)
  105. -- setTimeout(show_effect,0.5)
  106. end
  107. ]]
  108. end
  109. function ChangeSceneMovie:TryClose()
  110. if self.renderTexture then
  111. UnityEngine.RenderTexture.ReleaseTemporary(self.renderTexture)
  112. self.renderTexture = nil
  113. end
  114. self.enabled = false
  115. if not IsNull(self.gameObject) then
  116. self.gameObject:SetActive(false)
  117. end
  118. if self.timer_id then
  119. GlobalTimerQuest:CancelQuest(self.timer_id)
  120. self.timer_id = false
  121. end
  122. if self.delay_show_type2_id then
  123. GlobalTimerQuest:CancelQuest(self.delay_show_type2_id)
  124. self.delay_show_type2_id = false
  125. end
  126. if not self.has_fire_event then
  127. EventSystem.Fire(GlobalEventSystem,EventName.NOTICE_SCENE_LOAD_WILL_COMPLETE, true)
  128. self.has_fire_event = true
  129. end
  130. if self.load_scene_finish_id then
  131. GlobalEventSystem:UnBind(self.load_scene_finish_id)
  132. self.load_scene_finish_id = nil
  133. end
  134. end