import { Button, Checkbox } from '@mui/material'; import styled, { css } from 'styled-components'; import { Player, Rotation } from '../../Types/Player'; import { theme } from '../../Data/theme'; import { useGlobalSettings } from '../../Hooks/useGlobalSettings'; import { usePlayers } from '../../Hooks/usePlayers'; import { PartnerTax, Poison, Energy, Experience, Exit, FullscreenOff, FullscreenOn, Cross, ResetGame, } from '../../Icons/generated'; import { useRef } from 'react'; import { Spacer } from '../Misc/Spacer'; import { useSafeRotate } from '../../Hooks/useSafeRotate'; const SettingsContainer = styled.div<{ $rotation: Rotation; }>` display: flex; flex-direction: row; flex-wrap: wrap; height: 100%; width: 100%; ${(props) => { if ( props.$rotation === Rotation.SideFlipped || props.$rotation === Rotation.Side ) { return css` flex-direction: column-reverse; height: 100%; width: 100%; `; } }} ${(props) => { if (props.$rotation === Rotation.Side) { return css` rotate: ${props.$rotation - 180}deg; `; } else if (props.$rotation === Rotation.SideFlipped) { return css` rotate: ${props.$rotation - 180}deg; `; } }} `; const BetterRowContainer = styled.div` display: flex; flex-direction: column; flex-grow: 1; width: 100%; height: 100%; justify-content: end; align-items: stretch; `; const TogglesSection = styled.div` display: flex; position: relative; flex-direction: row; gap: 0.5rem; justify-content: space-evenly; `; const ButtonsSections = styled.div` display: flex; max-width: 100%; gap: 1rem; justify-content: space-between; padding: 3% 3%; align-items: center; `; const ColorPicker = styled.input` position: absolute; top: 5%; left: 5%; height: 8vmax; width: 8vmax; border: none; outline: none; cursor: pointer; background-color: transparent; user-select: none; color: #ffffff; `; const CheckboxContainer = styled.div<{ $rotation: Rotation }>` ${(props) => { if ( props.$rotation === Rotation.SideFlipped || props.$rotation === Rotation.Side ) { return css` /* rotate: ${props.$rotation - 180}deg; */ `; } }} `; const PlayerMenuWrapper = styled.div<{ $rotation: Rotation; }>` display: flex; flex-direction: column; position: absolute; width: 100%; height: 100%; background-color: rgba(20, 20, 20, 0.9); align-items: center; justify-content: center; z-index: 2; ${(props) => { if ( props.$rotation === Rotation.SideFlipped || props.$rotation === Rotation.Side ) { return; } return css` rotate: ${props.$rotation}deg; `; }}; `; const CloseButton = styled.div<{ $rotation: Rotation; }>` position: absolute; top: 15%; right: 5%; z-index: 9999; border: none; outline: none; cursor: pointer; background-color: transparent; ${(props) => { if (props.$rotation === Rotation.Side) { return css` rotate: ${props.$rotation - 180}deg; top: 5%; right: auto; left: 5%; `; } else if (props.$rotation === Rotation.SideFlipped) { return css` rotate: ${props.$rotation - 180}deg; top: auto; left: auto; bottom: 5%; right: 5%; `; } }} `; type PlayerMenuProps = { player: Player; setShowPlayerMenu: (showPlayerMenu: boolean) => void; }; const PlayerMenu = ({ player, setShowPlayerMenu }: PlayerMenuProps) => { const settingsContainerRef = useRef(null); const dialogRef = useRef(null); const { isSide } = useSafeRotate({ rotation: player.settings.rotation, containerRef: settingsContainerRef, }); const handleOnClick = () => { setShowPlayerMenu(false); }; const { fullscreen, wakeLock, goToStart } = useGlobalSettings(); const { updatePlayer, resetCurrentGame } = usePlayers(); const handleColorChange = (event: React.ChangeEvent) => { const updatedPlayer = { ...player, color: event.target.value }; updatePlayer(updatedPlayer); }; const handleSettingsChange = (event: React.ChangeEvent) => { const { name, checked } = event.target; const updatedSettings = { ...player.settings, [name]: checked }; const updatedPlayer = { ...player, settings: updatedSettings }; updatePlayer(updatedPlayer); }; const handleResetGame = () => { resetCurrentGame(); setShowPlayerMenu(false); }; const toggleFullscreen = () => { if (fullscreen.isFullscreen) { fullscreen.disableFullscreen(); } else { fullscreen.enableFullscreen(); } }; const buttonFontSize = isSide ? '1.5vmax' : '3vmin'; const iconSize = isSide ? '6vmin' : '3vmax'; const extraCountersSize = isSide ? '8vmin' : '4vmax'; const closeButtonSize = isSide ? '6vmin' : '3vmax'; return ( {player.settings.useCommanderDamage && ( } checkedIcon={ } onChange={handleSettingsChange} role="checkbox" aria-checked={player.settings.usePartner} aria-label="Partner" /> )} } checkedIcon={ } onChange={handleSettingsChange} role="checkbox" aria-checked={player.settings.usePoison} aria-label="Poison" /> } checkedIcon={ } onChange={handleSettingsChange} role="checkbox" aria-checked={player.settings.useEnergy} aria-label="Energy" /> } checkedIcon={ } onChange={handleSettingsChange} role="checkbox" aria-checked={player.settings.useExperience} aria-label="Experience" /> } checkedIcon={} onChange={toggleFullscreen} role="checkbox" aria-checked={document.fullscreenElement ? true : false} aria-label="Fullscreen" />

Reset Game?

); }; export default PlayerMenu;