mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
51 lines • 2.28 kB
JavaScript
import { createEffect } from "@lincode/reactivity";
import { pull } from "@lincode/utils";
import { Color, Vector2 } from "three";
import { OutlinePass } from "three/examples/jsm/postprocessing/OutlinePass";
import loadTexture from "../../../display/utils/loaders/loadTexture";
import { getCameraRendered } from "../../../states/useCameraRendered";
import { getOutlineColor } from "../../../states/useOutlineColor";
import { getOutlineHiddenColor } from "../../../states/useOutlineHiddenColor";
import { getOutlinePattern } from "../../../states/useOutlinePattern";
import { getOutlinePulse } from "../../../states/useOutlinePulse";
import { getOutlineStrength } from "../../../states/useOutlineStrength";
import { getOutlineThickness } from "../../../states/useOutlineThickness";
import scene from "../../scene";
export const outlinePtr = [false];
const outlineSelects = [];
export const addOutline = (target) => {
if (target.userData.outline)
return;
target.userData.outline = true;
outlineSelects.push(target);
outlinePtr[0] = true;
};
export const deleteOutline = (target) => {
if (!target.userData.outline)
return;
target.userData.outline = false;
pull(outlineSelects, target);
};
const outlinePass = new OutlinePass(new Vector2(), scene, getCameraRendered(), outlineSelects);
export default outlinePass;
getCameraRendered((camera) => (outlinePass.renderCamera = camera));
getOutlinePulse((pulse) => (outlinePass.pulsePeriod = pulse * 0.001));
getOutlineStrength((strength) => (outlinePass.edgeStrength = strength));
getOutlineThickness((thickness) => (outlinePass.edgeThickness = thickness));
createEffect(() => {
const color = getOutlineColor();
const hiddenColor = getOutlineHiddenColor() ?? color;
outlinePass.visibleEdgeColor = new Color(color);
outlinePass.hiddenEdgeColor = new Color(hiddenColor);
}, [getOutlineColor, getOutlineHiddenColor]);
createEffect(() => {
const url = getOutlinePattern();
if (!url)
return;
outlinePass.patternTexture = loadTexture(url);
outlinePass.usePatternTexture = true;
return () => {
outlinePass.usePatternTexture = false;
};
}, [getOutlinePattern]);
//# sourceMappingURL=outlinePass.js.map