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

65 lines
2.2 KiB
C#

using System;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
using Vanguard.App;
using Vanguard.Auth;
namespace Vanguard.Editor
{
/// <summary>
/// Быстрый smoke-запуск сцен из командной строки:
/// Unity -batchmode -nographics -executeMethod Vanguard.Editor.SceneSmoke.Run.
/// Открывает Boot, входит в Play Mode, ждёт загрузку Login/Lobby и выходит.
/// </summary>
public static class SceneSmoke
{
private static double _started;
private static int _checks;
[MenuItem("Vanguard/Play Scene Smoke")]
public static void Run()
{
new TokenStore().Clear();
EditorSceneManager.OpenScene("Assets/Scenes/Boot.unity");
_started = EditorApplication.timeSinceStartup;
_checks = 0;
EditorApplication.update += Tick;
EditorApplication.EnterPlaymode();
}
private static void Tick()
{
if (!EditorApplication.isPlaying)
return;
_checks++;
if (EditorApplication.timeSinceStartup - _started < 6.0)
return;
EditorApplication.update -= Tick;
var active = SceneManager.GetActiveScene().name;
var environment = GameObject.Find("Vanguard 3D Environment");
var login = GameObject.Find("LoginScreen");
var lobby = GameObject.Find("MetaScreen");
var onboarding = GameObject.Find("OnboardingScreen");
var success = environment != null
&& (active == SceneFlow.Login || active == SceneFlow.Lobby)
&& (login != null || lobby != null || onboarding != null);
Debug.Log(
"SCENE_SMOKE success=" + success
+ " active=" + active
+ " env=" + (environment != null)
+ " login=" + (login != null)
+ " lobby=" + (lobby != null)
+ " onboarding=" + (onboarding != null)
+ " error=" + VanguardApp.LastInitializationError);
EditorApplication.Exit(success ? 0 : 1);
}
}
}