UNPKG

@polygonjs/polygonjs

Version:

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

94 lines (93 loc) 3.22 kB
"use strict"; import { TypedSopNode } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { SopType } from "../../poly/registers/nodes/types/Sop"; import { InputCloneMode } from "../../poly/InputCloneMode"; import { CoreWFCTileAttribute } from "../../../core/wfc/WFCAttributes"; import { isBooleanTrue } from "../../../core/Type"; import { filterCoreObjectsFromCoreGroup } from "../../../core/geometry/Mask"; class WFCTilePropertiesSopParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param group to assign the material to */ this.group = ParamConfig.STRING("", { objectMask: true }); /** @param addId */ this.addId = ParamConfig.BOOLEAN(1); /** @param addId */ this.id = ParamConfig.STRING("`$OS`-`@objnum`", { visibleIf: { addId: 1 }, expression: { forEntities: true } }); /** @param addName */ this.addName = ParamConfig.BOOLEAN(1, { visibleIf: { addId: 1 } }); /** @param allowedRotationY */ this.allowedRotationY = ParamConfig.BOOLEAN(1, { expression: { forEntities: true } }); } } const ParamsConfig = new WFCTilePropertiesSopParamsConfig(); export class WFCTilePropertiesSopNode extends TypedSopNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return SopType.WFC_TILE_PROPERTIES; } initializeNode() { this.io.inputs.setCount(1); this.io.inputs.initInputsClonedState(InputCloneMode.FROM_NODE); } async cook(inputCoreGroups) { const coreGroup = inputCoreGroups[0]; const coreObjects = filterCoreObjectsFromCoreGroup(coreGroup, this.pv); const promises = []; const { addName, addId } = this.pv; if (isBooleanTrue(addId)) { promises.push( this._computeStringParam(this.p.id, coreObjects, (object, value) => { if (addName) { object.name = value; } CoreWFCTileAttribute.setTileId(object, value); }) ); } promises.push( this._computeBooleanParam( this.p.allowedRotationY, coreObjects, CoreWFCTileAttribute.setRotationYAllowed.bind(CoreWFCTileAttribute) ) ); await Promise.all(promises); this.setCoreGroup(coreGroup); } async _computeStringParam(param, coreObjects, applyMethod) { if (param.expressionController && param.expressionController.entitiesDependent()) { await param.expressionController.computeExpressionForObjects(coreObjects, (coreObject, value) => { applyMethod(coreObject.object(), value); }); } else { for (const coreObject of coreObjects) { applyMethod(coreObject.object(), param.value); } } } async _computeBooleanParam(param, coreObjects, applyMethod) { if (param.expressionController && param.expressionController.entitiesDependent()) { await param.expressionController.computeExpressionForObjects(coreObjects, (coreObject, value) => { applyMethod(coreObject.object(), value); }); } else { for (const coreObject of coreObjects) { applyMethod(coreObject.object(), param.value); } } } }