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

99 lines
3.4 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();
}
[MenuItem("Vanguard/Play Playmat Scene Smoke")]
public static void RunPlaymat()
{
EditorSceneManager.OpenScene("Assets/Vanguard/Scenes/GameBoard3D.unity");
_started = EditorApplication.timeSinceStartup;
_checks = 0;
EditorApplication.update += TickPlaymat;
EditorApplication.EnterPlaymode();
}
private static void TickPlaymat()
{
if (!EditorApplication.isPlaying)
return;
_checks++;
if (EditorApplication.timeSinceStartup - _started < 5.0)
return;
EditorApplication.update -= TickPlaymat;
var board = UnityEngine.Object.FindAnyObjectByType<Vanguard.Board3D.GameBoard3D>();
var cards = UnityEngine.Object.FindObjectsByType<Vanguard.Board3D.Card3D>(
FindObjectsInactive.Exclude);
var success = board != null && cards.Length >= 10;
Debug.Log(
"PLAYMAT_SMOKE success=" + success
+ " board=" + (board != null)
+ " cards=" + cards.Length
+ " error=" + VanguardApp.LastInitializationError);
EditorApplication.Exit(success ? 0 : 1);
}
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);
}
}
}