import { useGSAP } from "@gsap/react"; import { Center, Instance, Instances } from "@react-three/drei"; import gsap from "gsap"; import { useMemo, useRef } from "react"; import * as THREE from "three"; import { CustomMaterial } from "./material"; export const Item5 = () => { const groupRef = useRef(null); const firstLayerRef = useRef(null); const secondLayerRef = useRef(null); const thirdLayerRef = useRef(null); const blockSize = 1; const gap = 0.1; const distance = blockSize + gap; const layers = useMemo(() => { const layer1 = []; const layer2 = []; const layer3 = []; for (let x = -1; x <= 1; x++) { for (let y = -1; y <= 1; y++) { for (let z = -1; z <= 1; z++) { if (z === -1) { layer1.push( new THREE.Vector3(x * distance, y * distance, z * distance) ); } else if (z === 0) { layer2.push( new THREE.Vector3(x * distance, y * distance, z * distance) ); } else { layer3.push( new THREE.Vector3(x * distance, y * distance, z * distance) ); } } } } return [layer1, layer2, layer3]; }, [distance]); useGSAP(() => { if ( firstLayerRef.current && secondLayerRef.current && thirdLayerRef.current && groupRef.current ) { gsap .timeline({ repeat: -1, }) .to(firstLayerRef.current.rotation, { z: Math.PI, duration: 1.5, }) .to( secondLayerRef.current.rotation, { z: Math.PI, duration: 1.5, delay: 0.15, }, "<" ) .to( thirdLayerRef.current.rotation, { z: Math.PI, duration: 1.5, delay: 0.25, }, "<" ) .to( groupRef.current.rotation, { y: Math.PI * 2, duration: 1.75, }, 0 ); } }, []); return (
{layers[0].map((item, index) => { return ; })} {layers[1].map((item, index) => { return ; })} {layers[2].map((item, index) => { return ; })}
); };