@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
29 lines (27 loc) • 1.24 kB
text/typescript
import {NeighbourIndex} from '../geometry/modules/quad/graph/QuadGraphCommon';
import {ERROR_TILE_ID, UNRESOLVED_TILE_ID} from './WFCConstant';
export type TileRotation = NeighbourIndex;
export interface TileConfig {
tileId: string;
rotation: TileRotation;
}
export const UNRESOLVED_TILE_CONFIG: TileConfig = {tileId: UNRESOLVED_TILE_ID, rotation: 0};
export const ERRORED_TILE_CONFIG: TileConfig = {tileId: ERROR_TILE_ID, rotation: 0};
const TILE_CONFIG_ELEMENT_SEPARATOR = ':';
const TILE_CONFIGS_SEPARATOR = ',';
export function tileConfigToString(tileConfig: TileConfig): string {
return `${tileConfig.tileId}${TILE_CONFIG_ELEMENT_SEPARATOR}${tileConfig.rotation}`;
}
export function tileConfigsToString(tileConfigs: TileConfig[]): string {
return tileConfigs.map(tileConfigToString).join(TILE_CONFIGS_SEPARATOR);
}
export function stringToTileConfigs(tileConfigsString: string): TileConfig[] {
const tileConfigElements = tileConfigsString.split(TILE_CONFIGS_SEPARATOR);
return tileConfigElements.map((tileConfigString) => {
const tileConfigElements = tileConfigString.split(TILE_CONFIG_ELEMENT_SEPARATOR);
return {
tileId: tileConfigElements[0],
rotation: parseInt(tileConfigElements[1]) as TileRotation,
};
});
}