Состояния сцены и FSM
Состояние определяет, какие события сейчас обрабатываются и какие команды запускаются.
SceneFSM хранит текущее состояние и правила переходов. В FSMConfig есть начальное состояние, карта states, команды входа entry и обработчики событий on.
Фрагмент fsm.config.ts:
playing: {
on: {
[BlockPuzzleEvents.PlacementRequested]: {
target: 'resolvingPlacement',
actions: ['PlaceBlockCommand'],
},
[BlockPuzzleEvents.RestartRequested]: {
actions: ['RestartBlockPuzzleCommand'],
},
},
},
Если событие не объявлено в текущем on, FSM его игнорирует. Если у правила есть actions, но нет target, команды выполняются без смены состояния. Именно так устроен RestartRequested.
Порядок перехода
В этом SDK сначала последовательно выполняются actions. Затем устанавливается target, после чего выполняется entry нового состояния. Поэтому внутри PlaceBlockCommand текущим состоянием ещё будет playing.
Событие, отправленное командой, ждёт в очереди. Например, PlacementCompleted будет обработано уже после смены состояния.