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