import { IPoint } from "./core";
import { Vector2 } from "./Vector2";
export interface IGridRaycastResult {
    distance: number;
    side: number;
    value: number | undefined;
}
export declare type GridForEach = (value: number, x: number, y: number) => void;
export declare class Grid {
    static fromStrings(rows: string[], map: string): Grid;
    width: number;
    height: number;
    cells: number[];
    private readonly center;
    constructor(width?: number, height?: number);
    resize(width: number, height: number): void;
    fill(value: number): void;
    valid(x: number, y: number): boolean;
    get(x: number, y: number): number;
    getAdjacentFlags(x: number, y: number): number;
    set(x: number, y: number, value: number): void;
    setIndex(index: number, value: number): void;
    copy(grid: Grid): void;
    forEach(handler: GridForEach): void;
    forEachInArea(x: number, y: number, width: number, height: number, handler: GridForEach): void;
    forEachAdjacent(x: number, y: number, handler: GridForEach): void;
    rotate(rotations?: number): void;
    rotatePoint(p: IPoint, angle: number): void;
    paste(grid: Grid, x: number, y: number): void;
    raycast(origin: IPoint, direction: Vector2, result?: IGridRaycastResult): IGridRaycastResult;
    xyToIndex(x: number, y: number): number;
    private indexToX;
    private indexToY;
}
