import React, { useState, useRef, useEffect } from "react"; import { ExitIcon, PlayStopIcon, ResetIcon } from "../../icons/SimulationIcons"; import { usePlayButtonStore } from "../../../store/usePlayButtonStore"; const SimulationPlayer: React.FC = () => { const [speed, setSpeed] = useState(1); const [playSimulation, setPlaySimulation] = useState(false); const { setIsPlaying } = usePlayButtonStore(); const sliderRef = useRef(null); const isDragging = useRef(false); // Button functions const handleReset = () => { setSpeed(1); }; const handlePlayStop = () => { setPlaySimulation(!playSimulation); }; const handleExit = () => { setPlaySimulation(false); setIsPlaying(false); }; // Slider functions starts const handleSpeedChange = (event: React.ChangeEvent) => { setSpeed(parseFloat(event.target.value)); }; const calculateHandlePosition = () => { return ((speed - 0.5) / (50 - 0.5)) * 100; }; const handleMouseDown = () => { isDragging.current = true; document.addEventListener("mousemove", handleMouseMove); document.addEventListener("mouseup", handleMouseUp); }; const handleMouseMove = (e: MouseEvent) => { if (!isDragging.current || !sliderRef.current) return; const sliderRect = sliderRef.current.getBoundingClientRect(); const offsetX = e.clientX - sliderRect.left; const percentage = Math.min(Math.max(offsetX / sliderRect.width, 0), 1); const newValue = 0.5 + percentage * (50 - 0.5); setSpeed(parseFloat(newValue.toFixed(1))); }; const handleMouseUp = () => { isDragging.current = false; document.removeEventListener("mousemove", handleMouseMove); document.removeEventListener("mouseup", handleMouseUp); }; useEffect(() => { return () => { document.removeEventListener("mousemove", handleMouseMove); document.removeEventListener("mouseup", handleMouseUp); }; }, []); // Slider function ends return (
{ handleReset(); }} > Reset
{ handlePlayStop(); }} > {playSimulation ? "Play" : "Stop"}
{ handleExit(); }} > Exit
0.5x
{speed.toFixed(1)}x
50x
); }; export default SimulationPlayer;