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.5 KiB
2.5 KiB
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.