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

137 lines
4.9 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 camera = Camera.main;
var handVisible = 0;
var handCards = 0;
var fieldVisible = false;
if (camera != null)
{
foreach (var card in cards)
{
var viewport = camera.WorldToViewportPoint(card.transform.position);
if (card.Ref.Zone == Vanguard.Board3D.BoardZone.Hand)
{
handCards++;
if (viewport.z > 0f
&& viewport.x > 0.02f
&& viewport.x < 0.98f
&& viewport.y > 0.01f
&& viewport.y < 0.55f)
{
handVisible++;
}
}
else if (card.Ref.Zone == Vanguard.Board3D.BoardZone.Vanguard
&& card.Ref.Player == 0
&& viewport.z > 0f
&& viewport.y > 0.05f
&& viewport.y < 0.75f)
{
fieldVisible = true;
}
}
}
var success = board != null
&& cards.Length >= 10
&& handCards > 0
&& handVisible == handCards
&& fieldVisible;
Debug.Log(
"PLAYMAT_SMOKE success=" + success
+ " board=" + (board != null)
+ " cards=" + cards.Length
+ " hand=" + handVisible + "/" + handCards
+ " fieldVisible=" + fieldVisible
+ " 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);
}
}
}