UNPKG

@polygonjs/polygonjs

Version:

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

66 lines (62 loc) 2.07 kB
import {Vector2, Vector3} from 'three'; import {PolyDictionary} from '../../types/GlobalTypes'; import {JsConnectionPointType} from '../nodes/utils/io/connections/Js'; import {clamp as _clamp} from '../../core/math/_Module'; const RGB = ['r', 'g', 'b']; const XY = ['x', 'y']; const XYZ = ['x', 'y', 'z']; const XYZW = ['x', 'y', 'z', 'w']; const COMPONENT_BY_JS_TYPE: PolyDictionary<string[]> = { [JsConnectionPointType.COLOR]: RGB, [JsConnectionPointType.VECTOR2]: XY, [JsConnectionPointType.VECTOR3]: XYZ, [JsConnectionPointType.VECTOR4]: XYZW, }; export function componentsForType(type: JsConnectionPointType) { return COMPONENT_BY_JS_TYPE[type] || []; } // // // // // export function _v2Function(src: Vector2, target: Vector2, _func: (x: number) => number): Vector2 { target.x = _func(src.x); target.y = _func(src.y); return target; } export function _v3Function(src: Vector3, target: Vector3, _func: (x: number) => number): Vector3 { target.x = _func(src.x); target.y = _func(src.y); target.z = _func(src.z); return target; } export function absV2(src: Vector2, target: Vector2): Vector2 { return _v2Function(src, target, Math.abs); } export function absV3(src: Vector3, target: Vector3): Vector3 { return _v3Function(src, target, Math.abs); } export function maxV3Components(src: Vector3): number { return Math.max(src.x, Math.max(src.y, src.z)); } export function vector3Clamp(src: Vector3, min: Vector3, max: Vector3, target: Vector3): Vector3 { target.x = _clamp(src.x, min.x, max.x); target.y = _clamp(src.y, min.y, max.y); target.z = _clamp(src.z, min.z, max.z); return target; } export function maxV3Component(src: Vector3, target: Vector3, value: number): Vector3 { target.x = Math.max(src.x, value); target.y = Math.max(src.y, value); target.z = Math.max(src.z, value); return target; } export function vector2MaxScalar(src: Vector2, scalar: number, target: Vector2) { target.x = Math.max(src.x, scalar); target.y = Math.max(src.y, scalar); return target; } export function vector2Dot(src: Vector2) { return src.dot(src); }