- Create new hook modules: useBoard, useCursor, useGameStatus - Move/copy hook implementations to their own directories - Create index.ts files for clean module exports - Update all imports to use new module locations - Rename useSnake -> useCursor for Unified API alignment - Rename useRenderer -> useBoard for clarity - Update main src/index.ts to export from all hook modules - All TypeScript builds successfully - Example app remains functional
56 lines
1.4 KiB
TypeScript
Executable File
56 lines
1.4 KiB
TypeScript
Executable File
import { useEffect } from "react";
|
|
import { useBoard } from "../useBoard";
|
|
import { useCursor } from "../useCursor";
|
|
import { useFood } from "./useFood";
|
|
import { useGameStatus } from "../useGameStatus";
|
|
import { useKeyBindings, type UseKeyBindingsType } from "./useKeyBindings";
|
|
import { useScore } from "../useScore";
|
|
|
|
export function useGame(cols: number, rows: number, platformHook?: unknown) {
|
|
const boardManager = useBoard();
|
|
const { containerRef, renderBoard } = boardManager;
|
|
|
|
const snakeManager = useCursor(cols, rows, boardManager);
|
|
const { changeDirection } = snakeManager;
|
|
|
|
const foodManager = useFood(cols, rows, boardManager);
|
|
|
|
const gameManager = useGameStatus(boardManager, snakeManager, foodManager);
|
|
const { gameStatus, startGame, stopGame, togglePause, score, level } = gameManager;
|
|
|
|
useEffect(() => {
|
|
renderBoard(cols, rows);
|
|
}, [cols, rows]);
|
|
|
|
const keyBindings: UseKeyBindingsType = useKeyBindings({
|
|
gameManager: {
|
|
gameStatus,
|
|
changeDirection,
|
|
},
|
|
});
|
|
|
|
const scoreManager = useScore({ gameStatus });
|
|
|
|
const fullGameManager = {
|
|
containerRef,
|
|
gameStatus,
|
|
startGame,
|
|
stopGame,
|
|
togglePause,
|
|
score,
|
|
level,
|
|
...snakeManager,
|
|
...foodManager,
|
|
...keyBindings,
|
|
scoreManager,
|
|
};
|
|
|
|
if (typeof platformHook === "function") {
|
|
platformHook(fullGameManager);
|
|
}
|
|
|
|
return fullGameManager;
|
|
}
|
|
|
|
export type { GameStatus } from "../types";
|