From e47b685daaa1bf65aeec08ce66163c492d159de0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20R=C3=A5dberg?= Date: Mon, 18 Sep 2023 18:24:38 +0200 Subject: [PATCH] reset game button --- src/App.tsx | 1 + src/Components/LifeCounter/LifeCounter.tsx | 14 ++-- src/Components/PlayerMenu/PlayerMenu.tsx | 1 + src/Components/PlayerMenu/Settings.tsx | 79 +++++++++++++++++--- src/Components/Views/StartMenu/StartMenu.tsx | 1 + src/Data/getInitialPlayers.ts | 3 +- src/Types/Player.ts | 1 + 7 files changed, 82 insertions(+), 18 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 45d0657..8946724 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -76,6 +76,7 @@ const App = () => { const updatedPlayers = players.map((player) => player.index === updatedPlayer.index ? updatedPlayer : player ); + setPlayers(updatedPlayers); }; diff --git a/src/Components/LifeCounter/LifeCounter.tsx b/src/Components/LifeCounter/LifeCounter.tsx index de439ae..a4714e2 100644 --- a/src/Components/LifeCounter/LifeCounter.tsx +++ b/src/Components/LifeCounter/LifeCounter.tsx @@ -195,9 +195,7 @@ const LifeCounter = ({ const [showPlayerMenu, setShowPlayerMenu] = useState(false); const [recentDifference, setRecentDifference] = useState(0); - const [showStartingPlayer, setShowStartingPlayer] = useState( - localStorage.getItem('playing') === 'true' - ); + const [differenceKey, setDifferenceKey] = useState(Date.now()); useEffect(() => { @@ -209,15 +207,17 @@ const LifeCounter = ({ }, [recentDifference]); useEffect(() => { - if (!showStartingPlayer) { + if (player.showStartingPlayer) { const playingTimer = setTimeout(() => { localStorage.setItem('playing', 'true'); - setShowStartingPlayer(localStorage.getItem('playing') === 'true'); + player.showStartingPlayer = false; + onPlayerChange(player); }, 3_000); return () => clearTimeout(playingTimer); } - }, [showStartingPlayer]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [player.showStartingPlayer]); player.settings.rotation === Rotation.SideFlipped || player.settings.rotation === Rotation.Side; @@ -225,7 +225,7 @@ const LifeCounter = ({ return ( - {player.isStartingPlayer && !showStartingPlayer && ( + {player.isStartingPlayer && player.showStartingPlayer && ( ); diff --git a/src/Components/PlayerMenu/Settings.tsx b/src/Components/PlayerMenu/Settings.tsx index bc575c9..a2123a0 100644 --- a/src/Components/PlayerMenu/Settings.tsx +++ b/src/Components/PlayerMenu/Settings.tsx @@ -13,14 +13,7 @@ import { Player, Rotation } from '../../Types/Player'; import { WakeLock } from '../../Types/WakeLock'; import { useFullscreen } from '../../Hooks/useFullscreen'; import { theme } from '../../Data/theme'; - -type SettingsProps = { - player: Player; - opponents: Player[]; - onChange: (updatedPlayer: Player) => void; - resetCurrentGame: () => void; - wakeLock: WakeLock; -}; +import { InitialSettings } from '../../Data/getInitialPlayers'; const SettingsContainer = styled.div<{ $rotation: Rotation; @@ -135,11 +128,22 @@ const CheckboxContainer = styled.div<{ $rotation: Rotation }>` }} `; +type SettingsProps = { + player: Player; + opponents: Player[]; + onChange: (updatedPlayer: Player) => void; + resetCurrentGame: () => void; + wakeLock: WakeLock; + setShowPlayerMenu: (showPlayerMenu: boolean) => void; +}; + const Settings = ({ player, onChange, resetCurrentGame, wakeLock, + opponents, + setShowPlayerMenu, }: SettingsProps) => { const { disableFullscreen, enableFullscreen, isFullscreen } = useFullscreen(); const isSide = @@ -168,11 +172,50 @@ const Settings = ({ }; const handleResetGame = () => { - resetCurrentGame(); + const savedGameSettings = localStorage.getItem('initialGameSettings'); + + const initialGameSettings: InitialSettings = savedGameSettings + ? JSON.parse(savedGameSettings) + : null; + + if (!initialGameSettings) { + resetCurrentGame(); + } + + const startingPlayerIndex = Math.floor( + Math.random() * initialGameSettings.numberOfPlayers + ); + + [player, ...opponents].forEach((player: Player) => { + player.commanderDamage.map((damage) => { + damage.damageTotal = 0; + damage.partnerDamageTotal = 0; + }); + + player.extraCounters.map((counter) => { + counter.value = 0; + }); + + player.lifeTotal = initialGameSettings.startingLifeTotal; + + player.hasLost = false; + + const isStartingPlayer = player.index === startingPlayerIndex; + + player.isStartingPlayer = isStartingPlayer; + + if (player.isStartingPlayer) { + player.showStartingPlayer = true; + } + + onChange(player); + }); + localStorage.setItem('playing', 'false'); + setShowPlayerMenu(false); }; const handleNewGame = () => { - handleResetGame(); + resetCurrentGame(); }; const toggleFullscreen = () => { @@ -348,6 +391,22 @@ const Settings = ({ > Keep Awake + + ); diff --git a/src/Components/Views/StartMenu/StartMenu.tsx b/src/Components/Views/StartMenu/StartMenu.tsx index 2228905..511c3cc 100644 --- a/src/Components/Views/StartMenu/StartMenu.tsx +++ b/src/Components/Views/StartMenu/StartMenu.tsx @@ -159,6 +159,7 @@ const Start = ({ setInitialGameSettings(initialGameSettings); setPlayers(createInitialPlayers(initialGameSettings)); + localStorage.setItem('playing', 'false'); }; useEffect(() => { diff --git a/src/Data/getInitialPlayers.ts b/src/Data/getInitialPlayers.ts index 53a8683..4e5a3e4 100644 --- a/src/Data/getInitialPlayers.ts +++ b/src/Data/getInitialPlayers.ts @@ -233,7 +233,8 @@ export const createInitialPlayers = ({ usePoison: false, rotation, }, - isStartingPlayer: isStartingPlayer, + isStartingPlayer, + showStartingPlayer: isStartingPlayer, extraCounters: [], commanderDamage, hasLost: false, diff --git a/src/Types/Player.ts b/src/Types/Player.ts index 3f5f575..76b9eac 100644 --- a/src/Types/Player.ts +++ b/src/Types/Player.ts @@ -6,6 +6,7 @@ export type Player = { commanderDamage: CommanderDamage[]; extraCounters: ExtraCounter[]; isStartingPlayer: boolean; + showStartingPlayer: boolean; hasLost: boolean; };