import type { Tile } from "./tacticalGrid.js"; export interface SurfaceKindDef { id: string; duration?: number; } export interface SurfaceReaction { when: readonly [string, string]; result: string | null; } export interface SurfaceLayerConfig { kinds: readonly SurfaceKindDef[]; reactions?: readonly SurfaceReaction[]; } export interface SurfacePatch { duration?: number; } export type SurfaceEvent = { kind: "apply"; tile: Tile; surface: string; } | { kind: "react"; tile: Tile; consumed: readonly [string, string]; produced: string | null; } | { kind: "expire"; tile: Tile; surface: string; }; export interface SurfaceCellKind { surface: string; remaining: number | null; } export interface SurfaceCell { tile: Tile; kinds: SurfaceCellKind[]; } export type SurfaceLayerSnapshot = Record>; export interface SurfaceLayer { apply(tile: Tile, surface: string, patch?: SurfacePatch): SurfaceEvent[]; has(tile: Tile, surface: string): boolean; kindsAt(tile: Tile): string[]; remove(tile: Tile, surface: string): void; clearTile(tile: Tile): void; clear(): void; tick(dt: number): SurfaceEvent[]; cells(): SurfaceCell[]; capture(): SurfaceLayerSnapshot; restore(snapshot: SurfaceLayerSnapshot): void; } /** @internal */ export declare function createSurfaceLayer(config: SurfaceLayerConfig): SurfaceLayer;