game start/stop, snake rendered on board

This commit is contained in:
2025-10-16 12:56:15 +01:00
parent 39dde6e5e6
commit 6a3cfad409
7 changed files with 216 additions and 13 deletions
+23 -1
View File
@@ -1,17 +1,39 @@
import { useEffect } from "react";
import { useRenderer } from "./useRenderer";
import { useSnake } from "./useSnake";
import { useGameStatus } from "./useGameStatus";
import { useKeyBindings, type UseKeyBindingsType } from "./useKeyBindings";
export function useGame(cols: number, rows: number, platformHook?: unknown) {
const rendererManager = useRenderer();
const { containerRef, renderBoard } = rendererManager;
const snakeManager = useSnake(cols, rows, rendererManager);
const { changeDirection } = snakeManager;
const gameManager = useGameStatus(rendererManager, snakeManager);
const { gameStatus, startGame, stopGame } = gameManager;
useEffect(() => {
renderBoard(cols, rows);
}, [cols, rows]);
const keyBindings: UseKeyBindingsType = useKeyBindings({
gameManager: {
gameStatus,
startGame,
stopGame,
changeDirection,
},
});
const fullGameManager = {
containerRef,
renderBoard,
gameStatus,
startGame,
stopGame,
...snakeManager,
...keyBindings,
};
if (typeof platformHook === "function") {