import { TileConfig } from './WFCTileConfig';
import { Object3D } from 'three';
import { QuadNode } from '../geometry/modules/quad/graph/QuadNode';
import { NeighbourIndex } from '../geometry/modules/quad/graph/QuadGraphCommon';
import { QuadObject } from '../geometry/modules/quad/QuadObject';
import { CoreObjectType, ObjectContent } from '../geometry/ObjectContent';
interface WFCSolverOptions {
    tileAndRuleObjects: Object3D[];
    quadObject: QuadObject;
    maxResolvedQuadsCount: number;
}
interface WFCSolverProcessOptions {
    stepsCount: number;
    quadSeed: number;
    configSeed: number;
}
interface WFCSolverUpdateOptions extends WFCSolverProcessOptions {
    object: ObjectContent<CoreObjectType>;
    floorId: number;
    quadId: number;
    tileId: string;
    rotation: NeighbourIndex;
}
export declare class WFCSolver {
    private _resolvedQuadsCount;
    private _maxResolvedQuadsCount;
    private _stepsCount;
    private _tilesCollection;
    private _quadPositionArrays;
    private _lowestEntropy;
    private _quadNodeByEntropy;
    private _floorGraphs;
    private _quadIndicesByFloorIndex;
    private _floorGraphIndexByQuadNode;
    private _samplingWithWeightRequired;
    private _solvedTileConfigs;
    private _allTileConfigs;
    constructor(options: WFCSolverOptions);
    private _setSolvedTileConfigs;
    private _setupQuadNode;
    private _resetQuadNode;
    private _initQuadNodeEntropyCache;
    process(options: WFCSolverProcessOptions, comparableQuadNodes?: Set<QuadNode>): void;
    private step;
    addSoftContraint(options: WFCSolverUpdateOptions): void;
    private _solveReachMaxCount;
    private _selectConfig;
    protected _commitConfigsAttributes(): void;
    private _placeErrorTileObject;
    private _approveConfigForQuad;
    private _commitConfigsAttributeToQuadPrimitive;
    private _commitConfigAttributeToQuadPrimitive;
    private _updateNeighboursEntropy;
    private _resetAndUpdateNeighboursEntropy;
    private _updateQuadEntropy;
    private _reduceEntropyWithCache;
    private _setQuadNodeEntropyCache;
    private _resetQuadNodeEntropyIfNotReset;
    private _reduceEntropy;
    private _checkConfigAgainstNeighbours;
    protected _isConfigAllowedWithNeighbour(quadNode: QuadNode, tileConfig: TileConfig, neighbourIndex: NeighbourIndex, comparableQuadNodes?: Set<QuadNode>): boolean;
    protected _isConfigAllowedWithVerticalNeighbour(quadNode: QuadNode, tileConfig: TileConfig, floorOffset: 1 | -1, comparableQuadNodes?: Set<QuadNode>): boolean;
    private _quadNodeWithLowestEntropy;
    private _floorGraph;
}
export {};
