diff --git a/packages/viewer/src/components/viewer/index.tsx b/packages/viewer/src/components/viewer/index.tsx index 0f10ed49..75d5fcd1 100644 --- a/packages/viewer/src/components/viewer/index.tsx +++ b/packages/viewer/src/components/viewer/index.tsx @@ -4,7 +4,9 @@ import { CeilingSystem, ItemSystem, SlabSystem, WallSystem } from '@pascal-app/c import { Bvh, Environment } from '@react-three/drei' import { Canvas, extend, type ThreeToJSXElements } from '@react-three/fiber' import * as THREE from 'three/webgpu' +import { GuideSystem } from '../../systems/guide/guide-system' import { LevelSystem } from '../../systems/level/level-system' +import { ScanSystem } from '../../systems/scan/scan-system' import { SceneRenderer } from '../renderers/scene-renderer' import PostProcessing from './post-processing' import { ViewerCamera } from './viewer-camera' @@ -42,6 +44,9 @@ const Viewer: React.FC = ({ children }) => { {/* Default Systems */} + + + {/* Core systems */} diff --git a/packages/viewer/src/systems/guide/guide-system.tsx b/packages/viewer/src/systems/guide/guide-system.tsx new file mode 100644 index 00000000..87936bfb --- /dev/null +++ b/packages/viewer/src/systems/guide/guide-system.tsx @@ -0,0 +1,18 @@ +import { sceneRegistry } from '@pascal-app/core' +import { useEffect } from 'react' +import useViewer from '../../store/use-viewer' + +export const GuideSystem = () => { + const showGuides = useViewer((state) => state.showGuides) + + useEffect(() => { + const guides = sceneRegistry.byType.guide || new Set() + guides.forEach((guideId) => { + const node = sceneRegistry.nodes.get(guideId) + if (node) { + node.visible = showGuides + } + }) + }, [showGuides]) + return null; +} diff --git a/packages/viewer/src/systems/scan/scan-system.tsx b/packages/viewer/src/systems/scan/scan-system.tsx new file mode 100644 index 00000000..62b65acb --- /dev/null +++ b/packages/viewer/src/systems/scan/scan-system.tsx @@ -0,0 +1,18 @@ +import { sceneRegistry } from '@pascal-app/core' +import { useEffect } from 'react' +import useViewer from '../../store/use-viewer' + +export const ScanSystem = () => { + const showScans = useViewer((state) => state.showScans) + + useEffect(() => { + const scans = sceneRegistry.byType.scan || new Set() + scans.forEach((scanId) => { + const node = sceneRegistry.nodes.get(scanId) + if (node) { + node.visible = showScans + } + }) + }, [showScans]) + return null; +}