import { useEffect, useRef } from 'react'; import { setLocalConfig } from '../../../../../helpers/configuration'; import { useTranslation } from 'react-i18next'; import Slider from '../../../../../components/ui/Slider'; import Button from '../../../../ui/Button'; import Close from '../../../../icons/Close'; interface PositionControlsProps { avatarHeight: number; avatarDepth: number; halfBody: boolean; setAvatarHeight: (value: number) => void; setAvatarDepth: (value: number) => void; setEnablePositionControls: (value: boolean) => void; } // eslint-disable-next-line no-undef const PositionControls: React.FC = ({ avatarHeight, avatarDepth, setAvatarHeight, setAvatarDepth, halfBody, setEnablePositionControls, }: PositionControlsProps) => { const normalPosition = halfBody ? { height: 80, depth: 50 } : { height: 25, depth: 25 }; const zoomedPosition = halfBody ? { height: 55, depth: 10 } : { height: 15, depth: 5 }; const farPosition = halfBody ? { height: 100, depth: 80 } : { height: 65, depth: 100 }; const settingsRef = useRef>({ height: avatarHeight, depth: avatarDepth, zoomed: false, normal: false, far: false, }); const { t } = useTranslation(); // Update settings when values change externally useEffect(() => { settingsRef.current.height = avatarHeight; settingsRef.current.depth = avatarDepth; }, [avatarHeight, avatarDepth]); // Keyboard controls for depth useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if ( event.key === '-' || (event.key === '_' && settingsRef.current.depth < 100) ) { const newValue = Math.min(settingsRef.current.depth + 10, 100); setAvatarDepth(newValue); setLocalConfig('avatarDepth', newValue); } else if ( (event.key === '+' || event.key === '=') && settingsRef.current.depth > -100 ) { const newValue = Math.max(settingsRef.current.depth - 10, -100); setAvatarDepth(newValue); setLocalConfig('avatarDepth', newValue); } }; //add event listeners for plus and minus window.addEventListener('keydown', handleKeyDown); return () => { window.removeEventListener('keydown', handleKeyDown); }; }, [setAvatarDepth]); useEffect(() => { const handleArrowUp = (event: KeyboardEvent) => { if (event.key === 'ArrowUp' && settingsRef.current.height < 100) { const newValue = settingsRef.current.height + 5; setAvatarHeight(newValue); setLocalConfig('avatarHeight', newValue); } }; const handleArrowDown = (event: KeyboardEvent) => { if (event.key === 'ArrowDown' && settingsRef.current.height > 0) { const newValue = settingsRef.current.height - 5; setAvatarHeight(newValue); setLocalConfig('avatarHeight', newValue); } }; window.addEventListener('keydown', handleArrowUp); window.addEventListener('keydown', handleArrowDown); return () => { window.removeEventListener('keydown', handleArrowUp); window.removeEventListener('keydown', handleArrowDown); }; }, [setAvatarHeight]); return (
{/*
*/} { setAvatarHeight(value); setLocalConfig('avatarHeight', value); }} /> {/*
*/} {/*
*/} { setAvatarDepth(value); setLocalConfig('avatarDepth', value); }} /> {/*
*/}
); }; export default PositionControls;