forked from external-repos/LifeTrinket
better reset game
This commit is contained in:
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user