lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
45 lines • 1.9 kB
JavaScript
import store, { add, remove, clear, createEffect } from "@lincode/reactivity";
import { appendableRoot } from "../collections/appendableRoot";
import { onId } from "../events/onId";
import { selectionCandidates } from "../collections/selectionCandidates";
import { emitSelectionTarget } from "../events/onSelectionTarget";
import { getSelectionCandidates } from "../throttle/getSelectionCandidates";
const [setSelectionHideId, getSelectionHideId] = store([new Set()]);
export { getSelectionHideId };
export const addSelectionHideId = add(setSelectionHideId, getSelectionHideId);
export const removeSelectionHideId = remove(setSelectionHideId, getSelectionHideId);
export const clearSelectionHideId = clear(setSelectionHideId, getSelectionHideId);
createEffect(() => {
const [hideIdSet] = getSelectionHideId();
if (!hideIdSet.size)
return;
const hidden = [];
for (const manager of appendableRoot)
manager.traverse((child) => {
if ("visible" in child && child.id && hideIdSet.has(child.id)) {
hidden.push(child);
child.visible = false;
child.$disableSelection = true;
selectionCandidates.delete(child.object3d);
}
});
emitSelectionTarget(undefined);
const handle = onId((child) => {
if ("visible" in child && child.id && hideIdSet.has(child.id)) {
hidden.push(child);
child.visible = false;
child.$disableSelection = true;
selectionCandidates.delete(child.object3d);
emitSelectionTarget(undefined);
}
});
return () => {
handle.cancel();
for (const child of hidden) {
child.visible = true;
child.$disableSelection = false;
}
getSelectionCandidates();
};
}, [getSelectionHideId]);
//# sourceMappingURL=useSelectionHideId.js.map