Parallel States
In a heirarchy of states, parallel states are parents. They contain atomic , compound or other parallel states.
Usage
Use parallel(...)
to create state configuration and resolveState(...)
to initialize it.
import { atomic, parallel, emitEvent, resolveState } from 'hine';let health = 10;let position = 10;const playerConfig = parallel('player', { children: [ atomic('health', { on: { advance: () => health++ }, }), atomic('position', { on: { advance: () => position++ }, }), ],});const playerState = resolveState(playerConfig);emitEvent(playerState, 'advance');
In this example, playerState
is set to increment both health
and position
by 1
each time an 'advance'
event is emitted.
Active Children
Active states are those that can receive and handle emitted events at a particular time. All children in a parallel state are active.
const activeChildCount = playerState.activeChildren.length;const childCount = playerState.children.size;// Always `true` for parallel statesconsole.log(activeChildCount === childCount);
Hooks
Parallel states accept hooks such as afterEntry
and beforeExit
. Hooks respond to life-cycle events of a state.
import { atomic, parallel, emitEvent, resolveState } from 'hine';let health;let position;const initializeHealth = () => (health = 10);const initializePosition = () => (position = 10);const playerConfig = parallel('player', { children: [ atomic('health', { hooks: { afterEntry: initializeHealth, }, on: { advance: () => health++ }, }), atomic('position', { hooks: { afterEntry: initializePosition, }, on: { advance: () => position++ }, }), ],});const playerState = resolveState(playerConfig);emitEvent(playerState, 'advance');
When playerState
is resolved, it will transition to the 'health'
and 'position'
states simulatenously and
initialize both health
and position
to 10
.