fda094dd44
- Add SplashState delay timer using BootSettings.SplashDurationSeconds with cancellation support - Implement LoadState progress tracking via ReactiveProperty<float> with step-by-step updates - Update LoadingUIViewModel to accept and expose Progress reactive property - Connect LoadingUIView to ViewModel progress changes using UniRx subscriptions - Add CompositeDisposable for proper cleanup of UI subscriptions in Release() - Scale ProgressFill transform based on progress value for visual feedback Выполнена задача TASK-0005 и реализованы splash и loading состояния: - Добавлен таймер задержки в SplashState с использованием BootSettings.SplashDurationSeconds и поддержкой отмены - Реализован трекинг прогресса в LoadState через ReactiveProperty<float> со пошаговыми обновлениями - Обновлён LoadingUIViewModel для принятия и экспорта реактивного свойства Progress - Подключён LoadingUIView к изменениям прогресса ViewModel с использованием подписок UniRx - Добавлен CompositeDisposable для правильной очистки UI подписок в Release() - Масштабирование ProgressFill на основе значения прогресса для визуальной обратной связи
2.0 KiB
2.0 KiB
TASK-0004: UI база и ViewModel слой
Статус
Ready
Цель
Создать базовый UI слой, в котором View отвечает только за Unity-ссылки и биндинги, а логика находится во ViewModel или state/flow сервисах.
Что сделать
- Создать
IUIViewModel. - Создать
UIView : MonoBehaviourс методамиInitialize()иRelease(). - Создать
UIView<TVm> : UIView where TVm : IUIViewModel. - Добавить явную привязку ViewModel во View через метод вроде
Bind(TVm vm)илиSetup(TVm vm). - Сделать
Release()идемпотентным для всех View. - Подготовить View для splash, loading и menu экранов.
Технические требования
- ViewModel должна быть обычным C#-классом, не
MonoBehaviour. - Runtime-данные передавать во View явно, а не через DI-поля MonoBehaviour.
- View не должна содержать orchestration-логику boot flow.
- Все подписки и listeners должны сниматься в
Release(). - Повторный вызов
Release()не должен приводить к ошибкам.
Критерии готовности
- Есть базовые классы
UIViewиUIView<TVm>. - ViewModel можно передать во View явно перед
Initialize(). Release()безопасен при повторном вызове.- View не вызывает
FindObjectOfType, не хранит глобальное состояние и не управляет переходами state machine.
Заметки
MonoBehaviour должны оставаться presentation layer. Это соответствует задаче: логика находится в VM или сервисах, View только показывает состояние и прокидывает UI-события.