@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
102 lines (101 loc) • 2.9 kB
JavaScript
;
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) {
}