using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; using HotUpdate.Gameplay; using HotUpdate.Net; using HotUpdate.UI; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using TMPro; using UnityEditor; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; /// Unseeded first-day acceptance via actual EventSystem clicks and isolated HTTP. public static class VerifyFirstFive { const string Endpoint = "http://127.0.0.1:18085"; const string Key = "AIGame.FirstFive."; static string Repo => Path.GetFullPath(Path.Combine(Application.dataPath, "../..")); static string Output => Path.Combine(Repo, "Tools/output/first_five"); static PrototypeFlow Flow => UnityEngine.Object.FindObjectOfType(); static T Get(string field) => (T)typeof(PrototypeFlow).GetField(field, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(Flow); static void Set(string field, object value) => typeof(PrototypeFlow).GetField(field, BindingFlags.Instance | BindingFlags.NonPublic).SetValue(Flow, value); static void Check(bool value, string message) { if (!value) throw new Exception(message); } static async Task Until(Func condition, int seconds = 35) { var end = DateTime.UtcNow.AddSeconds(seconds); while (!condition()) { Check(DateTime.UtcNow < end, "Timeout: " + Flow?.Page); await Task.Delay(75); } } static Button Find(string name) => UnityEngine.Object.FindObjectsOfType