FSM08 / 13

Состояния сцены и FSM

Состояние определяет, какие события сейчас обрабатываются и какие команды запускаются.

SceneFSM хранит текущее состояние и правила переходов. В FSMConfig есть начальное состояние, карта states, команды входа entry и обработчики событий on.

Фрагмент fsm.config.ts:

playing: {
  on: {
    [BlockPuzzleEvents.PlacementRequested]: {
      target: 'resolvingPlacement',
      actions: ['PlaceBlockCommand'],
    },
    [BlockPuzzleEvents.RestartRequested]: {
      actions: ['RestartBlockPuzzleCommand'],
    },
  },
},
01
playingПринимает PlacementRequested
02
resolvingPlacementОжидает событие результата
03
checkingMovesПри входе запускает CheckBlockPuzzleMovesCommand
04
playing или endedMovesAvailable продолжает игру; GameOver завершает её
Основная ветка успешного хода. Отклонённое размещение возвращает resolvingPlacement → playing.

Если событие не объявлено в текущем on, FSM его игнорирует. Если у правила есть actions, но нет target, команды выполняются без смены состояния. Именно так устроен RestartRequested.

Порядок перехода

В этом SDK сначала последовательно выполняются actions. Затем устанавливается target, после чего выполняется entry нового состояния. Поэтому внутри PlaceBlockCommand текущим состоянием ещё будет playing.

Событие, отправленное командой, ждёт в очереди. Например, PlacementCompleted будет обработано уже после смены состояния.

Источники ↗

Block Puzzle · fsm.config.ts↗Состояния исходной игры.