All files / repo/src/hooks useGameStart.ts

100% Statements 31/31
100% Branches 6/6
100% Functions 2/2
100% Lines 31/31

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 35 36 37 38 39 401x 1x 1x 1x   1x 3x 3x 3x   3x 3x 3x   3x 2x 3x 1x 1x   3x 3x   3x   3x   3x 3x 3x 3x 3x 3x   3x 3x 3x 3x 3x  
import { generateShuffledTiles } from '@/shared/utils/generateTiles';
import { preloadImagesWithAwait } from '@/shared/utils/imageCache';
import { isDifficultyType } from '@/shared/utils/isDifficultyType';
import { ref } from 'vue';
 
export function useGameStart() {
  const isLoading = ref(false);
  const seed = ref('');
  const difficulty = ref<number>(1);
 
  async function startGame(payload: { seed: string; difficulty: number }) {
    localStorage.removeItem('memory-game-state');
    seed.value = payload.seed || Date.now().toString();
 
    if (isDifficultyType(payload.difficulty)) {
      difficulty.value = payload.difficulty;
    } else {
      console.error('Invalid difficulty type:', payload.difficulty);
    }
 
    const tiles = generateShuffledTiles(seed.value, difficulty.value);
    const imagesToPreload = tiles.map((t) => t.imagePath!).filter(Boolean);
 
    isLoading.value = true;
 
    await preloadImagesWithAwait(imagesToPreload);
 
    isLoading.value = false;
    return {
      seed: seed.value,
      difficulty: difficulty.value,
    };
  }
 
  return {
    isLoading,
    startGame,
  };
}