using UnityEngine; using UnityEngine.SceneManagement; public class LevelProgressManager : MonoBehaviour { public static LevelProgressManager instance; [SerializeField] private SceneNameToLevelData sceneNameToLevelData = new SceneNameToLevelData(); public SceneNameToLevelData SceneNameToLevelData => sceneNameToLevelData; public bool StartsWithUnderscore(string input) { if (string.IsNullOrEmpty(input)) { return false; } return input[0] == '_'; } private void Awake() { if ((bool)instance) { Object.Destroy(base.gameObject); return; } instance = this; Object.DontDestroyOnLoad(base.transform.root.gameObject); } public LevelData GetLevelDataForScene(string _sceneName) { if (_sceneName == SceneTransitionManager.instance.levelSelectScene) { return null; } if (StartsWithUnderscore(_sceneName)) { return null; } if (sceneNameToLevelData.ContainsKey(_sceneName)) { return sceneNameToLevelData[_sceneName]; } LevelData levelData = new LevelData(); sceneNameToLevelData.Add(_sceneName, levelData); return levelData; } public LevelData GetLevelDataForActiveScene() { string sceneName = SceneManager.GetActiveScene().name; return GetLevelDataForScene(sceneName); } }