lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
46 lines • 1.53 kB
JavaScript
import store from "@lincode/reactivity";
import scene from "../engine/scene";
import { shadowModePtr } from "../pointers/shadowModePtr";
import { physicsSet } from "../collections/physicsSet";
import { Object3D } from "three";
import isOpaque from "../memo/isOpaque";
import { configCastShadowSystem } from "../systems/configLoadedSystems/configCastShadowSystem";
export const [setShadowMode, getShadowMode] = store(true);
let first = true;
getShadowMode((val) => {
if (first) {
first = false;
return;
}
shadowModePtr[0] = val;
if (val === true)
scene.traverse((child) => {
if (child.type === "Mesh")
child.castShadow = child.receiveShadow && isOpaque(child);
});
else if (val === "physics") {
scene.traverse((child) => {
if (child.type === "Mesh")
child.castShadow = false;
});
for (const child of physicsSet)
configCastShadowSystem.add(child);
}
else
scene.traverse((child) => {
if (child.type === "Mesh")
child.castShadow = false;
});
});
const clone = Object3D.prototype.clone;
getShadowMode((val) => {
if (val === true)
Object3D.prototype.clone = function (recursive) {
const result = clone.call(this, recursive);
result.castShadow = result.receiveShadow;
return result;
};
else
Object3D.prototype.clone = clone;
});
//# sourceMappingURL=useShadowMode.js.map