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>
{showPlayerMenu && (
<PlayerMenu
player={player}
opponents={opponents}
setShowPlayerMenu={setShowPlayerMenu}
/>
<PlayerMenu player={player} setShowPlayerMenu={setShowPlayerMenu} />
)}
</LifeCounterContentWrapper>
);

View File

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

View File

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

View File

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

View File

@@ -2,6 +2,7 @@ import { ReactNode, useEffect } from 'react';
import { Player } from '../Types/Player';
import { useMemo, useState } from 'react';
import { PlayersContextType, PlayersContext } from '../Contexts/PlayersContext';
import { InitialSettings } from '../Data/getInitialPlayers';
export const PlayersProvider = ({ children }: { children: ReactNode }) => {
const savedPlayers = localStorage.getItem('players');
@@ -38,11 +39,54 @@ export const PlayersProvider = ({ children }: { children: ReactNode }) => {
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 {
players,
setPlayers,
updatePlayer,
updateLifeTotal,
resetCurrentGame,
};
}, [players]);