Files
QuizPlease/Agent/Task/TASK-0006.md
T
horooko 6c46b3043a feat: add agent tasks and update documentation
- Create 7 new task files (TASK-0001 through TASK-0007)
- Add task template file for future use
- Update Agent.md with project information
- Update TASK.md with task tracking
2026-05-27 03:36:25 +07:00

2.2 KiB
Raw Blame History

TASK-0006: MenuState и Restart

Цель

Реализовать меню с кнопкой Restart, которое завершает MenuState и возвращает flow к загрузке.

Что сделать

  • Реализовать MenuState.
  • Реализовать MenuUIView.
  • Реализовать MenuUIViewModel или аналогичный plain C# объект для restart-сигнала.
  • В MenuState.EnterAsync показать menu View и ожидать restart.
  • Ожидание restart реализовать через UniTaskCompletionSource или аналогичный UniTask-friendly механизм.
  • По нажатию кнопки Restart завершать ожидание MenuState.EnterAsync.
  • В MenuState.ExitAsync release-нуть menu View и очистить подписки/listeners.

Технические требования

  • Кнопку подключать через Button.onClick.AddListener(...).
  • В Release() снимать ровно тот же listener через RemoveListener(...).
  • Не использовать RemoveAllListeners() как основной способ очистки.
  • Не использовать анонимную лямбду, которую невозможно симметрично снять.
  • Не переводить state machine напрямую из MenuUIView.
  • Restart-событие должно попадать во flow через ViewModel/state, а не через глобальное состояние.

Критерии готовности

  • MenuState.EnterAsync завершается после нажатия Restart.
  • После завершения MenuState внешний BootFlowService запускает LoadState.
  • Несколько циклов Menu -> Restart -> Load -> Menu не дублируют callbacks.
  • Повторный Release() у MenuUIView не падает.

Заметки

Для кнопки лучше использовать method group или заранее сохраненный delegate. Это упрощает симметричный AddListener/RemoveListener и снижает риск дублирующихся callbacks.