import type { Matrix4, Object3D, Vector2, Vector3 } from 'three/webgpu';
import type { AABB2 } from './AABB2.js';
import type { Map2DTileCoordsUtil } from './Map2DTileCoordsUtil.js';
export interface IMap2DRenderableArea {
    aabb: AABB2;
}
export interface IMap2DTileDataProvider {
    getTileIdAt(col: number, row: number): number;
    getTileIdsWithin(left: number, top: number, width: number, height: number, target?: Uint32Array): Uint32Array;
}
export interface IMap2DTileCoords {
    id: string;
    x: number;
    y: number;
    view: AABB2;
}
export interface IMapTileFactory<T = unknown> {
    addToNode(node: Object3D): void;
    removeFromNode(node: Object3D): void;
    createTile(tileCoords: IMap2DTileCoords): T | undefined;
    updateTile(tile: T, tileCoords: IMap2DTileCoords): void;
    destroyTile(tile: T): void;
    update(): void;
}
export interface IMap2DTileRenderer {
    node: Object3D;
    beginUpdatingTiles(position: Vector3): void;
    addTile(tileCoords: IMap2DTileCoords): void;
    reuseTile(tileCoords: IMap2DTileCoords): void;
    removeTile(tileCoords: IMap2DTileCoords): void;
    endUpdatingTiles(): void;
    clearTiles(): void;
    dispose(): void;
}
export interface IMap2DVisibleTiles {
    tiles: IMap2DTileCoords[];
    offset?: Vector2;
    translate?: Vector3;
    removeTiles?: IMap2DTileCoords[];
    reuseTiles?: IMap2DTileCoords[];
    createTiles?: IMap2DTileCoords[];
}
export interface IMap2DVisibilitor {
    computeVisibleTiles(previousTiles: IMap2DTileCoords[], centerPoint: [number, number], tileCoords: Map2DTileCoordsUtil, matrixWorld: Matrix4): IMap2DVisibleTiles | undefined;
}
export interface IMap2DVisibilitorHelpers {
    add(scene: Object3D): void;
    remove(scene: Object3D): void;
    update(): void;
    show: boolean;
}
//# sourceMappingURL=types.d.ts.map