forked from external-repos/LifeTrinket
better reset game
This commit is contained in:
@@ -255,11 +255,7 @@ const LifeCounter = ({ player, opponents }: LifeCounterProps) => {
|
||||
</LifeCounterWrapper>
|
||||
|
||||
{showPlayerMenu && (
|
||||
<PlayerMenu
|
||||
player={player}
|
||||
opponents={opponents}
|
||||
setShowPlayerMenu={setShowPlayerMenu}
|
||||
/>
|
||||
<PlayerMenu player={player} setShowPlayerMenu={setShowPlayerMenu} />
|
||||
)}
|
||||
</LifeCounterContentWrapper>
|
||||
);
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user