using System; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; using Vanguard.App; using Vanguard.Auth; namespace Vanguard.Editor { /// /// Быстрый smoke-запуск сцен из командной строки: /// Unity -batchmode -nographics -executeMethod Vanguard.Editor.SceneSmoke.Run. /// Открывает Boot, входит в Play Mode, ждёт загрузку Login/Lobby и выходит. /// 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(); var cards = UnityEngine.Object.FindObjectsByType( 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 && card.Ref.Player == 0) { 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); } } }