diff --git a/unity-client/Assets/Editor/BuildAllScenes.cs b/unity-client/Assets/Editor/BuildAllScenes.cs new file mode 100644 index 0000000..a540e99 --- /dev/null +++ b/unity-client/Assets/Editor/BuildAllScenes.cs @@ -0,0 +1,32 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; + +public static class BuildAllScenes +{ + [MenuItem("Tools/Build All Scenes")] + public static void BuildAll() + { + // Clear build settings first + EditorBuildSettings.scenes = new EditorBuildSettingsScene[0]; + + // Create all scenes in order (MainMenu must be index 0) + CreateMainMenuScene.Create(); + CreateCollectionScene.Create(); + CreateDeckBuilderScene.Create(); + CreateSimulatorScene.Create(); + CreateScannerScene.Create(); + CreateTrainingScene.Create(); + + // Log the final build settings + Debug.Log($"[BuildAllScenes] Registered {EditorBuildSettings.scenes.Length} scenes in Build Settings:"); + foreach (var s in EditorBuildSettings.scenes) + Debug.Log($" {s.path} (enabled={s.enabled})"); + + // Reopen MainMenu as the active scene + EditorSceneManager.OpenScene("Assets/Scenes/MainMenu.unity"); + Debug.Log("[BuildAllScenes] Done! MainMenu scene is now active."); + } +} +#endif diff --git a/unity-client/Assets/Editor/CreateCollectionScene.cs b/unity-client/Assets/Editor/CreateCollectionScene.cs index 08d570a..d33d46f 100644 --- a/unity-client/Assets/Editor/CreateCollectionScene.cs +++ b/unity-client/Assets/Editor/CreateCollectionScene.cs @@ -5,6 +5,7 @@ using UnityEditor; using UnityEditor.SceneManagement; using TMPro; using System.Reflection; +using System.Linq; public static class CreateCollectionScene { @@ -205,7 +206,10 @@ public static class CreateCollectionScene AssetDatabase.CreateFolder("Assets", "Scenes"); string path = "Assets/Scenes/Collection.unity"; EditorSceneManager.SaveScene(scene, path); - EditorBuildSettings.scenes = new EditorBuildSettingsScene[] { new EditorBuildSettingsScene(path, true) }; + var existing = new System.Collections.Generic.List(EditorBuildSettings.scenes); + if (!existing.Any(s => s.path == path)) + existing.Add(new EditorBuildSettingsScene(path, true)); + EditorBuildSettings.scenes = existing.ToArray(); Debug.Log("[CreateCollectionScene] Collection scene created and saved to " + path); } diff --git a/unity-client/Assets/Editor/CreateDeckBuilderScene.cs b/unity-client/Assets/Editor/CreateDeckBuilderScene.cs index 1f77210..bb4f6a7 100644 --- a/unity-client/Assets/Editor/CreateDeckBuilderScene.cs +++ b/unity-client/Assets/Editor/CreateDeckBuilderScene.cs @@ -5,6 +5,7 @@ using UnityEditor; using UnityEditor.SceneManagement; using TMPro; using System.Reflection; +using System.Linq; public static class CreateDeckBuilderScene { @@ -169,7 +170,10 @@ public static class CreateDeckBuilderScene AssetDatabase.CreateFolder("Assets", "Scenes"); string path = "Assets/Scenes/DeckBuilder.unity"; EditorSceneManager.SaveScene(scene, path); - EditorBuildSettings.scenes = new EditorBuildSettingsScene[] { new EditorBuildSettingsScene(path, true) }; + var existing = new System.Collections.Generic.List(EditorBuildSettings.scenes); + if (!existing.Any(s => s.path == path)) + existing.Add(new EditorBuildSettingsScene(path, true)); + EditorBuildSettings.scenes = existing.ToArray(); Debug.Log("[CreateDeckBuilderScene] DeckBuilder scene created and saved to " + path); } diff --git a/unity-client/Assets/Editor/CreateMainMenuScene.cs b/unity-client/Assets/Editor/CreateMainMenuScene.cs index f6b6346..ceaae90 100644 --- a/unity-client/Assets/Editor/CreateMainMenuScene.cs +++ b/unity-client/Assets/Editor/CreateMainMenuScene.cs @@ -6,6 +6,7 @@ using UnityEditor; using UnityEditor.SceneManagement; using TMPro; using System.Reflection; +using System.Linq; public static class CreateMainMenuScene { @@ -121,8 +122,10 @@ public static class CreateMainMenuScene // -- Save -- string path = "Assets/Scenes/MainMenu.unity"; EditorSceneManager.SaveScene(scene, path); - EditorBuildSettingsScene[] buildScenes = { new EditorBuildSettingsScene(path, true) }; - EditorBuildSettings.scenes = buildScenes; + var existing = new System.Collections.Generic.List(EditorBuildSettings.scenes); + if (!existing.Any(s => s.path == path)) + existing.Add(new EditorBuildSettingsScene(path, true)); + EditorBuildSettings.scenes = existing.ToArray(); Debug.Log("MainMenu scene created and saved to " + path); EditorUtility.DisplayDialog("Done", "MainMenu scene created!\n\nHit Play to test.\nMake sure your FastAPI backend is running on port 8080.", "OK"); diff --git a/unity-client/Assets/Editor/CreateScannerScene.cs b/unity-client/Assets/Editor/CreateScannerScene.cs index aebe64a..d0277ad 100644 --- a/unity-client/Assets/Editor/CreateScannerScene.cs +++ b/unity-client/Assets/Editor/CreateScannerScene.cs @@ -5,6 +5,7 @@ using UnityEditor; using UnityEditor.SceneManagement; using TMPro; using System.Reflection; +using System.Linq; public static class CreateScannerScene { @@ -92,7 +93,10 @@ public static class CreateScannerScene AssetDatabase.CreateFolder("Assets", "Scenes"); string path = "Assets/Scenes/Scanner.unity"; EditorSceneManager.SaveScene(scene, path); - EditorBuildSettings.scenes = new EditorBuildSettingsScene[] { new EditorBuildSettingsScene(path, true) }; + var existing = new System.Collections.Generic.List(EditorBuildSettings.scenes); + if (!existing.Any(s => s.path == path)) + existing.Add(new EditorBuildSettingsScene(path, true)); + EditorBuildSettings.scenes = existing.ToArray(); Debug.Log("[CreateScannerScene] Scanner scene created and saved to " + path); } diff --git a/unity-client/Assets/Editor/CreateSimulatorScene.cs b/unity-client/Assets/Editor/CreateSimulatorScene.cs index b11a2ac..dd1469f 100644 --- a/unity-client/Assets/Editor/CreateSimulatorScene.cs +++ b/unity-client/Assets/Editor/CreateSimulatorScene.cs @@ -5,6 +5,7 @@ using UnityEditor; using UnityEditor.SceneManagement; using TMPro; using System.Reflection; +using System.Linq; public static class CreateSimulatorScene { @@ -85,7 +86,10 @@ public static class CreateSimulatorScene AssetDatabase.CreateFolder("Assets", "Scenes"); string path = "Assets/Scenes/Simulator.unity"; EditorSceneManager.SaveScene(scene, path); - EditorBuildSettings.scenes = new EditorBuildSettingsScene[] { new EditorBuildSettingsScene(path, true) }; + var existing = new System.Collections.Generic.List(EditorBuildSettings.scenes); + if (!existing.Any(s => s.path == path)) + existing.Add(new EditorBuildSettingsScene(path, true)); + EditorBuildSettings.scenes = existing.ToArray(); Debug.Log("[CreateSimulatorScene] Simulator scene created and saved to " + path); } diff --git a/unity-client/Assets/Editor/CreateTrainingScene.cs b/unity-client/Assets/Editor/CreateTrainingScene.cs index 7386045..70c08e7 100644 --- a/unity-client/Assets/Editor/CreateTrainingScene.cs +++ b/unity-client/Assets/Editor/CreateTrainingScene.cs @@ -5,6 +5,7 @@ using UnityEditor; using UnityEditor.SceneManagement; using TMPro; using System.Reflection; +using System.Linq; public static class CreateTrainingScene { @@ -170,7 +171,10 @@ public static class CreateTrainingScene AssetDatabase.CreateFolder("Assets", "Scenes"); string path = "Assets/Scenes/Training.unity"; EditorSceneManager.SaveScene(scene, path); - EditorBuildSettings.scenes = new EditorBuildSettingsScene[] { new EditorBuildSettingsScene(path, true) }; + var existing = new System.Collections.Generic.List(EditorBuildSettings.scenes); + if (!existing.Any(s => s.path == path)) + existing.Add(new EditorBuildSettingsScene(path, true)); + EditorBuildSettings.scenes = existing.ToArray(); UnityEngine.Debug.Log("[CreateTrainingScene] Training scene created and saved to " + path); } diff --git a/unity-client/Assets/Scripts/UI/MainMenuController.cs b/unity-client/Assets/Scripts/UI/MainMenuController.cs index 530b84b..37b2170 100644 --- a/unity-client/Assets/Scripts/UI/MainMenuController.cs +++ b/unity-client/Assets/Scripts/UI/MainMenuController.cs @@ -92,7 +92,15 @@ namespace CommanderAILab.UI private void LoadScene(string sceneName) { - if (isConnected) SceneManager.LoadScene(sceneName); + if (!isConnected) return; + try + { + SceneManager.LoadScene(sceneName); + } + catch (System.Exception e) + { + Debug.LogError($"Failed to load scene '{sceneName}': {e.Message}. Is it added to Build Settings?"); + } } } }