PR pixi-reels
All recipes

Cascade refill orders. pick the post-win flow

Three interactive canvases. Same scripted win, same destruction, same .tumble() feel. only the cascade-refill ordering changes. See which one fits your slot's rhythm.

Each canvas below runs the same scripted spin: 6×4 cards land left-to-right with a pre-wired 3-cluster of 10 on row 2. The winners go through the same reelSet.destroySymbols(...) implode effect. Only the refill drop-in order varies between canvases. controlled by setDropOrder() on the reel set and rowStagger / rowOrder on the builder’s .tumble({ dropIn }) config.

The default is simultaneous. The other three vary the drop-in order across rows or columns. all four refill the grid in one phase without you writing motion code.

Simultaneous. the canonical default

Loading recipe…

.tumble({
  dropIn: { rowStagger: 0, distance: 'perHole' },
})
// ...
reelSet.setDropOrder('all');  // 0 ms delay between reels
await reelSet.refill({ winners, grid: stage1.map((visible) => ({ visible })) });

No in-reel row stagger (rowStagger: 0), no cross-reel delay (setDropOrder('all')). Every cell that needs to move starts moving at the same frame. Snappy, no pacing overhead. the player gets back to a “ready” grid as fast as the drop-in animation runs. This is what 80%+ of commercial cascade slots ship.

Left-to-right wave

Loading recipe…

.tumble({
  dropIn: { rowStagger: 0, distance: 'perHole' },
})
// ...
reelSet.setDropOrder('ltr', 90);  // 90 ms between reels, left to right
await reelSet.refill({ winners, grid: stage1.map((visible) => ({ visible })) });

Each reel’s rows still arrive together, but reel 0 lands first, then reel 1, then reel 2… Reads as the grid “filling up” column-by-column. Visually distinctive but it adds noticeable time to every cascade. picture six cascades in a chain × 6 columns × 90 ms = nearly 3 extra seconds across the round.

Use when the cascade chain is rare (deep features, bonus rounds) or when the column-by-column reveal IS the slot’s hook.

Bottom-up row arrival

Loading recipe…

.tumble({
  dropIn: {
    rowStagger: 90,
    rowOrder: 'bottomToTop',
    distance: 'perHole',
  },
})
// ...
reelSet.setDropOrder('all');  // all reels at once
await reelSet.refill({ winners, grid: stage1.map((visible) => ({ visible })) });

All reels drop simultaneously, but within each reel the bottom row lands first and the top row lands last. Reads as the board “stacking up from below”. Pairs well with puzzle / match-3 / chess-board themes where the slot’s metaphor is a physical board being built.

Going further

  • Tumble feels. varies the easings and distances rather than the order. Pair with any refill pattern.
  • Cascade 6×5 tumble. full cluster-detection + multiplier on top of the cascade-refill loop.
  • Spin first, cascade after. strip-spin landing → cascade refill (different mechanic).