UNPKG

@polygonjs/polygonjs

Version:

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

119 lines (118 loc) 3.42 kB
"use strict"; import { Color } from "three"; import { Vector2 } from "three"; import { Vector3 } from "three"; import { Vector4 } from "three"; import { TypedNodePathParamValue } from "../../../core/Walker"; import { OperationInputsController } from "./utils/InputsController"; import { isNumber, isBoolean, isString } from "../../../core/Type"; export class BaseOperationContainer { constructor(operation, name, init_params) { this.operation = operation; this.name = name; this.params = {}; this._applyDefaultParams(); this._applyInitParams(init_params); this._initClonedStates(); } // // // PATH PARAMS // // pathParamResolveRequired() { return this._path_params != null; } resolvePathParams(node_start) { if (!this._path_params) { return; } for (let path_param of this._path_params) { path_param.resolve(node_start); } } // // // PARAM VALUES CONVERSION // // _applyDefaultParams() { const default_params = this.operation.constructor.DEFAULT_PARAMS; const param_names = Object.keys(default_params); for (let param_name of param_names) { const param_data = default_params[param_name]; const clone_param_data = this._convertParamData(param_name, param_data); if (clone_param_data != void 0) { this.params[param_name] = clone_param_data; } } } _applyInitParams(init_params) { const paramNames = Object.keys(init_params); for (let paramName of paramNames) { const param_data = init_params[paramName]; if (param_data.simple_data != null) { const simple_data = param_data.simple_data; const clone_param_data = this.operation.convertExportParamData({ paramName, paramData: simple_data, params: this.params }); if (clone_param_data != void 0) { this.params[paramName] = clone_param_data; } } } } _convertParamData(param_name, param_data) { if (isNumber(param_data) || isBoolean(param_data) || isString(param_data)) { return param_data; } if (param_data instanceof TypedNodePathParamValue) { const cloned = param_data.clone(); if (!this._path_params) { this._path_params = []; } this._path_params.push(cloned); return cloned; } if (param_data instanceof Color || param_data instanceof Vector2 || param_data instanceof Vector3 || param_data instanceof Vector4) { return param_data.clone(); } } setInput(index, input) { this._inputs = this._inputs || []; this._inputs[index] = input; } inputsCount() { if (this._inputs) { return this._inputs.length; } else { return 0; } } inputsController() { return this._inputsController = this._inputsController || new OperationInputsController(this); } _initClonedStates() { const default_cloned_states = this.operation.constructor.INPUT_CLONED_STATE; this.inputsController().initInputsClonedState(default_cloned_states); } inputCloneRequired(index) { if (!this._inputsController) { return true; } return this._inputsController.cloneRequired(index); } overrideInputCloneState(state) { this.inputsController().override_cloned_state(state); } // // // COOK // // cook(input_contents) { return this.operation.cook(input_contents, this.params); } }