Skip to content

Instantly share code, notes, and snippets.

@MarceloAlves
Last active May 1, 2020 07:01
Show Gist options
  • Select an option

  • Save MarceloAlves/d28649f1f2d193546411816176307287 to your computer and use it in GitHub Desktop.

Select an option

Save MarceloAlves/d28649f1f2d193546411816176307287 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
// - XState (all XState exports)
const randomNumber = (min, max) => {
return Math.floor(Math.random() * (max - min + 1) + min)
}
const mainMachine = Machine(
{
id: 'main',
initial: 'idle',
context: {
winners: [],
fighters: [],
winner: null,
},
states: {
idle: {
entry: 'setInitialFighters',
on: {
START: 'running',
},
},
running: {
id: 'running',
initial: 'awaitingSelection',
states: {
awaitingSelection: {
on: {
'': {
cond: (ctx) => ctx.winners.length === 10,
actions: 'declareWinner',
target: '#main.results',
},
PICK_WINNER: {
actions: ['addWinner', 'nextFighters'],
},
},
},
},
},
results: {
on: {
RESTART: {
actions: 'setInitialFighters',
target: '#main.running',
},
},
},
},
},
{
actions: {
addWinner: assign({
winners: (ctx, evt) => ctx.winners.concat({ id: evt.selection, round: ctx.winners.length + 1 }),
}),
setInitialFighters: assign({
winners: (_ctx) => [],
fighters: (_ctx) => [randomNumber(1, 245), randomNumber(246, 493)],
}),
nextFighters: assign({
fighters: (_ctx, evt) => [evt.selection, randomNumber(1, 493)],
}),
declareWinner: assign({
winner: (ctx, _evt) => ctx.winners[ctx.winners.length - 1].id,
}),
},
}
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment