diff --git a/Editor/SceneSwitcherWindow.cs b/Editor/SceneSwitcherWindow.cs index 39170c5..be37f16 100644 --- a/Editor/SceneSwitcherWindow.cs +++ b/Editor/SceneSwitcherWindow.cs @@ -177,6 +177,12 @@ private void SceneListGui() var preColorBG = GUI.backgroundColor; GUI.backgroundColor = sceneData.color; + var current = SceneManager.GetSceneByPath(path); + if (current != null && current.isLoaded) + { + GUI.backgroundColor = Color.green; + } + if (GUILayout.Button(System.IO.Path.GetFileNameWithoutExtension(path))) { GUI.backgroundColor = preColorBG; @@ -316,6 +322,14 @@ private void SwitchToScene(SceneSwitcherData.SceneData sceneData, string path) var closeScenes = sceneData.closeScenes == BooleanOverride.Default ? _sceneSwitcherData.closeScenes : (sceneData.closeScenes == BooleanOverride.Yes); var loadAdditively = sceneData.loadAdditive == BooleanOverride.Default ? _sceneSwitcherData.loadAdditive : (sceneData.loadAdditive == BooleanOverride.Yes); + // Toggle a scene if it's already loaded. + var current = SceneManager.GetSceneByPath(path); + if (current != null && current.isLoaded) + { + EditorSceneManager.CloseScene(current, false); + return; + } + var scene = EditorSceneManager.OpenScene(path, loadAdditively ? OpenSceneMode.Additive : OpenSceneMode.Single); if (!closeScenes) @@ -364,6 +378,9 @@ public void AddItemsToMenu(GenericMenu menu) { GUIContent content = new GUIContent("Edit Mode"); menu.AddItem(content, _editing, ToggleEdit); + + content = new GUIContent("Load Project Scenes"); + menu.AddItem(content, false, LoadProjectScenes); } private void ToggleEdit() @@ -371,6 +388,17 @@ private void ToggleEdit() _editing = !_editing; } + private void LoadProjectScenes() + { + for (int i = 0; i < SceneManager.sceneCountInBuildSettings; ++i) + { + var path = SceneUtility.GetScenePathByBuildIndex(i); + Debug.Log($"Adding {path}"); + var guid = AssetDatabase.AssetPathToGUID(path); + _sceneSwitcherData.AddScene(guid); + } + } + #endregion }