using QFSW.QC; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.SceneManagement; namespace BNG { public class SceneLoader : MonoBehaviour { [Tooltip("If true, the ScreenFader component will fade the screen to black before loading a level.")] public bool UseSceenFader = true; [Tooltip("Wait this long in seconds before attempting to load the scene. Useful if you need to fade the screen out before attempting to load the level.")] public float ScreenFadeTime = 0.5f; public List AllMapsLevelNames = new List(); private const string KEY = "all_maps"; ScreenFader sf; private string _loadSceneName = string.Empty; public static SceneLoader Instance; private void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(this); } else { Destroy(gameObject); } } private void Start() { PlayerPrefs.SetInt(KEY, 0); } [ContextMenu("Debug Load Scene")] private void DebugLoadScene() { LoadScene("Monument_1"); } private string _sceneName; public void ChangeLevel() { if (PlayerPrefs.GetInt(KEY) == 0) { LoadScene("StartScene"); } else { var firstPersonAfterJack = AllMapsLevelNames.SkipWhile(p => p != SceneManager.GetActiveScene().name).ElementAt(1); LoadScene(firstPersonAfterJack); } } public void LoadScene(string sceneName, bool allMapsMode = false) { _sceneName = sceneName; if (allMapsMode) { PlayerPrefs.SetInt(KEY, 1); } StartCoroutine(LoadAsuncScene()); } private IEnumerator LoadAsuncScene() { var scene = SceneManager.LoadSceneAsync(_sceneName, LoadSceneMode.Single); scene.allowSceneActivation = false; while (!scene.isDone) { scene.allowSceneActivation = true; yield return null; } } private int _sceneIndex = 0; private void Update() { if (Input.GetKeyDown(KeyCode.R)) { SceneManager.LoadScene(0); } if (Input.GetKeyDown(KeyCode.Equals)) { _sceneIndex++; if (_sceneIndex >= SceneManager.sceneCountInBuildSettings) _sceneIndex = 0; SceneManager.LoadScene(_sceneIndex); } else if (Input.GetKeyDown(KeyCode.Minus)) { _sceneIndex--; if (_sceneIndex < 0) _sceneIndex = SceneManager.sceneCountInBuildSettings - 1; SceneManager.LoadScene(_sceneIndex); } } } }