Compare commits

...

1 Commits

Author SHA1 Message Date
Viktor Rådberg
23ab7c4e46 wip 2023-10-21 15:36:53 +02:00
4 changed files with 120 additions and 24 deletions

View File

@@ -11,6 +11,8 @@ import {
Poison, Poison,
} from '../../Icons/generated'; } from '../../Icons/generated';
import { usePlayers } from '../../Hooks/usePlayers'; import { usePlayers } from '../../Hooks/usePlayers';
import { useGlobalSettings } from '../../Hooks/useGlobalSettings';
import { GameFormat } from '../../Types/Settings';
const Container = styled.div<{ $rotation: Rotation }>` const Container = styled.div<{ $rotation: Rotation }>`
width: 100%; width: 100%;
@@ -61,6 +63,7 @@ type ExtraCountersBarProps = {
const ExtraCountersBar = ({ player }: ExtraCountersBarProps) => { const ExtraCountersBar = ({ player }: ExtraCountersBarProps) => {
const { updatePlayer } = usePlayers(); const { updatePlayer } = usePlayers();
const { initialGameSettings } = useGlobalSettings();
const handleCounterChange = ( const handleCounterChange = (
updatedCounterTotal: number, updatedCounterTotal: number,
@@ -117,6 +120,9 @@ const ExtraCountersBar = ({ player }: ExtraCountersBarProps) => {
return null; return null;
} }
const isTwoHeadedGiant =
initialGameSettings?.gameFormat === GameFormat.TwoHeadedGiant;
return ( return (
<Container $rotation={player.settings.rotation}> <Container $rotation={player.settings.rotation}>
<ExtraCountersGrid $rotation={player.settings.rotation}> <ExtraCountersGrid $rotation={player.settings.rotation}>

View File

@@ -1,4 +1,11 @@
import { Button, FormControl, FormLabel, Switch } from '@mui/material'; import {
Button,
FormControl,
FormLabel,
MenuItem,
Select,
Switch,
} from '@mui/material';
import Slider from '@mui/material/Slider'; import Slider from '@mui/material/Slider';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
@@ -14,7 +21,7 @@ import LayoutOptions from './LayoutOptions';
import { Spacer } from '../../Misc/Spacer'; import { Spacer } from '../../Misc/Spacer';
import { usePlayers } from '../../../Hooks/usePlayers'; import { usePlayers } from '../../../Hooks/usePlayers';
import { useGlobalSettings } from '../../../Hooks/useGlobalSettings'; import { useGlobalSettings } from '../../../Hooks/useGlobalSettings';
import { InitialGameSettings } from '../../../Types/Settings'; import { GameFormat, InitialGameSettings } from '../../../Types/Settings';
import { SettingsModal } from '../../Misc/SettingsModal'; import { SettingsModal } from '../../Misc/SettingsModal';
const MainWrapper = styled.div` const MainWrapper = styled.div`
@@ -118,6 +125,7 @@ const Start = () => {
numberOfPlayers: 4, numberOfPlayers: 4,
startingLifeTotal: 40, startingLifeTotal: 40,
useCommanderDamage: true, useCommanderDamage: true,
gameFormat: GameFormat.Commander,
gridAreas: GridTemplateAreas.FourPlayers, gridAreas: GridTemplateAreas.FourPlayers,
} }
); );
@@ -214,7 +222,11 @@ const Start = () => {
<H1>Life Trinket</H1> <H1>Life Trinket</H1>
<FormControl focused={false} style={{ width: '80vw' }}> <FormControl focused={false} style={{ width: '80vw' }}>
<FormLabel>Number of Players</FormLabel> <FormLabel>
{playerOptions.gameFormat === GameFormat.TwoHeadedGiant
? 'Number of Teams'
: 'Number of Players'}
</FormLabel>
<Slider <Slider
title="Number of Players" title="Number of Players"
max={6} max={6}
@@ -253,29 +265,37 @@ const Start = () => {
<ToggleButtonsWrapper> <ToggleButtonsWrapper>
<ToggleContainer> <ToggleContainer>
<FormLabel>Commander</FormLabel> <FormLabel>Use Commander Damage</FormLabel>
<Switch <Switch
checked={ disabled={playerOptions.gameFormat === GameFormat.Commander}
playerOptions.useCommanderDamage ?? checked={playerOptions.useCommanderDamage}
initialGameSettings?.useCommanderDamage ??
true
}
onChange={(_e, value) => { onChange={(_e, value) => {
if (value) { switch (playerOptions.gameFormat) {
setPlayerOptions({ case GameFormat.TwoHeadedGiant:
...playerOptions, if (value) {
useCommanderDamage: value, setPlayerOptions({
numberOfPlayers: 4, ...playerOptions,
startingLifeTotal: 40, useCommanderDamage: value,
}); startingLifeTotal: 60,
return; });
return;
}
setPlayerOptions({
...playerOptions,
useCommanderDamage: value,
startingLifeTotal: 30,
});
return;
case GameFormat.Standard:
case GameFormat.Commander:
default:
setPlayerOptions({
...playerOptions,
useCommanderDamage: value,
});
return;
} }
setPlayerOptions({
...playerOptions,
useCommanderDamage: value,
numberOfPlayers: 2,
startingLifeTotal: 20,
});
}} }}
/> />
</ToggleContainer> </ToggleContainer>
@@ -290,6 +310,51 @@ const Start = () => {
</Button> </Button>
</ToggleButtonsWrapper> </ToggleButtonsWrapper>
<FormLabel>Format</FormLabel>
<Select
value={playerOptions.gameFormat}
onChange={(e) => {
switch (e.target.value) {
case GameFormat.Standard:
setPlayerOptions({
...playerOptions,
useCommanderDamage: false,
numberOfPlayers: 2,
startingLifeTotal: 20,
gameFormat: GameFormat.Standard,
});
return;
case GameFormat.TwoHeadedGiant:
setPlayerOptions({
...playerOptions,
useCommanderDamage: false,
numberOfPlayers: 2,
startingLifeTotal: 30,
gameFormat: GameFormat.TwoHeadedGiant,
});
return;
case GameFormat.Commander:
default:
setPlayerOptions({
...playerOptions,
useCommanderDamage: true,
numberOfPlayers: 4,
startingLifeTotal: 40,
gameFormat: GameFormat.Commander,
});
return;
}
}}
>
<MenuItem value={GameFormat.Commander}>Commander</MenuItem>
<MenuItem value={GameFormat.Standard}>Standard</MenuItem>
<MenuItem value={GameFormat.TwoHeadedGiant}>
Two Headed Giant
</MenuItem>
</Select>
<FormLabel>Layout</FormLabel> <FormLabel>Layout</FormLabel>
<LayoutOptions <LayoutOptions
numberOfPlayers={playerOptions.numberOfPlayers} numberOfPlayers={playerOptions.numberOfPlayers}

View File

@@ -104,5 +104,26 @@ export const theme = createTheme({
}, },
}, },
}, },
MuiPaper: {
styleOverrides: {
root: {
backgroundColor: '#495E35',
},
},
},
MuiMenuItem: {
styleOverrides: {
root: {
backgroundColor: '#495E35',
},
},
},
MuiList: {
styleOverrides: {
root: {
backgroundColor: '#495E35',
},
},
},
}, },
}); });

View File

@@ -14,4 +14,8 @@ export type InitialGameSettings = {
gridAreas: GridTemplateAreas; gridAreas: GridTemplateAreas;
}; };
type GameFormat = 'commander' | 'standard' | 'two-headed-giant'; export enum GameFormat {
Commander = 'commander',
Standard = 'standard',
TwoHeadedGiant = 'two-headed-giant',
}