Files
vim-maze/src_old/types.ts
T
2025-10-17 03:07:07 +01:00

55 lines
1.5 KiB
TypeScript

import { useScore } from "./useScore";
import { useGame } from "./useGame";
export type UseGameType = ReturnType<typeof useGame>;
export type UseScoreType = ReturnType<typeof useScore>;
export type GamePhase = "idle" | "playing";
export type PlayStatus = "started" | "hasKey" | "game-over" | "game-won";
export type GameStatus = "waiting" | "started" | "hasKey" | "game-over" | "game-won";
export const isPlaying = (status: GameStatus): status is PlayStatus =>
status === "started" || status === "hasKey" || status === "game-over" || status === "game-won";
export const getGamePhase = (status: GameStatus): GamePhase =>
status === "waiting" ? "idle" : "playing";
export type KeyLogEntry = { key: string; timestamp: number };
export type KeyLogProvider = { keyLog: KeyLogEntry[] };
export type GameScoreContext = {
gameStatus: GameStatus;
setGameStatus: (status: GameStatus) => void;
stopGame: () => void;
// Optional — only Maze-type games provide these
mazeManager?: {
mazeInstanceRef?: { current?: any };
};
playerManager?: {
playerPos?: { r: number; c: number } | null;
};
};
export type UseScoreParams = {
gameContext: GameScoreContext;
keyManager?: KeyLogProvider;
};
export type PositionTag = "entrance" | "exit" | "key" | "hero";
export type Coord = [number, number];
export type CellTag = "wall" | "door" | PositionTag;
export type MazeCell = CellTag[];
export interface MazeData {
maze: MazeCell[][];
width: number;
height: number;
cols: number;
rows: number;
totalSteps: number;
}