ICEYSceneManager.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Terra.StudioPro.GameSetupV2;
  5. using System;
  6. using UnityEngine.SceneManagement;
  7. namespace Terra.CustomGame.Code
  8. {
  9. public class ICEYSceneManager : MonoBehaviour
  10. {
  11. public static SceneParserV2 sceneParser;
  12. public static ICEYSceneManager Instance;
  13. public GameObject LoadingScreen;
  14. [HideInInspector]public string ActiveSceneName;
  15. public string MAIN_SCENE;
  16. #region SCENE_ACTIONS
  17. public event Action<string> OnGameSceneLoaded;
  18. public event Action OnGameReadyEvent;
  19. #endregion
  20. #region MONOBEHAVIOUR_METHODS
  21. void Awake()
  22. {
  23. sceneParser = FindObjectOfType<SceneParserV2>();
  24. if(LoadingScreen!=null)
  25. LoadingScreen.SetActive(true);
  26. if (sceneParser != null)
  27. {
  28. ActiveSceneName = "";
  29. sceneParser.OnGameReadyEvent += OnGameReady;
  30. sceneParser.OnGameSceneLoaded += OnSceneLoaded;
  31. }
  32. if (Instance == null)
  33. Instance = this;
  34. }
  35. #endregion
  36. #region Scene Loading
  37. private void OnGameReady()
  38. {
  39. OnGameReadyEvent?.Invoke();
  40. }
  41. #if TERRA_STUDIO
  42. private string currentLoadedScene = null;
  43. #endif
  44. private void OnSceneLoaded(string name, PhysicsScene physicsScene)
  45. {
  46. if (LoadingScreen != null)
  47. LoadingScreen.SetActive(false);
  48. ActiveSceneName = name;
  49. Debug.Log("AS: " + ActiveSceneName);
  50. OnGameSceneLoaded?.Invoke(name);
  51. }
  52. private void OnSceneUnloaded(string name, PhysicsScene physicsScene)
  53. {
  54. OnGameSceneLoaded?.Invoke(name);
  55. }
  56. public void LoadScene(string sceneName, bool showDefaultLoadingScreen)
  57. {
  58. if (LoadingScreen != null)
  59. LoadingScreen.SetActive(true);
  60. #if TERRA_STUDIO
  61. if (!string.IsNullOrEmpty(currentLoadedScene) && currentLoadedScene != "main_scene" && SceneManager.GetSceneByName(currentLoadedScene).isLoaded)
  62. {
  63. SceneManager.UnloadSceneAsync(currentLoadedScene);
  64. }
  65. var loadCall = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
  66. currentLoadedScene = sceneName;
  67. loadCall.completed += LoadCallOnCompleted;
  68. return;
  69. #endif
  70. sceneName = GameLoaderV2.GetCorrectSceneName(sceneName);
  71. GameLoaderV2.Instance.LoadGameScene(sceneName, showDefaultLoadingScreen);
  72. }
  73. private void LoadCallOnCompleted(AsyncOperation obj)
  74. {
  75. #if TERRA_STUDIO
  76. SceneManager.SetActiveScene(SceneManager.GetSceneByName(currentLoadedScene));
  77. OnSceneLoaded(currentLoadedScene, SceneManager.GetSceneByName(currentLoadedScene).GetPhysicsScene());
  78. #endif
  79. }
  80. public void UnloadScene(string sceneName)
  81. {
  82. #if TERRA_STUDIO
  83. if (sceneName == MAIN_SCENE)
  84. {
  85. Debug.LogError("can't unload main scene");
  86. return;
  87. }
  88. SceneManager.UnloadSceneAsync(sceneName);
  89. return;
  90. #endif
  91. sceneName = GameLoaderV2.GetCorrectSceneName(sceneName);
  92. GameLoaderV2.Instance.UnloadGameScene(sceneName);
  93. }
  94. public bool IsSceneDownloaded(string sceneName)
  95. {
  96. #if TERRA_STUDIO
  97. return true;
  98. #endif
  99. sceneName = GameLoaderV2.GetCorrectSceneName(sceneName);
  100. var sceneBundleInfo = GameLoaderV2.Instance.GetSceneBundleInfo(sceneName);
  101. if (sceneBundleInfo == null) return false;
  102. return GameLoaderV2.Instance.AreResourcesAndSceneBundlesDownloaded(sceneBundleInfo);
  103. }
  104. public float GetSceneDownloadProgress(string sceneName)
  105. {
  106. #if TERRA_STUDIO
  107. return 1f;
  108. #endif
  109. sceneName = GameLoaderV2.GetCorrectSceneName(sceneName);
  110. return GameLoaderV2.Instance.GetSceneDownloadProgress(sceneName);
  111. }
  112. public PhysicsScene GetCurrentPhysicsScene()
  113. {
  114. #if TERRA_STUDIO
  115. return SceneManager.GetActiveScene().GetPhysicsScene();
  116. #endif
  117. return sceneParser.GetCurrentScene().GetPhysicsScene();
  118. }
  119. public Scene GetGameMainScene()
  120. {
  121. #if TERRA_STUDIO
  122. return SceneManager.GetSceneByName(MAIN_SCENE);
  123. #endif
  124. return sceneParser.GetMainScene();
  125. }
  126. public Scene GetCurrentLoadedSubScene()
  127. {
  128. #if TERRA_STUDIO
  129. return SceneManager.GetActiveScene();
  130. #endif
  131. return sceneParser.GetCurrentScene();
  132. }
  133. public void MoveGameObjectToScene(GameObject obj, string sceneName)
  134. {
  135. #if TERRA_STUDIO
  136. var scene = SceneManager.GetSceneByName(sceneName);
  137. if (scene.isLoaded)
  138. SceneManager.MoveGameObjectToScene(obj, scene);
  139. return;
  140. #endif
  141. sceneName = GameLoaderV2.GetCorrectSceneName(sceneName);
  142. GameLoaderV2.Instance.MoveGameObjectToScene(obj, sceneName);
  143. }
  144. #endregion
  145. }
  146. }