UNPKG

@polygonjs/polygonjs

Version:

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

126 lines (125 loc) 4.05 kB
"use strict"; import { ExpressionManager } from "../../expressions/ExpressionManager"; export class ExpressionController { // private _reset_bound = this.reset.bind(this); constructor(param) { this.param = param; } // remove_dirty_hook() { // // this.param.dirtyController.removePostDirtyHook('expression_controller_reset'); // } dispose() { this.param.scene().expressionsController.deregisterParam(this.param); this._resetMethodDependencies(); this._manager = void 0; } _resetMethodDependencies() { var _a, _b; (_a = this._methodDependenciesByGraphNodeId) == null ? void 0 : _a.forEach((methodDependency) => { methodDependency.dispose(); }); (_b = this._methodDependenciesByGraphNodeId) == null ? void 0 : _b.clear(); } registerMethodDependency(methodDependency) { this._methodDependenciesByGraphNodeId = this._methodDependenciesByGraphNodeId || /* @__PURE__ */ new Map(); this._methodDependenciesByGraphNodeId.set(methodDependency.graphNodeId(), methodDependency); } active() { return this._expression != null; } expression() { return this._expression; } isErrored() { if (this._manager) { return this._manager.isErrored(); } return false; } errorMessage() { if (this._manager) { return this._manager.errorMessage(); } return null; } entitiesDependent() { var _a; const managerEntitiesDependent = ((_a = this._manager) == null ? void 0 : _a.generatedFunctionEntitiesDependent()) || false; return this.param.options.isExpressionForEntities() && managerEntitiesDependent; } // private reset() { // this._manager?.clear_error(); // } setExpression(expression, setDirty = true) { var _a; if (this.param.disposed()) { this._resetMethodDependencies(); this._expression = void 0; return; } this.param.scene().missingExpressionReferencesController.deregisterParam(this.param); this.param.scene().expressionsController.deregisterParam(this.param); if (this._expression != expression) { this._resetMethodDependencies(); this._expression = expression; if (this._expression) { this._manager = this._manager || new ExpressionManager(this.param); this._manager.parseExpression(this._expression); } else { (_a = this._manager) == null ? void 0 : _a.reset(); } if (setDirty) { this.param.setDirty(); } } } updateFromMethodDependencyNameChange() { if (this._manager && this.active()) { this._manager.updateFromMethodDependencyNameChange(); } } computeExpression() { if (this._manager && this.active()) { return this._manager.computeFunction(); } } async computeExpressionForEntities(entities, callback) { var _a; this._setEntities(entities, callback); await this.computeExpression(); const errorMessage = (_a = this._manager) == null ? void 0 : _a.errorMessage(); if (errorMessage) { this.param.node.states.error.set(`expression evaluation error: ${errorMessage}`); } this._resetEntities(); } computeExpressionForPoints(entities, callback) { return this.computeExpressionForEntities(entities, callback); } computeExpressionForVertices(entities, callback) { return this.computeExpressionForEntities(entities, callback); } computeExpressionForPrimitives(entities, callback) { return this.computeExpressionForEntities(entities, callback); } computeExpressionForObjects(entities, callback) { return this.computeExpressionForEntities(entities, callback); } computeExpressionForCoreGroup(entity, callback) { return this.computeExpressionForEntities([entity], callback); } entities() { return this._entities; } entityCallback() { return this._entityCallback; } _setEntities(entities, callback) { this._entities = entities; this._entityCallback = callback; } _resetEntities() { this._entities = void 0; this._entityCallback = void 0; } }