VanguardReMaster/client/Assets/Vanguard/Editor/SceneBuilder.cs

84 lines
3.2 KiB
C#

using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
using Vanguard.App;
namespace Vanguard.Editor
{
/// <summary>
/// Создаёт сцены-экраны и прописывает их в Build Settings.
/// Запуск: меню Vanguard → Rebuild Client Scenes или
/// Unity -batchmode -quit -executeMethod Vanguard.Editor.SceneBuilder.BuildAll.
/// </summary>
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<LoginSceneController>("Login");
Create<LobbySceneController>("Lobby");
Create<CollectionSceneController>("Collection");
Create<DeckBuilderSceneController>("DeckBuilder");
Create<BattleSceneController>("Battle");
var scenes = new List<EditorBuildSettingsScene>();
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<T>(string sceneName) where T : MonoBehaviour
{
var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
var root = new GameObject(sceneName + " Scene");
root.AddComponent<T>();
var cameraGo = new GameObject("Main Camera");
cameraGo.tag = "MainCamera";
var camera = cameraGo.AddComponent<Camera>();
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>();
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<EditorBuildSettingsScene> scenes, string path)
{
if (File.Exists(path))
scenes.Add(new EditorBuildSettingsScene(path, true));
}
}
}