import Slider from "@/components/slider"; import { Color, EngineName } from "@/types/enums"; import { MenuItem, Select, Button, Dialog, DialogTitle, DialogContent, FormControl, InputLabel, OutlinedInput, DialogActions, Typography, Grid, FormGroup, FormControlLabel, Switch, } from "@mui/material"; import { useAtomLocalStorage } from "@/hooks/useAtomLocalStorage"; import { useAtom, useSetAtom } from "jotai"; import { engineSkillLevelAtom, playerColorAtom, isGameInProgressAtom, gameAtom, enginePlayNameAtom, } from "../states"; import { useChessActions } from "@/hooks/useChessActions"; import { playGameStartSound } from "@/lib/sounds"; import { logAnalyticsEvent } from "@/lib/firebase"; import { Stockfish16 } from "@/lib/engine/stockfish16"; import { useEffect } from "react"; interface Props { open: boolean; onClose: () => void; } export default function GameSettingsDialog({ open, onClose }: Props) { const [skillLevel, setSkillLevel] = useAtomLocalStorage( "engine-skill-level", engineSkillLevelAtom ); const [engineName, setEngineName] = useAtomLocalStorage( "engine-play-name", enginePlayNameAtom ); const [playerColor, setPlayerColor] = useAtom(playerColorAtom); const setIsGameInProgress = useSetAtom(isGameInProgressAtom); const { reset: resetGame } = useChessActions(gameAtom); const handleGameStart = () => { onClose(); resetGame({ whiteName: playerColor === Color.White ? "You" : `Stockfish level ${skillLevel}`, blackName: playerColor === Color.Black ? "You" : `Stockfish level ${skillLevel}`, }); playGameStartSound(); setIsGameInProgress(true); logAnalyticsEvent("play_game", { engine: engineName, skillLevel, playerColor, }); }; useEffect(() => { if (!Stockfish16.isSupported()) { setEngineName(EngineName.Stockfish11); } }, [setEngineName]); return ( Set game parameters Stockfish 16 Lite (HCE) is the default engine. It offers the best balance between speed and strength. Stockfish 16 is the strongest engine available, but please note that it requires a one time download of 40MB. Bot's engine { setPlayerColor( e.target.checked ? Color.White : Color.Black ); }} /> } label={ playerColor === Color.White ? "You play as White" : "You play as Black" } /> ); } const engineLabel: Record = { [EngineName.Stockfish16]: "Stockfish 16 Lite (HCE)", [EngineName.Stockfish16NNUE]: "Stockfish 16 (40MB download)", [EngineName.Stockfish11]: "Stockfish 11", };