export interface FogBounds { minX: number; minZ: number; maxX: number; maxZ: number; } export interface FogConfig { bounds: FogBounds; cellSize: number; /** Cells revealed on construction (start-of-run known area). */ revealed?: readonly number[]; } export interface FogCells { cols: number; rows: number; minX: number; minZ: number; cellSize: number; /** Row-major flags; index = row * cols + col. */ revealed: readonly boolean[]; revealedCount: number; } /** * Reveal-on-event fog of war over a fixed grid. Walking (`revealAlong`) and * digging/acting (`reveal`) clear cells; once revealed a cell stays revealed. * Pure and renderer-free — the shell/react map draws `cells()`. */ export interface FogField { reveal(x: number, z: number, radius?: number): number; revealAlong(from: readonly [number, number], to: readonly [number, number], radius?: number): number; isRevealed(x: number, z: number): boolean; isRevealedCell(col: number, row: number): boolean; revealedCount(): number; cellCount(): number; fraction(): number; cells(): FogCells; reset(): void; subscribe(listener: () => void): () => void; } export declare function createFogField(config: FogConfig): FogField;