wake lock on by default

This commit is contained in:
Viktor Rådberg
2023-09-18 10:59:29 +02:00
parent 5f91abf194
commit 4230032d6f
6 changed files with 139 additions and 93 deletions

View File

@@ -37,7 +37,7 @@ const CommanderDamageBar = ({
setLifeTotal, setLifeTotal,
}: CommanderDamageBarProps) => { }: CommanderDamageBarProps) => {
return ( return (
<CommanderDamageGrid rotation={player.settings.rotation}> <CommanderDamageGrid rotation={player.settings.rotation} key={player.key}>
{opponents.map((opponent) => { {opponents.map((opponent) => {
if (!opponent.settings.useCommanderDamage) { if (!opponent.settings.useCommanderDamage) {
return null; return null;
@@ -48,6 +48,7 @@ const CommanderDamageBar = ({
opponent={opponent} opponent={opponent}
setLifeTotal={setLifeTotal} setLifeTotal={setLifeTotal}
onPlayerChange={onPlayerChange} onPlayerChange={onPlayerChange}
key={opponent.key}
/> />
); );
})} })}

View File

@@ -10,12 +10,6 @@ import PlayerMenu from '../PlayerMenu/PlayerMenu';
import Health from './Health'; import Health from './Health';
import { WakeLock } from '../../Types/WakeLock'; import { WakeLock } from '../../Types/WakeLock';
const Lmao = styled.div`
position: absolute;
width: 100%;
height: 100%;
`;
const LifeCounterContentWrapper = styled.div<{ const LifeCounterContentWrapper = styled.div<{
backgroundColor: string; backgroundColor: string;
}>` }>`
@@ -230,53 +224,52 @@ const LifeCounter = ({
return ( return (
<LifeCounterContentWrapper backgroundColor={backgroundColor}> <LifeCounterContentWrapper backgroundColor={backgroundColor}>
<Lmao> <LifeCounterWrapper rotation={player.settings.rotation}>
<LifeCounterWrapper rotation={player.settings.rotation}> {player.isStartingPlayer && !showStartingPlayer && (
{player.isStartingPlayer && !showStartingPlayer && ( <PlayerNoticeWrapper
<PlayerNoticeWrapper rotation={player.settings.rotation}
rotation={player.settings.rotation} backgroundColor={theme.palette.primary.main}
backgroundColor={theme.palette.primary.main} >
> <DynamicText rotation={player.settings.rotation}>
<DynamicText rotation={player.settings.rotation}> You start!
You start! </DynamicText>
</DynamicText> </PlayerNoticeWrapper>
</PlayerNoticeWrapper> )}
)}
{player.hasLost && ( {player.hasLost && (
<PlayerNoticeWrapper <PlayerNoticeWrapper
rotation={player.settings.rotation}
backgroundColor={'#00000070'}
/>
)}
<CommanderDamageBar
opponents={opponents}
player={player}
onPlayerChange={onPlayerChange}
setLifeTotal={handleLifeChange}
/>
<SettingsButton
onClick={() => {
setShowPlayerMenu(!showPlayerMenu);
}}
rotation={player.settings.rotation} rotation={player.settings.rotation}
backgroundColor={'#00000070'}
/> />
{playerCanLose(player) && ( )}
<LoseGameButton <CommanderDamageBar
rotation={player.settings.rotation} opponents={opponents}
onClick={toggleGameLost} player={player}
/> onPlayerChange={onPlayerChange}
)} setLifeTotal={handleLifeChange}
<Health />
player={player} <SettingsButton
onPlayerChange={onPlayerChange} onClick={() => {
differenceKey={differenceKey} setShowPlayerMenu(!showPlayerMenu);
setDifferenceKey={setDifferenceKey} }}
rotation={player.settings.rotation}
/>
{playerCanLose(player) && (
<LoseGameButton
rotation={player.settings.rotation} rotation={player.settings.rotation}
onClick={toggleGameLost}
/> />
<ExtraCountersBar player={player} onPlayerChange={onPlayerChange} /> )}
</LifeCounterWrapper> <Health
</Lmao> player={player}
onPlayerChange={onPlayerChange}
differenceKey={differenceKey}
setDifferenceKey={setDifferenceKey}
rotation={player.settings.rotation}
/>
<ExtraCountersBar player={player} onPlayerChange={onPlayerChange} />
</LifeCounterWrapper>
{showPlayerMenu && ( {showPlayerMenu && (
<PlayerMenu <PlayerMenu
player={player} player={player}

View File

@@ -0,0 +1,6 @@
import styled from 'styled-components';
export const Spacer = styled.div<{ width?: string; height?: string }>`
width: ${(props) => props.width};
height: ${(props) => props.height};
`;

View File

@@ -195,7 +195,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color="black" color="black"
stroke="white" stroke="white"
stroke-width="30" strokeWidth="30"
/> />
} }
checkedIcon={ checkedIcon={
@@ -203,7 +203,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color={player.color} color={player.color}
stroke="white" stroke="white"
stroke-width="30" strokeWidth="30"
/> />
} }
onChange={handleSettingsChange} onChange={handleSettingsChange}
@@ -220,7 +220,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color="black" color="black"
stroke="white" stroke="white"
stroke-width="30" strokeWidth="30"
/> />
} }
checkedIcon={ checkedIcon={
@@ -228,7 +228,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color={player.color} color={player.color}
stroke="white" stroke="white"
stroke-width="30" strokeWidth="30"
/> />
} }
onChange={handleSettingsChange} onChange={handleSettingsChange}
@@ -244,7 +244,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color="black" color="black"
stroke="white" stroke="white"
stroke-width="15" strokeWidth="15"
/> />
} }
checkedIcon={ checkedIcon={
@@ -252,7 +252,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color={player.color} color={player.color}
stroke="white" stroke="white"
stroke-width="15" strokeWidth="15"
/> />
} }
onChange={handleSettingsChange} onChange={handleSettingsChange}
@@ -268,7 +268,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color="black" color="black"
stroke="white" stroke="white"
stroke-width="15" strokeWidth="15"
/> />
} }
checkedIcon={ checkedIcon={
@@ -276,7 +276,7 @@ const Settings = ({
size="6vmax" size="6vmax"
color={player.color} color={player.color}
stroke="white" stroke="white"
stroke-width="15" strokeWidth="15"
/> />
} }
onChange={handleSettingsChange} onChange={handleSettingsChange}

View File

@@ -34,7 +34,7 @@ const LayoutOptions: React.FC<LayoutOptionsProps> = ({
gridAreas, gridAreas,
onChange, onChange,
}) => { }) => {
const iconHeight = '33vmin'; const iconHeight = '30vmin';
const iconWidth = '20vmin'; const iconWidth = '20vmin';
const renderLayoutOptions = () => { const renderLayoutOptions = () => {
@@ -94,18 +94,18 @@ const LayoutOptions: React.FC<LayoutOptionsProps> = ({
return ( return (
<> <>
<FormControlLabel <FormControlLabel
value={GridTemplateAreas.TwoPlayersOppositeLandscape} value={GridTemplateAreas.TwoPlayersSameSide}
control={ control={
<Radio <Radio
icon={ icon={
<TwoPlayersOppositeLandscape <TwoPlayersSameSide
height={iconHeight} height={iconHeight}
width={iconWidth} width={iconWidth}
fill={theme.palette.secondary.main} fill={theme.palette.secondary.main}
/> />
} }
checkedIcon={ checkedIcon={
<TwoPlayersOppositeLandscape <TwoPlayersSameSide
height={iconHeight} height={iconHeight}
width={iconWidth} width={iconWidth}
fill={theme.palette.primary.main} fill={theme.palette.primary.main}
@@ -140,18 +140,18 @@ const LayoutOptions: React.FC<LayoutOptionsProps> = ({
label="" label=""
/> />
<FormControlLabel <FormControlLabel
value={GridTemplateAreas.TwoPlayersSameSide} value={GridTemplateAreas.TwoPlayersOppositeLandscape}
control={ control={
<Radio <Radio
icon={ icon={
<TwoPlayersSameSide <TwoPlayersOppositeLandscape
height={iconHeight} height={iconHeight}
width={iconWidth} width={iconWidth}
fill={theme.palette.secondary.main} fill={theme.palette.secondary.main}
/> />
} }
checkedIcon={ checkedIcon={
<TwoPlayersSameSide <TwoPlayersOppositeLandscape
height={iconHeight} height={iconHeight}
width={iconWidth} width={iconWidth}
fill={theme.palette.primary.main} fill={theme.palette.primary.main}

View File

@@ -17,17 +17,16 @@ import { SupportMe } from '../../Misc/SupportMe';
import { H2, Paragraph } from '../../Misc/TextComponents'; import { H2, Paragraph } from '../../Misc/TextComponents';
import LayoutOptions from './LayoutOptions'; import LayoutOptions from './LayoutOptions';
import { useFullscreen } from '../../../Hooks/useFullscreen'; import { useFullscreen } from '../../../Hooks/useFullscreen';
import { Spacer } from '../../Misc/Spacer';
const MainWrapper = styled.div` const MainWrapper = styled.div`
width: 100vw; width: 100dvw;
height: 100vh; height: fit-content;
padding-bottom: 58px; padding-bottom: 58px;
overflow: hidden; overflow: hidden;
align-items: center; align-items: center;
justify-content: center;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: fit-content;
`; `;
const StartButtonFooter = styled.div` const StartButtonFooter = styled.div`
@@ -36,6 +35,18 @@ const StartButtonFooter = styled.div`
translate: -50%, -50%; translate: -50%, -50%;
`; `;
const ToggleButtonsWrapper = styled.div`
display: flex;
flex-direction: row;
justify-content: space-evenly;
`;
const ToggleContainer = styled.div`
display: flex;
flex-direction: column;
align-items: center;
`;
const playerMarks = [ const playerMarks = [
{ {
value: 1, value: 1,
@@ -109,15 +120,25 @@ const Start = ({
gridAreas: GridTemplateAreas.FourPlayers, gridAreas: GridTemplateAreas.FourPlayers,
} }
); );
const [wakeLockActive, setWakeLockActive] = useState(true);
const { enableFullscreen } = useFullscreen(); const { enableFullscreen } = useFullscreen();
const toggleWakeLock = ({ active }: { active: boolean }) => { const toggleWakeLock = () => {
if (active) { console.log(wakeLock.active, wakeLockActive);
if (wakeLock.active && wakeLockActive) {
wakeLock.release(); wakeLock.release();
} else { setWakeLockActive(false);
wakeLock.request(); return;
} }
if (!wakeLock.active && !wakeLockActive) {
wakeLock.request();
setWakeLockActive(true);
return;
}
setWakeLockActive(wakeLock.active);
}; };
const doStartGame = () => { const doStartGame = () => {
@@ -127,6 +148,11 @@ const Start = ({
analytics.trackEvent('game_started', { ...initialGameSettings }); analytics.trackEvent('game_started', { ...initialGameSettings });
if (!wakeLock.active && wakeLockActive) {
console.log('yo');
wakeLock.request();
}
try { try {
enableFullscreen(); enableFullscreen();
} catch (error) { } catch (error) {
@@ -150,7 +176,7 @@ const Start = ({
case 1: case 1:
return GridTemplateAreas.OnePlayerLandscape; return GridTemplateAreas.OnePlayerLandscape;
case 2: case 2:
return GridTemplateAreas.TwoPlayersOppositeLandscape; return GridTemplateAreas.TwoPlayersSameSide;
case 3: case 3:
return GridTemplateAreas.ThreePlayers; return GridTemplateAreas.ThreePlayers;
case 4: case 4:
@@ -203,7 +229,7 @@ const Start = ({
max={6} max={6}
min={1} min={1}
aria-label="Custom marks" aria-label="Custom marks"
defaultValue={initialGameSettings?.numberOfPlayers ?? 4} value={playerOptions?.numberOfPlayers ?? 4}
getAriaValueText={valuetext} getAriaValueText={valuetext}
step={null} step={null}
marks={playerMarks} marks={playerMarks}
@@ -220,7 +246,7 @@ const Start = ({
max={60} max={60}
min={20} min={20}
aria-label="Custom marks" aria-label="Custom marks"
defaultValue={initialGameSettings?.startingLifeTotal ?? 40} value={playerOptions?.startingLifeTotal ?? 40}
getAriaValueText={valuetext} getAriaValueText={valuetext}
step={10} step={10}
marks={healthMarks} marks={healthMarks}
@@ -231,26 +257,46 @@ const Start = ({
}) })
} }
/> />
<FormLabel>Commander</FormLabel>
<Switch <ToggleButtonsWrapper>
checked={playerOptions.useCommanderDamage} <ToggleContainer>
defaultChecked={initialGameSettings?.useCommanderDamage ?? true} <FormLabel>Commander</FormLabel>
onChange={(_e, value) => <Switch
setPlayerOptions({ checked={
...playerOptions, playerOptions.useCommanderDamage ??
useCommanderDamage: value, initialGameSettings?.useCommanderDamage ??
}) true
} }
/> onChange={(_e, value) => {
<FormLabel>Keep Awake</FormLabel> if (value) {
<Switch setPlayerOptions({
checked={wakeLock.active} ...playerOptions,
defaultChecked={wakeLock.active} useCommanderDamage: value,
onChange={() => toggleWakeLock({ active: wakeLock.active })} numberOfPlayers: 4,
/> startingLifeTotal: 40,
});
return;
}
setPlayerOptions({
...playerOptions,
useCommanderDamage: value,
numberOfPlayers: 2,
startingLifeTotal: 20,
});
}}
/>
</ToggleContainer>
<Spacer width="2rem" />
<ToggleContainer>
<FormLabel>Keep Awake</FormLabel>
<Switch
checked={wakeLockActive}
onChange={() => toggleWakeLock()}
/>
</ToggleContainer>
</ToggleButtonsWrapper>
<FormLabel>Layout</FormLabel> <FormLabel>Layout</FormLabel>
<LayoutOptions <LayoutOptions
numberOfPlayers={playerOptions.numberOfPlayers} numberOfPlayers={playerOptions.numberOfPlayers}
gridAreas={playerOptions.gridAreas} gridAreas={playerOptions.gridAreas}