using System;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace SimpleTools.SceneManagement {
public static class Loader {
class LoadingMonoBehaviour : MonoBehaviour { }
static Action onLoaderCallback;
static AsyncOperation loadingAsyncOperation;
/// Load a scene with a loading scene
/// It requires a scene called "Loading" where the loading screen is located.
///
public static void Load(int scene) {
onLoaderCallback = () => {
GameObject loadingGameObject = new GameObject("LoadingGameObject");
loadingGameObject.AddComponent().StartCoroutine(LoadSceneAsync(scene));
};
SceneManager.LoadScene("Loading");
}
/// Load a scene with a loading scene
/// It requires a scene called "Loading" where the loading screen is located.
///
public static void Load(string scene) {
onLoaderCallback = () => {
GameObject loadingGameObject = new GameObject("LoadingGameObject");
loadingGameObject.AddComponent().StartCoroutine(LoadSceneAsync(scene));
};
SceneManager.LoadScene("Loading");
}
static IEnumerator LoadSceneAsync(int scene) {
yield return null;
loadingAsyncOperation = SceneManager.LoadSceneAsync(scene);
while (!loadingAsyncOperation.isDone) {
yield return null;
}
}
static IEnumerator LoadSceneAsync(string scene) {
yield return null;
loadingAsyncOperation = SceneManager.LoadSceneAsync(scene);
while (!loadingAsyncOperation.isDone) {
yield return null;
}
}
/// Returns the loading progress
///
public static float GetLoadingProgress() {
if (loadingAsyncOperation != null) {
return loadingAsyncOperation.progress;
} else {
return 0f;
}
}
public static void LoaderCallback() {
if (onLoaderCallback != null) {
onLoaderCallback();
onLoaderCallback = null;
}
}
}
}