36 lines
982 B
TypeScript
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;
|
|
}
|