import { FormControl, FormLabel, Switch } from '@mui/material'; import Slider from '@mui/material/Slider'; import { useEffect, useState } from 'react'; import { twc } from 'react-twc'; import { createInitialPlayers } from '../../../Data/getInitialPlayers'; import { theme } from '../../../Data/theme'; import { useAnalytics } from '../../../Hooks/useAnalytics'; import { useGlobalSettings } from '../../../Hooks/useGlobalSettings'; import { usePlayers } from '../../../Hooks/usePlayers'; import { Cog, Info } from '../../../Icons/generated'; import { InitialGameSettings, Orientation, PreStartMode, defaultInitialGameSettings, } from '../../../Types/Settings'; import { InfoModal } from '../../Misc/InfoModal'; import { SettingsModal } from '../../Misc/SettingsModal'; import { SupportMe } from '../../Misc/SupportMe'; import { LayoutOptions } from './LayoutOptions'; const MainWrapper = twc.div`w-[100dvw] h-fit pb-24 overflow-hidden items-center flex flex-col min-[349px]:pb-10`; const StartButtonFooter = twc.div`w-full max-w-[548px] fixed bottom-4 z-1 items-center flex flex-row flex-wrap px-4 z-10 gap-4`; const SliderWrapper = twc.div`mx-8`; const ToggleButtonsWrapper = twc.div`flex flex-row justify-between items-center`; const ToggleContainer = twc.div`flex flex-col items-center`; const playerMarks = [ { value: 1, label: '1', }, { value: 2, label: '2', }, { value: 3, label: '3', }, { value: 4, label: '4', }, { value: 5, label: '5', }, { value: 6, label: '6', }, ]; const healthMarks = [ { value: 20, label: '20', }, { value: 30, label: '30', }, { value: 40, label: '40', }, { value: 50, label: '50', }, { value: 60, label: '60', }, ]; const Start = () => { const { setPlayers } = usePlayers(); const analytics = useAnalytics(); const { fullscreen, wakeLock, setShowPlay, initialGameSettings, setInitialGameSettings, settings, isPWA, setRandomizingPlayer, version, setPlaying, savedGame, saveCurrentGame, } = useGlobalSettings(); const [openInfoModal, setOpenInfoModal] = useState(false); const [openSettingsModal, setOpenSettingsModal] = useState(false); const [playerOptions, setPlayerOptions] = useState( initialGameSettings || defaultInitialGameSettings ); let tracked = false; // Check for new version on mount useEffect(() => { if (!tracked) { console.log('checking version'); version.checkForNewVersion('start_menu'); // eslint-disable-next-line react-hooks/exhaustive-deps tracked = true; } }, []); useEffect(() => { setInitialGameSettings(playerOptions); }, [playerOptions, setInitialGameSettings]); useEffect(() => { setPlayerOptions({ ...playerOptions, }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [playerOptions.numberOfPlayers]); const doStartNewGame = () => { if (!initialGameSettings) { return; } analytics.trackEvent('game_started', { ...initialGameSettings, ...settings, isPWA, }); try { if (settings.goFullscreenOnStart) { fullscreen.enableFullscreen(); } } catch (error) { console.error(error); } if (settings.keepAwake && !wakeLock.active) { wakeLock.request(); } setInitialGameSettings(initialGameSettings); setPlayers(createInitialPlayers(initialGameSettings)); setRandomizingPlayer(settings.preStartMode === PreStartMode.RandomKing); setShowPlay(true); setPlaying(false); }; const doResumeGame = () => { if (!savedGame) { return; } analytics.trackEvent('game_resumed', { ...initialGameSettings, ...settings, isPWA, }); try { if (settings.goFullscreenOnStart) { fullscreen.enableFullscreen(); } } catch (error) { console.error(error); } if (settings.keepAwake && !wakeLock.active) { wakeLock.request(); } setInitialGameSettings(savedGame.initialGameSettings); setPlayers(savedGame.players); saveCurrentGame(null); setRandomizingPlayer(false); setShowPlay(true); setPlaying(true); }; const valueText = (value: number) => { return `${value}`; }; return ( { setOpenInfoModal(!openInfoModal); }} /> { setOpenInfoModal(false); }} isOpen={openInfoModal} /> { setOpenSettingsModal(false); }} isOpen={openSettingsModal} />

Life Trinket
v{version.installedVersion}

Commander { if (value) { setPlayerOptions({ ...playerOptions, useCommanderDamage: value, numberOfPlayers: 4, startingLifeTotal: 40, orientation: Orientation.Landscape, }); return; } setPlayerOptions({ ...playerOptions, useCommanderDamage: value, numberOfPlayers: 2, startingLifeTotal: 20, orientation: Orientation.Landscape, }); }} />
v{version.remoteVersion} available!
Number of Players { setPlayerOptions({ ...playerOptions, numberOfPlayers: value as number, orientation: Orientation.Landscape, }); }} /> Starting Health setPlayerOptions({ ...playerOptions, startingLifeTotal: value as number, orientation: Orientation.Landscape, }) } /> Layout { setPlayerOptions({ ...playerOptions, orientation, }); }} /> {!isPWA && (

If you're on iOS, this page works better if you{' '} hide the toolbar or{' '} add the app to your home screen.

)}
{savedGame && ( )} ); }; export default Start;