diff --git a/src/Components/Players/PlayerMenu.tsx b/src/Components/Players/PlayerMenu.tsx index 1fe742e..88d1e6a 100644 --- a/src/Components/Players/PlayerMenu.tsx +++ b/src/Components/Players/PlayerMenu.tsx @@ -110,11 +110,13 @@ const PlayerMenu = ({ settings, setPlaying, setRandomizingPlayer, + saveCurrentGame, + initialGameSettings, } = useGlobalSettings(); const analytics = useAnalytics(); - const { updatePlayer, resetCurrentGame } = usePlayers(); + const { updatePlayer, resetCurrentGame, players } = usePlayers(); const handleColorChange = (event: React.ChangeEvent) => { const updatedPlayer = { ...player, color: event.target.value }; @@ -137,6 +139,7 @@ const PlayerMenu = ({ }; const handleGoToStart = () => { + saveCurrentGame({ players, initialGameSettings }); goToStart(); setRandomizingPlayer(true); }; @@ -443,8 +446,14 @@ const PlayerMenu = ({ className="text-center text-text-primary" style={{ fontSize: extraCountersSize }} > - End Game? + Go to start? +
+ (Game will be saved) +
+ Number of Players + + { + setPlayerOptions({ + ...playerOptions, + numberOfPlayers: value as number, + orientation: Orientation.Landscape, + }); + }} + /> + + + Starting Health + + + setPlayerOptions({ + ...playerOptions, + startingLifeTotal: value as number, + orientation: Orientation.Landscape, + }) + } + /> + Layout { + {savedGame && ( + + )} ); diff --git a/src/Contexts/GlobalSettingsContext.tsx b/src/Contexts/GlobalSettingsContext.tsx index 9ad3123..252ed9d 100644 --- a/src/Contexts/GlobalSettingsContext.tsx +++ b/src/Contexts/GlobalSettingsContext.tsx @@ -1,5 +1,6 @@ import { createContext } from 'react'; import { InitialGameSettings, Settings } from '../Types/Settings'; +import { Player } from '../Types/Player'; type Version = { installedVersion: string; @@ -8,6 +9,11 @@ type Version = { remoteVersion?: string; }; +export type SavedGame = { + initialGameSettings: InitialGameSettings; + players: Player[]; +} | null; + export type GlobalSettingsContextType = { fullscreen: { isFullscreen: boolean; @@ -25,7 +31,7 @@ export type GlobalSettingsContextType = { goToStart: () => void; showPlay: boolean; setShowPlay: (showPlay: boolean) => void; - initialGameSettings: InitialGameSettings | null; + initialGameSettings: InitialGameSettings; setInitialGameSettings: (initialGameSettings: InitialGameSettings) => void; settings: Settings; setSettings: (settings: Settings) => void; @@ -36,8 +42,9 @@ export type GlobalSettingsContextType = { isPWA: boolean; preStartCompleted: boolean; setPreStartCompleted: (completed: boolean) => void; - version: Version; + savedGame: SavedGame; + saveCurrentGame: (currentGame: SavedGame) => void; }; export const GlobalSettingsContext = diff --git a/src/Providers/GlobalSettingsProvider.tsx b/src/Providers/GlobalSettingsProvider.tsx index df9cfd4..e3b87b6 100644 --- a/src/Providers/GlobalSettingsProvider.tsx +++ b/src/Providers/GlobalSettingsProvider.tsx @@ -3,6 +3,7 @@ import { useWakeLock } from 'react-screen-wake-lock'; import { GlobalSettingsContext, GlobalSettingsContextType, + SavedGame, } from '../Contexts/GlobalSettingsContext'; import { useAnalytics } from '../Hooks/useAnalytics'; import { @@ -21,12 +22,21 @@ export const GlobalSettingsProvider = ({ }) => { const analytics = useAnalytics(); - const savedShowPlay = localStorage.getItem('showPlay'); - const savedGameSettings = localStorage.getItem('initialGameSettings'); - const savedSettings = localStorage.getItem('settings'); - const savedPlaying = localStorage.getItem('playing'); - const savedPreStartComplete = localStorage.getItem('preStartComplete'); + const localSavedGame = localStorage.getItem('savedGame'); + const [savedGame, setCurrentGame] = useState( + localSavedGame ? JSON.parse(localSavedGame) : null + ); + const setCurrentGameAndLocalStorage = (savedGame: SavedGame) => { + if (!savedGame) { + setCurrentGame(savedGame); + localStorage.removeItem('savedGame'); + return; + } + setCurrentGame(savedGame); + localStorage.setItem('savedGame', JSON.stringify(savedGame)); + }; + const savedPlaying = localStorage.getItem('playing'); const [playing, setPlaying] = useState( savedPlaying ? savedPlaying === 'true' : false ); @@ -35,23 +45,42 @@ export const GlobalSettingsProvider = ({ localStorage.setItem('playing', String(playing)); }; + const savedPreStartComplete = localStorage.getItem('preStartComplete'); const [preStartCompleted, setPreStartCompleted] = useState( savedPreStartComplete ? savedPreStartComplete === 'true' : false ); + const savedShowPlay = localStorage.getItem('showPlay'); const [showPlay, setShowPlay] = useState( savedShowPlay ? savedShowPlay === 'true' : false ); + const setShowPlayAndLocalStorage = (showPlay: boolean) => { + setShowPlay(showPlay); + localStorage.setItem('showPlay', String(showPlay)); + }; + const savedSettings = localStorage.getItem('settings'); const [randomizingPlayer, setRandomizingPlayer] = useState( savedSettings ? Boolean(JSON.parse(savedSettings).preStartMode === 'random-king') : true ); + const [settings, setSettings] = useState( + savedSettings ? JSON.parse(savedSettings) : defaultSettings + ); + + const setSettingsAndLocalStorage = (settings: Settings) => { + setSettings(settings); + localStorage.setItem('settings', JSON.stringify(settings)); + }; + + const savedGameSettings = localStorage.getItem('initialGameSettings'); const [initialGameSettings, setInitialGameSettings] = - useState( - savedGameSettings ? JSON.parse(savedGameSettings) : null + useState( + savedGameSettings + ? JSON.parse(savedGameSettings) + : defaultInitialGameSettings ); const setInitialGameSettingsAndLocalStorage = ( @@ -64,15 +93,6 @@ export const GlobalSettingsProvider = ({ ); }; - const [settings, setSettings] = useState( - savedSettings ? JSON.parse(savedSettings) : defaultSettings - ); - - const setSettingsAndLocalStorage = (settings: Settings) => { - setSettings(settings); - localStorage.setItem('settings', JSON.stringify(settings)); - }; - const removeLocalStorage = async () => { localStorage.removeItem('initialGameSettings'); localStorage.removeItem('players'); @@ -252,7 +272,7 @@ export const GlobalSettingsProvider = ({ }, goToStart, showPlay, - setShowPlay, + setShowPlay: setShowPlayAndLocalStorage, playing, setPlaying: setPlayingAndLocalStorage, initialGameSettings, @@ -264,6 +284,8 @@ export const GlobalSettingsProvider = ({ isPWA: window?.matchMedia('(display-mode: standalone)').matches, preStartCompleted, setPreStartCompleted: setPreStartCompletedAndLocalStorage, + savedGame, + saveCurrentGame: setCurrentGameAndLocalStorage, version: { installedVersion: import.meta.env.VITE_APP_VERSION, @@ -285,6 +307,7 @@ export const GlobalSettingsProvider = ({ settings, randomizingPlayer, preStartCompleted, + savedGame, remoteVersion, isLatestVersion, analytics,