UNPKG

@polygonjs/polygonjs

Version:

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

133 lines (126 loc) 3.61 kB
import {BaseNodeType} from '../../engine/nodes/_Base'; import {FloatParam} from '../../engine/params/Float'; import {Vector3Param} from '../../engine/params/Vector3'; import {BaseParamType} from '../../engine/params/_Base'; import {ParamType} from '../../engine/poly/ParamType'; import {Vector2} from 'three'; import {Vector3} from 'three'; import {Vector4} from 'three'; import {Color} from 'three'; import {Number2, Number3, Number4} from '../../types/GlobalTypes'; import {ColorParam} from '../../engine/params/Color'; import {Vector4Param} from '../../engine/params/Vector4'; import {Vector2Param} from '../../engine/params/Vector2'; import {IntegerParam} from '../../engine/params/Integer'; import {CubicInterpolant} from 'three'; export class FloatParamProxy { public proxyValue: number; constructor(private param: FloatParam) { this.proxyValue = param.value; } update(interpolant?: CubicInterpolant) { if (interpolant) { const val = interpolant.evaluate(this.proxyValue)[0]; this.param.set(val); } else { this.param.set(this.proxyValue); } } } export class IntegerParamProxy { public proxyValue: number; constructor(private param: IntegerParam) { this.proxyValue = param.value; } update() { this.param.set(this.proxyValue); } } export class Vector2ParamProxy { public proxyValue: Vector2 = new Vector2(); private _array: Number2 = [0, 0]; constructor(private param: Vector2Param) { this.proxyValue.copy(param.value); } update() { this.proxyValue.toArray(this._array); this.param.set(this._array); } } export class Vector3ParamProxy { public proxyValue: Vector3 = new Vector3(); private _array: Number3 = [0, 0, 0]; constructor(private param: Vector3Param) { this.proxyValue.copy(param.value); } update() { this.proxyValue.toArray(this._array); this.param.set(this._array); } } export class Vector4ParamProxy { public proxyValue: Vector4 = new Vector4(); private _array: Number4 = [0, 0, 0, 0]; constructor(private param: Vector4Param) { this.proxyValue.copy(param.value); } update() { this.proxyValue.toArray(this._array); this.param.set(this._array); } } export class ColorParamProxy { public proxyValue: Color = new Color(); private _array: Number3 = [0, 0, 0]; constructor(private param: ColorParam) { this.proxyValue.copy(param.valuePreConversion()); } update() { this.proxyValue.toArray(this._array); this.param.set(this._array); } } type AnimationParamProxy = | FloatParamProxy | IntegerParamProxy | Vector2ParamProxy | Vector3ParamProxy | ColorParamProxy | Vector4ParamProxy; export class AnimationNodeParamsProxy { private _map: Map<BaseParamType, AnimationParamProxy> = new Map(); constructor(node: BaseNodeType) { const params = node.params.all; for (const param of params) { const paramProxy = this._createParamProxy(param); if (paramProxy) { this._map.set(param, paramProxy); } } } private _createParamProxy(param: BaseParamType) { switch (param.type()) { case ParamType.INTEGER: { return new IntegerParamProxy(param as IntegerParam); } case ParamType.FLOAT: { return new FloatParamProxy(param as FloatParam); } case ParamType.VECTOR2: { return new Vector2ParamProxy(param as Vector2Param); } case ParamType.VECTOR3: { return new Vector3ParamProxy(param as Vector3Param); } case ParamType.COLOR: { return new ColorParamProxy(param as ColorParam); } case ParamType.VECTOR4: { return new Vector4ParamProxy(param as Vector4Param); } } } getParamProxy(param: BaseParamType) { return this._map.get(param); } }