@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
126 lines (125 loc) • 4.05 kB
JavaScript
"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;
}
}