/** Vision callback function */
declare type canSee = (position: Array<number>) => boolean;
/** Angles that are in shadows */
interface Shadow {
    startAngle: number;
    endAngle: number;
}
/** Field of view */
export default class FOV {
    private canSee;
    private range;
    /** Accepts a callback function to determine if a location is seethrough */
    constructor(canSee: canSee, range?: number);
    /** Do the FOV calculation */
    look(position: Array<number>, lookRangeOverride?: number): void;
    /** Get angle a tile resides in
     * This ranges from -180 to 180, so be careful
    */
    angleTo(startPosition: Array<number>, endPosition: Array<number>): number;
    /** Get angular size of a square */
    angularSize(startPosition: Array<number>, endPosition: Array<number>): number;
    /** Get distance */
    distance(startPosition: Array<number>, endPosition: Array<number>): number;
    /** Check if in shadows */
    isInShadows(angle: number, shadows: Array<Shadow>): boolean;
    /** Add a shadow to the shadow array */
    combineShadow(shadows: Array<Shadow>, newShadow: Shadow): void;
}
export {};
