UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

56 lines (55 loc) 2.4 kB
"use strict"; import { WFCQuadAttribute } from "./WFCAttributes"; import { Vector4 } from "three"; import { QuadGraph } from "../geometry/modules/quad/graph/QuadGraph"; import { QuadPrimitive } from "../geometry/modules/quad/QuadPrimitive"; import { quadId } from "./WFCUtils"; const _v4 = new Vector4(); const DEFAULT_TILE_ID = ""; export class WFCFloorGraph { // constructor(quadObject, floorIndex) { this.quadObject = quadObject; this.floorIndex = floorIndex; this._quadGraph = new QuadGraph(); this._quadNodeByQuadId = /* @__PURE__ */ new Map(); this._allowedTileConfigsByQuadId = /* @__PURE__ */ new Map(); } setupQuadNode(index, allTileConfigs) { const indices = this.quadObject.geometry.index; _v4.fromArray(indices, index * 4); const quadNode = this._quadGraph.addQuad(index, _v4.toArray()); const { quadTileConfigs } = this.resetQuadNode(quadNode, allTileConfigs); return { quadNode, quadTileConfigs }; } resetQuadNode(quadNode, allTileConfigs) { const index = quadNode.id; const _quadId = quadId(this.quadObject, index); if (_quadId == null) { throw new Error(`attribute ${WFCQuadAttribute.QUAD_ID} not found`); } const tileId = QuadPrimitive.hasAttribute(this.quadObject, WFCQuadAttribute.TILE_ID) ? QuadPrimitive.attribValue(this.quadObject, index, WFCQuadAttribute.TILE_ID) || DEFAULT_TILE_ID : DEFAULT_TILE_ID; const tileIds = tileId.trim().length > 0 ? tileId.split(" ") : []; const tileIdsSet = new Set(tileIds); const quadTileConfigs = tileIds.length > 0 ? allTileConfigs.filter((c) => tileIdsSet.has(c.tileId)) : [...allTileConfigs]; this._allowedTileConfigsByQuadId.set(index, quadTileConfigs); this._quadNodeByQuadId.set(_quadId, quadNode); return { quadTileConfigs }; } quadNodeFromId(quadId2) { return this._quadNodeByQuadId.get(quadId2); } quadNodeFromOtherQuadNode(otherGraphQuadNode) { const _quadId = quadId(this.quadObject, otherGraphQuadNode.id); return this._quadNodeByQuadId.get(_quadId); } allowedTileConfigsForQuadNode(quadNode) { return this._allowedTileConfigsByQuadId.get(quadNode.id); } setAllowedTileConfigsForQuadNode(quadNode, tileConfigs) { this._allowedTileConfigsByQuadId.set(quadNode.id, tileConfigs); } neighbourData(quadId2, sideIndex, target) { this._quadGraph.neighbourData(quadId2, sideIndex, target); } }