Files
QuizPlease/Agent/Task/TASK-0005.md
T
horooko fda094dd44 feat(task-0005): implement splash delay and loading progress with reactive properties
- 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 на основе значения прогресса для визуальной обратной связи
2026-05-27 04:27:33 +07:00

2.5 KiB
Raw Blame History

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.