UNPKG

@polygonjs/polygonjs

Version:

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

102 lines (101 loc) 2.9 kB
"use strict"; import { refByObjectUuidByAttribName } from "./ObjectAttributeReactivity"; import { Color, Vector2, Vector3, Vector4 } from "three"; import { JsConnectionPointType } from "../../engine/nodes/utils/io/connections/Js"; import { TypeAssert } from "../../engine/poly/Assert"; import { BaseCoreObject } from "../geometry/entities/object/BaseCoreObject"; import { ref } from "./CoreReactivity"; function defaultValue(type) { switch (type) { case JsConnectionPointType.BOOLEAN: { return false; } case JsConnectionPointType.COLOR: { return new Color(); } case JsConnectionPointType.FLOAT: { return 0; } case JsConnectionPointType.INT: { return 0; } case JsConnectionPointType.STRING: { return ""; } case JsConnectionPointType.VECTOR2: { return new Vector2(); } case JsConnectionPointType.VECTOR3: { return new Vector3(); } case JsConnectionPointType.VECTOR4: { return new Vector4(); } } TypeAssert.unreachable(type); } function cloneDefaultValue(value, type) { switch (type) { case JsConnectionPointType.BOOLEAN: { return value; } case JsConnectionPointType.COLOR: { return value.clone(); } case JsConnectionPointType.FLOAT: { return value; } case JsConnectionPointType.INT: { return value; } case JsConnectionPointType.STRING: { return value; } case JsConnectionPointType.VECTOR2: { return value.clone(); } case JsConnectionPointType.VECTOR3: { return value.clone(); } case JsConnectionPointType.VECTOR4: { return value.clone(); } } TypeAssert.unreachable(type); } export function getOrCreateObjectAttributeRef(object3D, attribName, type, defaultAttribValue) { let mapForObject = refByObjectUuidByAttribName.get(object3D); if (!mapForObject) { mapForObject = /* @__PURE__ */ new Map(); refByObjectUuidByAttribName.set(object3D, mapForObject); } let refForAttribName = mapForObject.get(attribName); if (!refForAttribName) { let _defaultValue = defaultAttribValue != null ? defaultAttribValue : defaultValue(type); let _previousValue = cloneDefaultValue(_defaultValue, type); const currentValue = BaseCoreObject.attribValue( object3D, attribName, 0, _defaultValue ); const previousValue = BaseCoreObject.attribValue(object3D, attribName, 0, _previousValue); if (currentValue == null || previousValue == null) { refForAttribName = { current: ref(_defaultValue), previous: ref(_previousValue) }; } else { refForAttribName = { current: ref(currentValue), previous: ref(previousValue) }; } mapForObject.set(attribName, refForAttribName); } return refForAttribName; } export function _dummyReadAttributeRefVal(value) { }