UNPKG

@polygonjs/polygonjs

Version:

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

99 lines (98 loc) 2.85 kB
"use strict"; import { TypedMultipleParam } from "./_Multiple"; import { Vector4 } from "three"; import { ParamType } from "../poly/ParamType"; import { isArray } from "../../core/Type"; const COMPONENT_NAMES_VECTOR4 = ["x", "y", "z", "w"]; const tmp = [0, 0, 0, 0]; function vector2EqualsStringNumber4(v, array) { return v.x == array[0] && v.y == array[1] && v.z == array[2] && v.w == array[3]; } function stringNumber4Equals(array1, array2) { return array1[0] == array2[0] && array1[1] == array2[1] && array1[2] == array2[2] && array1[3] == array2[3]; } export class Vector4Param extends TypedMultipleParam { constructor() { super(...arguments); this._value = new Vector4(); this._copied_value = [0, 0, 0, 0]; } static type() { return ParamType.VECTOR4; } componentNames() { return COMPONENT_NAMES_VECTOR4; } defaultValueSerialized() { if (isArray(this._default_value)) { return this._default_value; } else { return this._default_value.toArray(); } } _prefilterInvalidRawInput(rawInput) { if (rawInput instanceof Vector4) { rawInput.toArray(tmp); return tmp; } return super._prefilterInvalidRawInput(rawInput); } valueSerialized() { return this.value.toArray(); } _copyValue(param) { param.value.toArray(this._copied_value); this.set(this._copied_value); } _cloneRawInput(rawInput) { if (rawInput instanceof Vector4) { return rawInput.clone(); } else { const newArray = [rawInput[0], rawInput[1], rawInput[2], rawInput[3]]; if (newArray[0] == null) { newArray[0] = newArray[0] || 0; } if (newArray[1] == null) { newArray[1] = newArray[1] || newArray[0]; } if (newArray[2] == null) { newArray[2] = newArray[2] || newArray[1]; } if (newArray[3] == null) { newArray[3] = newArray[3] || newArray[2]; } return newArray; } } static areRawInputEqual(rawInput1, rawInput2) { if (rawInput1 instanceof Vector4) { if (rawInput2 instanceof Vector4) { return rawInput1.equals(rawInput2); } else { return vector2EqualsStringNumber4(rawInput1, rawInput2); } } else { if (rawInput2 instanceof Vector4) { return vector2EqualsStringNumber4(rawInput2, rawInput1); } else { return stringNumber4Equals(rawInput1, rawInput2); } } } static areValuesEqual(val1, val2) { return val1.equals(val2); } initComponents() { super.initComponents(); this.x = this.components[0]; this.y = this.components[1]; this.z = this.components[2]; this.w = this.components[3]; } setValueFromComponents() { this._value.x = this.x.value; this._value.y = this.y.value; this._value.z = this.z.value; this._value.w = this.w.value; } }