diff options
| author | chai <215380520@qq.com> | 2023-11-02 11:51:31 +0800 |
|---|---|---|
| committer | chai <215380520@qq.com> | 2023-11-02 11:51:31 +0800 |
| commit | 7f493f682503f5186308de7b8f74b5b49233cfe4 (patch) | |
| tree | 8a91e2056bc79788ee4735dce88b8d516ba12beb /GameCode/LevelProgressManager.cs | |
+init
Diffstat (limited to 'GameCode/LevelProgressManager.cs')
| -rw-r--r-- | GameCode/LevelProgressManager.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/GameCode/LevelProgressManager.cs b/GameCode/LevelProgressManager.cs new file mode 100644 index 0000000..500bf43 --- /dev/null +++ b/GameCode/LevelProgressManager.cs @@ -0,0 +1,57 @@ +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); + } +} |
