Files
vim-maze/src/useGame.ts
T
2025-10-19 03:07:52 +01:00

36 lines
982 B
TypeScript

import type { GameManager, GameOptions } from './types';
import { useBoard } from './useBoard';
import { useCursor } from './useCursor';
import { useKeyBindings } from './useKeyBindings';
import { useGameStatus } from './useGameStatus';
export function useGame(options: GameOptions, platformHook?: unknown): GameManager {
const { cols, rows } = options;
const board = useBoard(cols, rows);
const { containerRef, renderBoard } = board;
const gameStatusManager = useGameStatus();
const { gameStatus, startGame, togglePause, quitGame, setGameStatus } = gameStatusManager;
const cursor = useCursor(board, gameStatus);
const keyManager = useKeyBindings({ cursor, hero: cursor.hero, gameStatus, setGameStatus });
const gameManager = {
containerRef,
gameStatus,
renderBoard,
startGame,
togglePause,
quitGame,
cursor,
keyManager,
}
if (typeof platformHook === 'function') {
platformHook(gameManager);
}
return gameManager;
}