All files / repo/src/shared/utils/handlers handleMatchPair.ts

100% Statements 16/16
100% Branches 1/1
100% Functions 1/1
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34  1x                       1x 1x 1x 1x 1x   1x   1x   1x   1x 1x 1x 1x 1x   1x 1x  
import type { Tile } from '@/components/GameCanvas/GameCanvas.types';
import { useGameStore } from '@/stores/useGameStore';
 
interface HandleMatchPairOptions {
  playMatch: () => Promise<void>;
  checkIfGameOver: () => boolean;
  playWin: () => Promise<void>;
  onGameOver: () => void;
  onMatch?: (a: Tile, b: Tile) => void;
  setGameOver: (value: boolean) => void;
  unlock: () => void;
}
 
export async function handleMatchPair(a: Tile, b: Tile, opts: HandleMatchPairOptions) {
  a.matched = true;
  b.matched = true;
  a.haloAngle = 0;
  b.haloAngle = 0;
 
  if (opts.onMatch) opts.onMatch(a, b);
 
  await opts.playMatch();
 
  useGameStore().incrementMatch(a, b);
 
  if (opts.checkIfGameOver()) {
    await opts.playWin();
    opts.setGameOver(true);
    opts.onGameOver();
  }
 
  opts.unlock();
}