@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
54 lines (53 loc) • 1.52 kB
JavaScript
;
import { DoubleSide } from "three";
import { isArray } from "../Type";
export class MatDoubleSideTmpSetter {
constructor() {
this._sidePropertyByMaterial = /* @__PURE__ */ new WeakMap();
this._bound_setMat = this._setObjectMaterialDoubleSided.bind(this);
this._bound_restoreMat = this._restoreObjectMaterialSide.bind(this);
}
setCoreGroupMaterialDoubleSided(core_group) {
const objects = core_group.threejsObjects();
for (const object of objects) {
object.traverse(this._bound_setMat);
}
}
restoreMaterialSideProperty(core_group) {
const objects = core_group.threejsObjects();
for (const object of objects) {
object.traverse(this._bound_restoreMat);
}
}
_setObjectMaterialDoubleSided(object) {
const mat = object.material;
if (mat) {
if (isArray(mat)) {
for (const mati of mat) {
this._setMaterialDoubleSided(mati);
}
} else {
this._setMaterialDoubleSided(mat);
}
}
}
_restoreObjectMaterialSide(object) {
const mat = object.material;
if (mat) {
if (isArray(mat)) {
for (const mati of mat) {
this._restoreMaterialDoubleSided(mati);
}
} else {
this._restoreMaterialDoubleSided(mat);
}
}
}
_setMaterialDoubleSided(mat) {
this._sidePropertyByMaterial.set(mat, mat.side);
mat.side = DoubleSide;
}
_restoreMaterialDoubleSided(mat) {
mat.side = this._sidePropertyByMaterial.get(mat) || DoubleSide;
}
}