From 997160f8ebefa579767313c0be9dbd50e484481f Mon Sep 17 00:00:00 2001 From: Dalwyx Date: Sun, 28 Nov 2021 19:46:51 +0300 Subject: [PATCH] Loading settings and scene reload --- .../TypedScenes/Core/LoadingProcessor.cs | 42 +++++++++------- .../TypedScenes/Core/LoadingSettings.cs | 49 +++++++++++++++++++ .../TypedScenes/Core/LoadingSettings.cs.meta | 3 ++ .../TypedScenes/Core/TypedProcessor.cs | 3 +- Assets/Plugins/TypedScenes/Core/TypedScene.cs | 2 +- 5 files changed, 80 insertions(+), 19 deletions(-) create mode 100644 Assets/Plugins/TypedScenes/Core/LoadingSettings.cs create mode 100644 Assets/Plugins/TypedScenes/Core/LoadingSettings.cs.meta diff --git a/Assets/Plugins/TypedScenes/Core/LoadingProcessor.cs b/Assets/Plugins/TypedScenes/Core/LoadingProcessor.cs index c25a578..9d0c5bc 100644 --- a/Assets/Plugins/TypedScenes/Core/LoadingProcessor.cs +++ b/Assets/Plugins/TypedScenes/Core/LoadingProcessor.cs @@ -1,5 +1,4 @@ -using System; -using UnityEngine; +using UnityEngine; using UnityEngine.SceneManagement; namespace IJunior.TypedScenes @@ -7,7 +6,7 @@ namespace IJunior.TypedScenes public class LoadingProcessor : MonoBehaviour { private static LoadingProcessor _instance; - private Action _loadingModelAction; + private LoadingSettings _loadingSettings; public static LoadingProcessor Instance { @@ -20,6 +19,17 @@ public static LoadingProcessor Instance } } + public LoadingSettings LoadingSettings + { + get + { + if (_loadingSettings == null) + _loadingSettings = LoadingSettings.Create(); + + return _loadingSettings; + } + } + private static void Initialize() { _instance = new GameObject("LoadingProcessor").AddComponent(); @@ -27,24 +37,22 @@ private static void Initialize() DontDestroyOnLoad(_instance); } - public void ApplyLoadingModel() + public void ReloadScene(bool saveLoadingModel = true) { - _loadingModelAction?.Invoke(); - _loadingModelAction = null; + if (saveLoadingModel == false) + LoadingSettings.Clear(); + + var activeScene = SceneManager.GetActiveScene().name; + SceneManager.LoadScene(activeScene); } - public void RegisterLoadingModel(T loadingModel) + public AsyncOperation ReloadSceneAsync(bool saveLoadingModel = true) { - _loadingModelAction = () => - { - foreach (var rootObjects in SceneManager.GetActiveScene().GetRootGameObjects()) - { - foreach (var handler in rootObjects.GetComponentsInChildren>()) - { - handler.OnSceneLoaded(loadingModel); - } - } - }; + if (saveLoadingModel == false) + LoadingSettings.Clear(); + + var activeScene = SceneManager.GetActiveScene().name; + return SceneManager.LoadSceneAsync(activeScene); } } } diff --git a/Assets/Plugins/TypedScenes/Core/LoadingSettings.cs b/Assets/Plugins/TypedScenes/Core/LoadingSettings.cs new file mode 100644 index 0000000..0375444 --- /dev/null +++ b/Assets/Plugins/TypedScenes/Core/LoadingSettings.cs @@ -0,0 +1,49 @@ +using System; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace IJunior.TypedScenes +{ + public class LoadingSettings + { + private Action _applyModelAction; + + private LoadingSettings() {} + + public void Apply() + { + try + { + _applyModelAction?.Invoke(); + } + catch (Exception e) + { + Debug.LogError($"Can not apply loading model. Exception: {e}"); + } + } + + public void Register(T loadingModel) + { + _applyModelAction = () => + { + foreach (var rootObjects in SceneManager.GetActiveScene().GetRootGameObjects()) + { + foreach (var handler in rootObjects.GetComponentsInChildren>()) + { + handler.OnSceneLoaded(loadingModel); + } + } + }; + } + + public void Clear() + { + _applyModelAction = null; + } + + public static LoadingSettings Create() + { + return new LoadingSettings(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/TypedScenes/Core/LoadingSettings.cs.meta b/Assets/Plugins/TypedScenes/Core/LoadingSettings.cs.meta new file mode 100644 index 0000000..9af2a3d --- /dev/null +++ b/Assets/Plugins/TypedScenes/Core/LoadingSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0c0be8644fa24f6e93b5b60608bf8ef4 +timeCreated: 1638115596 \ No newline at end of file diff --git a/Assets/Plugins/TypedScenes/Core/TypedProcessor.cs b/Assets/Plugins/TypedScenes/Core/TypedProcessor.cs index 361a8e2..6b27740 100644 --- a/Assets/Plugins/TypedScenes/Core/TypedProcessor.cs +++ b/Assets/Plugins/TypedScenes/Core/TypedProcessor.cs @@ -11,7 +11,8 @@ private void Awake() { handler.OnSceneAwake(); } - LoadingProcessor.Instance.ApplyLoadingModel(); + + LoadingProcessor.Instance.LoadingSettings.Apply(); } } } diff --git a/Assets/Plugins/TypedScenes/Core/TypedScene.cs b/Assets/Plugins/TypedScenes/Core/TypedScene.cs index 70a12dd..5a9e2f7 100644 --- a/Assets/Plugins/TypedScenes/Core/TypedScene.cs +++ b/Assets/Plugins/TypedScenes/Core/TypedScene.cs @@ -12,7 +12,7 @@ protected static AsyncOperation LoadScene(string sceneName, LoadSceneMode loadSc protected static AsyncOperation LoadScene(string sceneName, LoadSceneMode loadSceneMode, T argument) { - LoadingProcessor.Instance.RegisterLoadingModel(argument); + LoadingProcessor.Instance.LoadingSettings.Register(argument); return SceneManager.LoadSceneAsync(sceneName, loadSceneMode); } }