fix(example): update useKeyBindings to work with new GameManager interface

- Import GameManager type directly from main package
- Use new Unified API methods: renderBoard, quitGame, clearKeyLog
- Remove pause functionality for now (simplified like vim-maze)
- Match vim-maze's key binding pattern
- Game now starts and plays correctly
This commit is contained in:
2025-10-30 22:30:00 +00:00
parent 5c398b556f
commit f9cd9c60e7
+13 -20
View File
@@ -1,19 +1,18 @@
import { useEffect } from "react";
import type { UseGameType } from "@vimazing/vim-snake";
import type { GameManager } from "../../src";
export const useKeyBindings = (gameManager: UseGameType) => {
const { gameStatus, startGame, stopGame, clearLog, resetCount, togglePause } = gameManager;
export const useKeyBindings = (gameManager: GameManager) => {
const { gameStatus, renderBoard, startGame, quitGame, clearKeyLog } = gameManager;
useEffect(() => {
const handler = (ev: KeyboardEvent) => {
// start game
if (ev.code === "Space") {
if (["waiting", "game-over", "game-won"].includes(gameStatus)) {
clearLog();
resetCount();
clearKeyLog();
renderBoard();
if (gameStatus === "game-over" || gameStatus === "game-won") {
stopGame();
quitGame();
setTimeout(() => startGame(), 0);
} else {
startGame();
@@ -22,24 +21,18 @@ export const useKeyBindings = (gameManager: UseGameType) => {
}
}
console.log('ev.key', ev.key)
if (ev.key === 'p' || ev.key === 'P') {
togglePause();
}
// ignore other keys while waiting
if (gameStatus === "waiting") return;
// quit
if (ev.key === "q" || ev.key === "Q") {
if (gameStatus === "started") {
stopGame();
resetCount();
return;
}
quitGame();
return;
}
};
window.addEventListener("keydown", handler, { capture: true });
return () => window.removeEventListener("keydown", handler, { capture: true });
}, [gameStatus, startGame, stopGame, clearLog, resetCount]);
window.addEventListener("keydown", handler);
return () => window.removeEventListener("keydown", handler);
}, [gameStatus]);
};