Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 25 additions & 17 deletions Assets/Plugins/TypedScenes/Core/LoadingProcessor.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
using System;
using UnityEngine;
using UnityEngine;
using UnityEngine.SceneManagement;

namespace IJunior.TypedScenes
{
public class LoadingProcessor : MonoBehaviour
{
private static LoadingProcessor _instance;
private Action _loadingModelAction;
private LoadingSettings _loadingSettings;

public static LoadingProcessor Instance
{
Expand All @@ -20,31 +19,40 @@ 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<LoadingProcessor>();
_instance.transform.SetParent(null);
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>(T loadingModel)
public AsyncOperation ReloadSceneAsync(bool saveLoadingModel = true)
{
_loadingModelAction = () =>
{
foreach (var rootObjects in SceneManager.GetActiveScene().GetRootGameObjects())
{
foreach (var handler in rootObjects.GetComponentsInChildren<ISceneLoadHandler<T>>())
{
handler.OnSceneLoaded(loadingModel);
}
}
};
if (saveLoadingModel == false)
LoadingSettings.Clear();

var activeScene = SceneManager.GetActiveScene().name;
return SceneManager.LoadSceneAsync(activeScene);
}
}
}
49 changes: 49 additions & 0 deletions Assets/Plugins/TypedScenes/Core/LoadingSettings.cs
Original file line number Diff line number Diff line change
@@ -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>(T loadingModel)
{
_applyModelAction = () =>
{
foreach (var rootObjects in SceneManager.GetActiveScene().GetRootGameObjects())
{
foreach (var handler in rootObjects.GetComponentsInChildren<ISceneLoadHandler<T>>())
{
handler.OnSceneLoaded(loadingModel);
}
}
};
}

public void Clear()
{
_applyModelAction = null;
}

public static LoadingSettings Create()
{
return new LoadingSettings();
}
}
}
3 changes: 3 additions & 0 deletions Assets/Plugins/TypedScenes/Core/LoadingSettings.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Assets/Plugins/TypedScenes/Core/TypedProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ private void Awake()
{
handler.OnSceneAwake();
}
LoadingProcessor.Instance.ApplyLoadingModel();

LoadingProcessor.Instance.LoadingSettings.Apply();
}
}
}
2 changes: 1 addition & 1 deletion Assets/Plugins/TypedScenes/Core/TypedScene.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ protected static AsyncOperation LoadScene(string sceneName, LoadSceneMode loadSc

protected static AsyncOperation LoadScene<T>(string sceneName, LoadSceneMode loadSceneMode, T argument)
{
LoadingProcessor.Instance.RegisterLoadingModel(argument);
LoadingProcessor.Instance.LoadingSettings.Register(argument);
return SceneManager.LoadSceneAsync(sceneName, loadSceneMode);
}
}
Expand Down