@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
67 lines (66 loc) • 2.61 kB
TypeScript
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 {};