diff --git a/src/App.tsx b/src/App.tsx index 6e8a2d6..45d0657 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,6 +8,7 @@ import { Player } from './Types/Player'; import { ThemeProvider } from '@mui/material'; import { theme } from './Data/theme'; import { useAnalytics } from './Hooks/useAnalytics'; +import { useWakeLock } from 'react-screen-wake-lock'; const GlobalStyles = createGlobalStyle` html, @@ -42,6 +43,17 @@ const App = () => { const analytics = useAnalytics(); const savedPlayers = localStorage.getItem('players'); const savedGameSettings = localStorage.getItem('initialGameSettings'); + const { isSupported, release, released, request, type } = useWakeLock(); + + const isActive = released === undefined ? false : !released; + + const wakeLock = { + isSupported, + release, + active: isActive, + request, + type, + }; const [initialGameSettings, setInitialGameSettings] = useState( @@ -90,6 +102,7 @@ const App = () => { onPlayerChange={handlePlayerChange} gridAreas={initialGameSettings?.gridAreas} resetCurrentGame={resetCurrentGame} + wakeLock={wakeLock} /> ) : ( @@ -98,6 +111,7 @@ const App = () => { initialGameSettings={initialGameSettings} setInitialGameSettings={setInitialGameSettings} setPlayers={setPlayers} + wakeLock={wakeLock} /> )} diff --git a/src/Components/PlayerMenu/PlayerMenu.tsx b/src/Components/PlayerMenu/PlayerMenu.tsx index c9aa201..0ab9762 100644 --- a/src/Components/PlayerMenu/PlayerMenu.tsx +++ b/src/Components/PlayerMenu/PlayerMenu.tsx @@ -4,6 +4,7 @@ import styled from 'styled-components'; import { css } from 'styled-components'; import { Rotation } from '../../Types/Player'; import { Button } from '@mui/material'; +import { WakeLock } from '../../Types/WakeLock'; const PlayerMenuWrapper = styled.div<{ rotation: Rotation; @@ -68,6 +69,7 @@ type PlayerMenuProps = { onPlayerChange: (updatedPlayer: Player) => void; setShowPlayerMenu: (showPlayerMenu: boolean) => void; resetCurrentGame: () => void; + wakeLock: WakeLock; }; const PlayerMenu = ({ @@ -76,9 +78,9 @@ const PlayerMenu = ({ onPlayerChange, setShowPlayerMenu, resetCurrentGame, + wakeLock, }: PlayerMenuProps) => { const handleOnClick = () => { - console.log('hej'); setShowPlayerMenu(false); }; @@ -101,6 +103,7 @@ const PlayerMenu = ({ onChange={onPlayerChange} opponents={opponents} resetCurrentGame={resetCurrentGame} + wakeLock={wakeLock} /> ); diff --git a/src/Components/PlayerMenu/Settings.tsx b/src/Components/PlayerMenu/Settings.tsx index 36f7946..583d35d 100644 --- a/src/Components/PlayerMenu/Settings.tsx +++ b/src/Components/PlayerMenu/Settings.tsx @@ -2,13 +2,14 @@ import { Button, Checkbox } from '@mui/material'; import styled, { css } from 'styled-components'; import { Energy, Experience, PartnerTax, Poison } from '../../Icons/generated'; import { Player, Rotation } from '../../Types/Player'; -import { useWakeLock } from 'react-screen-wake-lock'; +import { WakeLock } from '../../Types/WakeLock'; type SettingsProps = { player: Player; opponents: Player[]; onChange: (updatedPlayer: Player) => void; resetCurrentGame: () => void; + wakeLock: WakeLock; }; const SettingsContainer = styled.div<{ @@ -124,9 +125,24 @@ const CheckboxContainer = styled.div<{ rotation: Rotation }>` }} `; -const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => { - const { released, request, release } = useWakeLock(); - const handleWakeLock = () => (released === false ? release() : request()); +const Settings = ({ + player, + onChange, + resetCurrentGame, + wakeLock, +}: SettingsProps) => { + const isSide = + player.settings.rotation === Rotation.Side || + player.settings.rotation === Rotation.SideFlipped; + + const handleWakeLock = () => { + if (!wakeLock.active) { + wakeLock.request(); + return; + } + + wakeLock.release(); + }; const handleColorChange = (event: React.ChangeEvent) => { const updatedPlayer = { ...player, color: event.target.value }; @@ -156,11 +172,7 @@ const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => { } }; - const buttonFontSize = - player.settings.rotation === Rotation.SideFlipped || - player.settings.rotation === Rotation.Side - ? '1.3vmax' - : '2.5vmin'; + const buttonFontSize = isSide ? '2vmax' : '4vmin'; return ( @@ -271,7 +283,7 @@ const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => { diff --git a/src/Components/Views/Play.tsx b/src/Components/Views/Play.tsx index 59344a3..9a9baf4 100644 --- a/src/Components/Views/Play.tsx +++ b/src/Components/Views/Play.tsx @@ -1,6 +1,7 @@ import styled from 'styled-components'; import Counters from '../Counters/Counters'; import { Player } from '../../Types/Player'; +import { WakeLock } from '../../Types/WakeLock'; const MainWrapper = styled.div` width: 100vmax; @@ -13,6 +14,7 @@ type PlayProps = { onPlayerChange: (updatedPlayer: Player) => void; gridAreas: string; resetCurrentGame: () => void; + wakeLock: WakeLock; }; const Play = ({ @@ -20,6 +22,7 @@ const Play = ({ onPlayerChange, gridAreas, resetCurrentGame, + wakeLock, }: PlayProps) => { return ( @@ -28,6 +31,7 @@ const Play = ({ onPlayerChange={onPlayerChange} gridAreas={gridAreas} resetCurrentGame={resetCurrentGame} + wakeLock={wakeLock} /> ); diff --git a/src/Components/Views/StartMenu/StartMenu.tsx b/src/Components/Views/StartMenu/StartMenu.tsx index 9f3aaf1..5fa565d 100644 --- a/src/Components/Views/StartMenu/StartMenu.tsx +++ b/src/Components/Views/StartMenu/StartMenu.tsx @@ -11,6 +11,7 @@ import { theme } from '../../../Data/theme'; import { useAnalytics } from '../../../Hooks/useAnalytics'; import { Info } from '../../../Icons/generated'; import { Player } from '../../../Types/Player'; +import { WakeLock } from '../../../Types/WakeLock'; import { InfoModal } from '../../Misc/InfoModal'; import { SupportMe } from '../../Misc/SupportMe'; import { H2, Paragraph } from '../../Misc/TextComponents'; @@ -88,12 +89,14 @@ type StartProps = { setInitialGameSettings: (options: InitialSettings) => void; setPlayers: (updatedPlayer: Player[]) => void; initialGameSettings: InitialSettings | null; + wakeLock: WakeLock; }; const Start = ({ initialGameSettings, setPlayers, setInitialGameSettings, + wakeLock, }: StartProps) => { const analytics = useAnalytics(); const [openModal, setOpenModal] = useState(false); @@ -106,6 +109,13 @@ const Start = ({ } ); + const handleWakeLock = () => { + if (wakeLock.active) { + return; + } + wakeLock.request(); + }; + const doStartGame = () => { if (!initialGameSettings) { return; @@ -118,6 +128,8 @@ const Start = ({ } catch (error) { console.error(error); } + + handleWakeLock(); setInitialGameSettings(initialGameSettings); setPlayers(createInitialPlayers(initialGameSettings)); }; @@ -180,6 +192,7 @@ const Start = ({

Life Trinket

+ {wakeLock.active ? 'hej' : 'noo'} Number of Players Promise; + active: boolean; + release: () => Promise; + type: 'screen' | undefined; +};