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 на основе значения прогресса для визуальной обратной связи
43 lines
2.5 KiB
Markdown
43 lines
2.5 KiB
Markdown
# TASK-0005: SplashState, LoadState и прогресс
|
||
|
||
## Статус
|
||
|
||
Ready
|
||
|
||
## Цель
|
||
|
||
Реализовать splash и loading состояния с настоящей отменой async-операций и реактивным прогрессом через UniRx.
|
||
|
||
## Что сделать
|
||
|
||
- Реализовать `SplashState`.
|
||
- В `SplashState.EnterAsync` показать splash View и подождать 1 секунду через `UniTask.Delay(..., cancellationToken: ct)`.
|
||
- В `SplashState.ExitAsync` скрыть или release-нуть splash View.
|
||
- Реализовать `LoadState`.
|
||
- В `LoadState` создать реактивный прогресс от `0` до `1` через UniRx.
|
||
- Наружу отдавать progress как read-only значение или read-only интерфейс.
|
||
- В `LoadState.EnterAsync` сбрасывать progress в `0f`.
|
||
- Выполнить 5 шагов загрузки по 200 мс с обновлениями `0.2f`, `0.4f`, `0.6f`, `0.8f`, `1f`.
|
||
- Реализовать `LoadingUIView`, подписанный на progress.
|
||
|
||
## Технические требования
|
||
|
||
- Использовать UniTask и `CancellationToken` во всех delay.
|
||
- Использовать UniRx для progress и подписок.
|
||
- Подписки хранить в `CompositeDisposable` и очищать в `Release()`.
|
||
- `LoadingUIView` не должна менять progress, только читать его.
|
||
- Не обновлять progress UI через `Update()`.
|
||
- При использовании tween/lerp останавливать предыдущую визуализацию перед запуском новой.
|
||
|
||
## Критерии готовности
|
||
|
||
- `SplashState` отменяется через внешний `CancellationToken`.
|
||
- `LoadState` выставляет ожидаемую последовательность progress значений.
|
||
- `LoadingUIView` корректно обновляет progress bar.
|
||
- При выходе из `LoadState` подписки очищаются.
|
||
- Повторный вход в `LoadState` не создает дублирующихся подписок и не вызывает `NullReferenceException`.
|
||
|
||
## Заметки
|
||
|
||
В этом проекте важнее чистый lifecycle и гигиена подписок, чем сложная анимация progress bar. Достаточно прямого обновления или простого lerp.
|