better reset game

This commit is contained in:
Viktor Rådberg
2023-09-22 13:48:29 +02:00
parent 92dc5eff6f
commit d21e827eb8
5 changed files with 51 additions and 59 deletions

View File

@@ -255,11 +255,7 @@ const LifeCounter = ({ player, opponents }: LifeCounterProps) => {
</LifeCounterWrapper> </LifeCounterWrapper>
{showPlayerMenu && ( {showPlayerMenu && (
<PlayerMenu <PlayerMenu player={player} setShowPlayerMenu={setShowPlayerMenu} />
player={player}
opponents={opponents}
setShowPlayerMenu={setShowPlayerMenu}
/>
)} )}
</LifeCounterContentWrapper> </LifeCounterContentWrapper>
); );

View File

@@ -62,15 +62,10 @@ const CloseButton = styled.div<{
type PlayerMenuProps = { type PlayerMenuProps = {
player: Player; player: Player;
opponents: Player[];
setShowPlayerMenu: (showPlayerMenu: boolean) => void; setShowPlayerMenu: (showPlayerMenu: boolean) => void;
}; };
const PlayerMenu = ({ const PlayerMenu = ({ player, setShowPlayerMenu }: PlayerMenuProps) => {
player,
opponents,
setShowPlayerMenu,
}: PlayerMenuProps) => {
const handleOnClick = () => { const handleOnClick = () => {
setShowPlayerMenu(false); setShowPlayerMenu(false);
}; };
@@ -89,11 +84,7 @@ const PlayerMenu = ({
X X
</Button> </Button>
</CloseButton> </CloseButton>
<Settings <Settings player={player} setShowPlayerMenu={setShowPlayerMenu} />
player={player}
opponents={opponents}
setShowPlayerMenu={setShowPlayerMenu}
/>
</PlayerMenuWrapper> </PlayerMenuWrapper>
); );
}; };

View File

@@ -1,6 +1,5 @@
import { Button, Checkbox } from '@mui/material'; import { Button, Checkbox } from '@mui/material';
import styled, { css } from 'styled-components'; import styled, { css } from 'styled-components';
import { InitialSettings } from '../../Data/getInitialPlayers';
import { theme } from '../../Data/theme'; import { theme } from '../../Data/theme';
import { useGlobalSettings } from '../../Hooks/useGlobalSettings'; import { useGlobalSettings } from '../../Hooks/useGlobalSettings';
import { import {
@@ -130,13 +129,12 @@ const CheckboxContainer = styled.div<{ $rotation: Rotation }>`
type SettingsProps = { type SettingsProps = {
player: Player; player: Player;
opponents: Player[];
setShowPlayerMenu: (showPlayerMenu: boolean) => void; setShowPlayerMenu: (showPlayerMenu: boolean) => void;
}; };
const Settings = ({ player, opponents, setShowPlayerMenu }: SettingsProps) => { const Settings = ({ player, setShowPlayerMenu }: SettingsProps) => {
const { fullscreen, wakeLock, goToStart } = useGlobalSettings(); const { fullscreen, wakeLock, goToStart } = useGlobalSettings();
const { updatePlayer } = usePlayers(); const { updatePlayer, resetCurrentGame } = usePlayers();
const isSide = const isSide =
player.settings.rotation === Rotation.Side || player.settings.rotation === Rotation.Side ||
player.settings.rotation === Rotation.SideFlipped; player.settings.rotation === Rotation.SideFlipped;
@@ -154,45 +152,7 @@ const Settings = ({ player, opponents, setShowPlayerMenu }: SettingsProps) => {
}; };
const handleResetGame = () => { const handleResetGame = () => {
const savedGameSettings = localStorage.getItem('initialGameSettings'); resetCurrentGame();
const initialGameSettings: InitialSettings = savedGameSettings
? JSON.parse(savedGameSettings)
: null;
if (!initialGameSettings) {
goToStart();
}
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;
}
updatePlayer(player);
});
localStorage.setItem('playing', 'false');
setShowPlayerMenu(false); setShowPlayerMenu(false);
}; };

View File

@@ -6,6 +6,7 @@ export type PlayersContextType = {
setPlayers: (players: Player[]) => void; setPlayers: (players: Player[]) => void;
updatePlayer: (updatedPlayer: Player) => void; updatePlayer: (updatedPlayer: Player) => void;
updateLifeTotal: (player: Player, updatedLifeTotal: number) => number; updateLifeTotal: (player: Player, updatedLifeTotal: number) => number;
resetCurrentGame: () => void;
}; };
export const PlayersContext = createContext<PlayersContextType | null>(null); export const PlayersContext = createContext<PlayersContextType | null>(null);

View File

@@ -2,6 +2,7 @@ import { ReactNode, useEffect } from 'react';
import { Player } from '../Types/Player'; import { Player } from '../Types/Player';
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { PlayersContextType, PlayersContext } from '../Contexts/PlayersContext'; import { PlayersContextType, PlayersContext } from '../Contexts/PlayersContext';
import { InitialSettings } from '../Data/getInitialPlayers';
export const PlayersProvider = ({ children }: { children: ReactNode }) => { export const PlayersProvider = ({ children }: { children: ReactNode }) => {
const savedPlayers = localStorage.getItem('players'); const savedPlayers = localStorage.getItem('players');
@@ -38,11 +39,54 @@ export const PlayersProvider = ({ children }: { children: ReactNode }) => {
return difference; return difference;
}; };
const resetCurrentGame = () => {
const savedGameSettings = localStorage.getItem('initialGameSettings');
const initialGameSettings: InitialSettings = savedGameSettings
? JSON.parse(savedGameSettings)
: null;
if (!initialGameSettings) {
return;
}
const startingPlayerIndex = Math.floor(
Math.random() * initialGameSettings.numberOfPlayers
);
players.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;
}
updatePlayer(player);
});
localStorage.setItem('playing', 'false');
};
return { return {
players, players,
setPlayers, setPlayers,
updatePlayer, updatePlayer,
updateLifeTotal, updateLifeTotal,
resetCurrentGame,
}; };
}, [players]); }, [players]);