源战役客户端
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

212 строки
6.8 KiB

4 недель назад
  1. ChangeSceneMovieRT = ChangeSceneMovieRT or BaseClass()
  2. local ChangeSceneMovieRT = ChangeSceneMovieRT
  3. local Time = Time
  4. function ChangeSceneMovieRT:__init()
  5. local w,h = ScreenWidth,ScreenHeight
  6. self.enabled = false
  7. self.show_type = 1
  8. self.rect = UnityEngine.Rect.New(0,0,w * 0.8,h * 0.8)
  9. -- self.renderTexture = UnityEngine.RenderTexture.GetTemporary(self.rect.width,self.rect.height,32)
  10. self.gameObject = GameObject.New("ChangeSceneMovieRT")
  11. self.parent = panelMgr:GetParent("Top")
  12. self.gameObject.transform:SetParent(self.parent)
  13. -- UIDepth.SetUIDepth(self.gameObject,true,400)
  14. self.rawImage = self.gameObject:AddComponent(typeof(UnityEngine.UI.RawImage))
  15. -- self.rawImage.texture = self.renderTexture
  16. self.transform = self.gameObject.transform
  17. -- self.transform:SetAsFirstSibling()
  18. self.transform.anchorMin = Vector2(0,0)
  19. self.transform.anchorMax = Vector2(1,1)
  20. self.transform.localPosition = Vector3(0,0,-48000)
  21. self.transform.sizeDelta = Vector2(0,0)
  22. self.transform.localScale = Vector3(1,1,1)
  23. self.rawImage.raycastTarget = false
  24. self.gameObject:SetActive(false)
  25. ChangeSceneMovieRT.Instance = self
  26. end
  27. function ChangeSceneMovieRT:getInstance()
  28. if not ChangeSceneMovieRT.Instance then
  29. ChangeSceneMovieRT.New()
  30. end
  31. return ChangeSceneMovieRT.Instance
  32. end
  33. function ChangeSceneMovieRT:TryOpen(show_type)
  34. local show_effect = function()
  35. if SceneManager.Instance:NeedEnterSceneEffect() then
  36. MainCamera.Instance:ShowEnterSceneEffect()
  37. end
  38. end
  39. if SceneManager.Instance:IsEnterSameScene() then
  40. local call_func = function()
  41. self.has_fire_event = true
  42. EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
  43. end
  44. setTimeout(call_func,1)
  45. show_effect()
  46. return
  47. end
  48. if self.enabled then return end
  49. self.enabled = true
  50. self.has_fire_event = false
  51. --math.randomseed(os.time())
  52. self.show_type = 2 --show_type or math.random(1, 2)
  53. -- local mainCam = MainCamera.Instance
  54. --mainCam:StopShake()
  55. self.renderTexture = UnityEngine.RenderTexture.GetTemporary(self.rect.width,self.rect.height,32)
  56. self.rawImage.texture = self.renderTexture
  57. self.main_movie_obj, self.main_movie_camera = MainCamera:getInstance():GetMovieCamera()
  58. self.main_movie_obj:SetActive(true)
  59. self.main_movie_camera.targetTexture = self.renderTexture
  60. self.main_movie_camera:Render()
  61. self.main_movie_camera.targetTexture = nil
  62. self.main_movie_obj:SetActive(false)
  63. -- mainCam.camera.targetTexture = self.renderTexture
  64. -- mainCam.camera:Render()
  65. -- mainCam.camera.targetTexture = nil
  66. -- Optimizer.ResetCameraTexture(mainCam.camera)
  67. self.gameObject:SetActive(true)
  68. if self.timer_id then
  69. GlobalTimerQuest:CancelQuest(self.timer_id)
  70. self.timer_id = false
  71. end
  72. if self.delay_show_type2_id then
  73. GlobalTimerQuest:CancelQuest(self.delay_show_type2_id)
  74. self.delay_show_type2_id = false
  75. end
  76. if self.show_type == 1 then
  77. local function onComplete1()
  78. if self.curr_value < 0.9 then
  79. self.curr_value = self.curr_value + 0.015 * Time.deltaTime / 0.02
  80. ShaderTools.dissolve_mat:SetFloat("_DissolveThreshold", self.curr_value)
  81. if self.curr_value > 0.7 then
  82. if not self.has_fire_event then
  83. EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
  84. self.has_fire_event = true
  85. end
  86. end
  87. else
  88. if self.timer_id then
  89. GlobalTimerQuest:CancelQuest(self.timer_id)
  90. self.timer_id = false
  91. end
  92. self:TryClose()
  93. end
  94. end
  95. self.curr_value = 0.3
  96. if ShaderTools.dissolve_mat then
  97. self.rawImage.material = ShaderTools.dissolve_mat
  98. ShaderTools.dissolve_mat:SetFloat("_DissolveThreshold", self.curr_value)
  99. self.timer_id = GlobalTimerQuest:AddPeriodQuest(onComplete1, 0.03, -1)
  100. setTimeout(show_effect,0.5)
  101. end
  102. else
  103. if ShaderTools.dissolve_mat2 then
  104. self.rawImage.material = ShaderTools.dissolve_mat2
  105. -- ShaderTools.dissolve_mat2:SetFloat("_ParentAlpha", 500)
  106. ShaderTools.dissolve_mat2:SetFloat("_ParentDist", 0)
  107. end
  108. local function onDelayShowType2()
  109. self.delay_show_type2_id = false
  110. local function playEffect()
  111. if self.ui_cut_screen_timer_id then
  112. GlobalTimerQuest:CancelQuest(self.ui_cut_screen_timer_id)
  113. self.ui_cut_screen_timer_id = false
  114. end
  115. self.cut_effect_go:SetActive(true)
  116. local function onDelay()
  117. self.ui_cut_screen_timer_id = false
  118. self.cut_effect_go:SetActive(false)
  119. end
  120. self.ui_cut_screen_timer_id = GlobalTimerQuest:AddDelayQuest(onDelay, 1)
  121. local function onDelay2()
  122. local function onComplete1()
  123. if self.curr_value < 8 then
  124. self.curr_value = self.curr_value + Time.deltaTime * 12
  125. ShaderTools.dissolve_mat2:SetFloat("_ParentDist", self.curr_value)
  126. if self.curr_value > 6 then
  127. if not self.has_fire_event then
  128. EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
  129. self.has_fire_event = true
  130. end
  131. end
  132. else
  133. if self.timer_id then
  134. GlobalTimerQuest:CancelQuest(self.timer_id)
  135. self.timer_id = false
  136. end
  137. self:TryClose()
  138. end
  139. end
  140. self.curr_value = 0
  141. if ShaderTools.dissolve_mat2 then
  142. self.timer_id = GlobalTimerQuest:AddPeriodQuest(onComplete1, 0.01, -1)
  143. setTimeout(show_effect,0.5)
  144. end
  145. end
  146. GlobalTimerQuest:AddDelayQuest(onDelay2, 0.1)
  147. end
  148. if not self.cut_effect_go then
  149. local function onLoadCallback(objs, is_gameObject)
  150. if objs and objs[0] then
  151. self.cut_effect_go = is_gameObject and objs[0] or newObject(objs[0])
  152. local go_trasform = self.cut_effect_go.transform
  153. go_trasform:SetParent(self.parent)
  154. SetLocalPosition(go_trasform, 0, 0, -49000)
  155. SetLocalRotation(go_trasform, 0, 0, 270)
  156. go_trasform.localRotation = Quaternion.Euler(0,0,-30)
  157. SetLocalScale(go_trasform, 100)
  158. for i = 0,go_trasform.childCount - 1 do
  159. go_trasform:GetChild(i).gameObject.layer = UIPartical.RenderingOther_List.UI
  160. end
  161. UIDepth.SetUIDepth(self.cut_effect_go,false, 500)
  162. playEffect()
  163. else
  164. logWarn("can not load effect. name is ui_cutscreen")
  165. end
  166. end
  167. lua_resM:loadPrefab(self, "ui_cutscreen", "ui_cutscreen", onLoadCallback)
  168. else
  169. playEffect()
  170. end
  171. end
  172. self.delay_show_type2_id = GlobalTimerQuest:AddDelayQuest(onDelayShowType2, 0.08)
  173. end
  174. end
  175. function ChangeSceneMovieRT:TryClose()
  176. if not self.enabled then return end
  177. -- self.renderTexture:Release()
  178. if self.renderTexture then
  179. UnityEngine.RenderTexture.ReleaseTemporary(self.renderTexture)
  180. self.renderTexture = nil
  181. end
  182. self.enabled = false
  183. self.gameObject:SetActive(false)
  184. if self.timer_id then
  185. GlobalTimerQuest:CancelQuest(self.timer_id)
  186. self.timer_id = false
  187. end
  188. if self.delay_show_type2_id then
  189. GlobalTimerQuest:CancelQuest(self.delay_show_type2_id)
  190. self.delay_show_type2_id = false
  191. end
  192. if not self.has_fire_event then
  193. EventSystem.Fire(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE, true)
  194. self.has_fire_event = true
  195. end
  196. end