using System; using System.Threading.Tasks; using UnityEngine; using VContainer; using Vanguard.Api; using Vanguard.Auth; using Vanguard.State; using Vanguard.UI; namespace Vanguard.App { /// /// Composition root клиента. Создаётся из runtime-инициализатора, поэтому /// не зависит от содержимого сцены; сцены появятся позже. /// public sealed class VanguardApp : MonoBehaviour { private IObjectResolver _container; private AppRootView _root; private void Awake() { DontDestroyOnLoad(gameObject); Application.targetFrameRate = 60; var config = new AppConfig(); config.Load(); var builder = new ContainerBuilder(); builder.RegisterInstance(config); builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Singleton); _container = builder.Build(); _root = _container.Resolve(); _root.Initialize(); _ = RestoreSessionAsync(); } private async Task RestoreSessionAsync() { var auth = _container.Resolve(); try { if (await auth.TryRestoreAsync()) { _root.ShowMeta(); return; } } catch (Exception exception) { Debug.LogException(exception); } _root.ShowLogin("Введите данные игрока."); } private void OnDestroy() { if (_container is IDisposable disposable) disposable.Dispose(); } } }