6c46b3043a
- 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
2.2 KiB
2.2 KiB
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.ExitAsyncrelease-нуть 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.