import { useFrame } from '@react-three/fiber'; import { Fragment, forwardRef, useImperativeHandle } from 'react'; import { FacingDirection, RotationStep } from './consts'; import { frameCallback, rotationController } from './rotation-controller'; import { RotationPanel } from './rotation-panel'; export type RotatorRef = { rotate: (steps: Array) => void; }; type RotatorProps = { cubeSpeed: number; }; export const Rotator = forwardRef(({ cubeSpeed }: RotatorProps, ref) => { rotationController.setCubeSpeed(cubeSpeed); useImperativeHandle(ref, () => ({ rotate: (steps: Array) => rotationController.addRotationStep(...steps), })); useFrame(frameCallback); return ( <> {['front', 'back', 'left', 'right', 'up', 'down'].map((facingDirection) => ( rotationController.addRotationStep(s)} /> rotationController.addRotationStep(s)} /> ))} ); }); Rotator.displayName = 'Rotator';