Полный поток10 / 13

FSM и команды на примере хода

Проследим, что происходит после отпускания фигуры.

Рассмотрим отпускание фигуры над допустимыми клетками. Компонент перетаскивания отправляет PlacementRequested с slotId и anchor. Далее управление переходит к FSM игры.

ЗапросDragComponent → PlacementRequested → PlaceBlockCommand
Проверка и записьGameplay → Board / Slots / ScoreRules
Снимки результатаboardBeforeClear, boardAfterClear, clearedCells, scoreDelta
ЭкранBoardChanged, BlocksChanged, ScoreChanged и LinesCleared
Команда меняет состояние игры через сервис. Экран реагирует на отдельные события результата.

Что происходит с FSM

PlaceBlockCommand выполняется в playing. Затем FSM переходит в resolvingPlacement, читает PlacementCompleted из очереди и в checkingMoves проверяет доступные ходы.

На схеме ниже разберём успешное размещение по шагам.

Один ход в FSM

Сокращённая конфигурация Block Puzzle. Разместим фигуру и проследим, какие правила FSM выполняет по очереди.

playingТекущее состояние
СобытиеPlacementRequestedКомандаPlaceBlockCommandПереходresolvingPlacement
resolvingPlacementТекущее состояние
СобытиеPlacementCompletedПереходcheckingMoves
checkingMovesТекущее состояние
При входеCheckBlockPuzzleMovesCommand
СобытиеMovesAvailableПереходplaying
Событие в очерединет
Ожидание хода

FSM находится в playing и ждёт запроса на размещение.

Источники ↗

Block Puzzle · BlockPuzzleGameplayService.ts↗Порядок place и снимки результата.Block Puzzle · fsm.config.ts↗Переходы принятия и отклонения.