| | |
| | | import { useGLTF, useFBX } from '@react-three/drei'; |
| | | import * as THREE from 'three'; |
| | | import { MODEL_SHELF_SCALE } from '@/config/setting' |
| | | import { snapshot } from 'valtio'; |
| | | import { useStore } from '@/store'; |
| | | import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'; |
| | | import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; |
| | | import Box from './box'; |
| | | import * as Common from '../utils/common'; |
| | | |
| | | const Shelf = (props) => { |
| | | const { position = [0, 300, 0], rotationY = 0 } = props; |
| | | const { no, position = [0, 300, 0], rotationY = 0 } = props; |
| | | const state = useStore(); |
| | | |
| | | const { nodes, materials } = useMemo(() => { |
| | | return useGLTF('/models/shelf/row.glb'); |
| | | }, []) |
| | | |
| | | useEffect(() => { |
| | | snapshot(state).models[no] = position; |
| | | }, [props]); |
| | | |
| | | return ( |
| | | <> |
| | | <group rotation-y={rotationY} position={position}> |
| | |
| | | return shelfData.slice(0, 1).map((data, index) => <Shelf key={index} {...data} />) |
| | | }, []); |
| | | |
| | | const boxEl = useMemo(() => { |
| | | return boxData.map((data, idx) => <Box key={idx} {...data} />) |
| | | }, [boxData]); |
| | | |
| | | const agvEl = useMemo(() => { |
| | | return agvData.map((data, idx) => <Agv key={idx} {...data} />) |
| | | }, [agvData]); |
| | | |
| | | const boxEl = useMemo(() => { |
| | | return boxData.map((data, idx) => <Box key={idx} {...data} />) |
| | | }, [boxData]); |
| | | |
| | | useFrame((state, delta) => { |
| | | |
| | |
| | | |
| | | const store = proxy( |
| | | { |
| | | text: 'Hello World' |
| | | text: 'Hello World', |
| | | shelf: {}, |
| | | } |
| | | ); |
| | | |