using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; using Vanguard.App; namespace Vanguard.Editor { /// /// Создаёт сцены-экраны и прописывает их в Build Settings. /// Запуск: меню Vanguard → Rebuild Client Scenes или /// Unity -batchmode -quit -executeMethod Vanguard.Editor.SceneBuilder.BuildAll. /// public static class SceneBuilder { private const string SceneDir = "Assets/Vanguard/Scenes"; private const string BootPath = "Assets/Scenes/Boot.unity"; [MenuItem("Vanguard/Rebuild Client Scenes")] public static void BuildAll() { if (!Directory.Exists(SceneDir)) { Directory.CreateDirectory(SceneDir); AssetDatabase.Refresh(); } Create("Login"); Create("Lobby"); Create("Collection"); Create("DeckBuilder"); Create("Battle"); var scenes = new List(); Add(scenes, BootPath); Add(scenes, SceneDir + "/Login.unity"); Add(scenes, SceneDir + "/Lobby.unity"); Add(scenes, SceneDir + "/Collection.unity"); Add(scenes, SceneDir + "/DeckBuilder.unity"); Add(scenes, SceneDir + "/Battle.unity"); EditorBuildSettings.scenes = scenes.ToArray(); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log("Vanguard scenes rebuilt: " + scenes.Count); } private static void Create(string sceneName) where T : MonoBehaviour { var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); var root = new GameObject(sceneName + " Scene"); root.AddComponent(); var cameraGo = new GameObject("Main Camera"); cameraGo.tag = "MainCamera"; var camera = cameraGo.AddComponent(); camera.clearFlags = CameraClearFlags.SolidColor; camera.backgroundColor = new Color(0.02f, 0.03f, 0.055f); camera.transform.position = new Vector3(0f, 3.2f, -10f); camera.transform.rotation = Quaternion.Euler(12f, 0f, 0f); var lightGo = new GameObject("Directional Light"); var light = lightGo.AddComponent(); light.type = LightType.Directional; light.color = new Color(0.82f, 0.88f, 1f); light.intensity = 0.9f; light.shadows = LightShadows.Soft; light.transform.rotation = Quaternion.Euler(48f, -32f, 0f); EditorSceneManager.SaveScene(scene, SceneDir + "/" + sceneName + ".unity"); } private static void Add(ICollection scenes, string path) { if (File.Exists(path)) scenes.Add(new EditorBuildSettingsScene(path, true)); } } }