Files
QuizPlease/Assets/Scripts/Boot/Composition/GameLifetimeScope.cs
T
horooko 55e271805b feat(task-0003): implement boot flow service with menu restart signal and state transitions
- Implement BootFlowService with IStatesController injection and RunFlowAsync logic
- Add Splash → Load → Menu loop with cancellation support in boot flow
- Create IMenuRestartSignal interface for menu restart coordination
- Implement MenuRestartSignal using UniTaskCompletionSource
- Update MenuState to wait for restart signal instead of completing immediately
- Register MenuRestartSignal as singleton in GameLifetimeScope DI container

Выполнена задача TASK-0003 и реализован поток загрузки:
- Реализован BootFlowService с внедрением IStatesController и логикой RunFlowAsync
- Добавлен цикл Splash → Load → Menu с поддержкой отмены в потоке загрузки
- Создан интерфейс IMenuRestartSignal для координации перезапуска меню
- Реализован MenuRestartSignal с использованием UniTaskCompletionSource
- Обновлён MenuState для ожидания сигнала перезапуска вместо немедленного завершения
- Зарегистрирован MenuRestartSignal как синглтон в DI контейнере GameLifetimeScope
2026-05-27 04:13:29 +07:00

47 lines
1.6 KiB
C#

using QuizPleaseTest.Boot.Flow;
using QuizPleaseTest.Boot.Settings;
using QuizPleaseTest.Boot.States;
using QuizPleaseTest.Boot.UI;
using QuizPleaseTest.Common.Services;
using QuizPleaseTest.Common.StateMachine;
using UnityEngine;
using VContainer;
using VContainer.Unity;
namespace QuizPleaseTest.Boot.Composition
{
public class GameLifetimeScope : LifetimeScope
{
[field: SerializeField] public BootSettings BootSettings { get; private set; }
[field: SerializeField] public SplashUIView SplashView { get; private set; }
[field: SerializeField] public LoadingUIView LoadingView { get; private set; }
[field: SerializeField] public MenuUIView MenuView { get; private set; }
protected override void Configure(IContainerBuilder builder)
{
builder.RegisterInstance(BootSettings);
builder.RegisterComponent(SplashView);
builder.RegisterComponent(LoadingView);
builder.RegisterComponent(MenuView);
builder.Register<BootFlowService>(Lifetime.Singleton)
.As<IBootFlowService>()
.As<IService>();
builder.Register<MenuRestartSignal>(Lifetime.Singleton)
.As<IMenuRestartSignal>();
builder.Register<BootStatesController>(Lifetime.Singleton)
.As<IStatesController<BootStateCode>>()
.AsSelf();
builder.Register<SplashState>(Lifetime.Singleton);
builder.Register<LoadState>(Lifetime.Singleton);
builder.Register<MenuState>(Lifetime.Singleton);
builder.RegisterEntryPoint<BootstrapEntryPoint>();
}
}
}