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