import { useEffect } from "react"; import { RotateCcw, X } from "lucide-react"; import { useGameStore } from "@/managers/stores/useGameStore"; import { useSettingsStore } from "@/managers/stores/useSettingsStore"; import type { SubtitleLanguage } from "@/types/settings/settings"; import { isDebugEnabled } from "@/utils/debug/isDebugEnabled"; function formatPercent(value: number): string { return `${Math.round(value * 100)}%`; } function clearCookies(): void { document.cookie.split(";").forEach((cookie) => { const cookieName = cookie.split("=")[0]?.trim(); if (!cookieName) return; document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`; }); } interface VolumeSliderProps { id: string; label: string; value: number; onChange: (value: number) => void; } function VolumeSlider({ id, label, value, onChange, }: VolumeSliderProps): React.JSX.Element { return ( ); } export function GameSettingsMenu(): React.JSX.Element | null { const resetGame = useGameStore((state) => state.resetGame); const { isSettingsMenuOpen, musicVolume, sfxVolume, dialogueVolume, subtitlesEnabled, subtitleLanguage, setMusicVolume, setSfxVolume, setDialogueVolume, setSettingsMenuOpen, setSubtitlesEnabled, setSubtitleLanguage, } = useSettingsStore(); useEffect(() => { const handleKeyDown = (event: KeyboardEvent): void => { if (event.key === "Escape") { event.preventDefault(); event.stopPropagation(); if (!isSettingsMenuOpen) document.exitPointerLock(); setSettingsMenuOpen(!isSettingsMenuOpen); return; } }; window.addEventListener("keydown", handleKeyDown, { capture: true }); return () => { window.removeEventListener("keydown", handleKeyDown, { capture: true }); }; }, [isSettingsMenuOpen, setSettingsMenuOpen]); if (!isSettingsMenuOpen) return null; const handleQuit = (): void => { clearCookies(); window.location.assign("/"); }; const handleRestart = (): void => { resetGame(); window.location.reload(); }; const showDebugRestart = isDebugEnabled(); return (
Pause

Options

Audio

Sous-titres

{(["fr", "en"] satisfies SubtitleLanguage[]).map((language) => ( ))}
{showDebugRestart ? ( ) : null}
); }