mirror of
https://github.com/Vikeo/LifeTrinket.git
synced 2025-11-14 15:07:59 +00:00
wake lock on start game
This commit is contained in:
14
src/App.tsx
14
src/App.tsx
@@ -8,6 +8,7 @@ import { Player } from './Types/Player';
|
|||||||
import { ThemeProvider } from '@mui/material';
|
import { ThemeProvider } from '@mui/material';
|
||||||
import { theme } from './Data/theme';
|
import { theme } from './Data/theme';
|
||||||
import { useAnalytics } from './Hooks/useAnalytics';
|
import { useAnalytics } from './Hooks/useAnalytics';
|
||||||
|
import { useWakeLock } from 'react-screen-wake-lock';
|
||||||
|
|
||||||
const GlobalStyles = createGlobalStyle`
|
const GlobalStyles = createGlobalStyle`
|
||||||
html,
|
html,
|
||||||
@@ -42,6 +43,17 @@ const App = () => {
|
|||||||
const analytics = useAnalytics();
|
const analytics = useAnalytics();
|
||||||
const savedPlayers = localStorage.getItem('players');
|
const savedPlayers = localStorage.getItem('players');
|
||||||
const savedGameSettings = localStorage.getItem('initialGameSettings');
|
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] =
|
const [initialGameSettings, setInitialGameSettings] =
|
||||||
useState<InitialSettings | null>(
|
useState<InitialSettings | null>(
|
||||||
@@ -90,6 +102,7 @@ const App = () => {
|
|||||||
onPlayerChange={handlePlayerChange}
|
onPlayerChange={handlePlayerChange}
|
||||||
gridAreas={initialGameSettings?.gridAreas}
|
gridAreas={initialGameSettings?.gridAreas}
|
||||||
resetCurrentGame={resetCurrentGame}
|
resetCurrentGame={resetCurrentGame}
|
||||||
|
wakeLock={wakeLock}
|
||||||
/>
|
/>
|
||||||
</PlayWrapper>
|
</PlayWrapper>
|
||||||
) : (
|
) : (
|
||||||
@@ -98,6 +111,7 @@ const App = () => {
|
|||||||
initialGameSettings={initialGameSettings}
|
initialGameSettings={initialGameSettings}
|
||||||
setInitialGameSettings={setInitialGameSettings}
|
setInitialGameSettings={setInitialGameSettings}
|
||||||
setPlayers={setPlayers}
|
setPlayers={setPlayers}
|
||||||
|
wakeLock={wakeLock}
|
||||||
/>
|
/>
|
||||||
</StartWrapper>
|
</StartWrapper>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import styled from 'styled-components';
|
|||||||
import { css } from 'styled-components';
|
import { css } from 'styled-components';
|
||||||
import { Rotation } from '../../Types/Player';
|
import { Rotation } from '../../Types/Player';
|
||||||
import { Button } from '@mui/material';
|
import { Button } from '@mui/material';
|
||||||
|
import { WakeLock } from '../../Types/WakeLock';
|
||||||
|
|
||||||
const PlayerMenuWrapper = styled.div<{
|
const PlayerMenuWrapper = styled.div<{
|
||||||
rotation: Rotation;
|
rotation: Rotation;
|
||||||
@@ -68,6 +69,7 @@ type PlayerMenuProps = {
|
|||||||
onPlayerChange: (updatedPlayer: Player) => void;
|
onPlayerChange: (updatedPlayer: Player) => void;
|
||||||
setShowPlayerMenu: (showPlayerMenu: boolean) => void;
|
setShowPlayerMenu: (showPlayerMenu: boolean) => void;
|
||||||
resetCurrentGame: () => void;
|
resetCurrentGame: () => void;
|
||||||
|
wakeLock: WakeLock;
|
||||||
};
|
};
|
||||||
|
|
||||||
const PlayerMenu = ({
|
const PlayerMenu = ({
|
||||||
@@ -76,9 +78,9 @@ const PlayerMenu = ({
|
|||||||
onPlayerChange,
|
onPlayerChange,
|
||||||
setShowPlayerMenu,
|
setShowPlayerMenu,
|
||||||
resetCurrentGame,
|
resetCurrentGame,
|
||||||
|
wakeLock,
|
||||||
}: PlayerMenuProps) => {
|
}: PlayerMenuProps) => {
|
||||||
const handleOnClick = () => {
|
const handleOnClick = () => {
|
||||||
console.log('hej');
|
|
||||||
setShowPlayerMenu(false);
|
setShowPlayerMenu(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -101,6 +103,7 @@ const PlayerMenu = ({
|
|||||||
onChange={onPlayerChange}
|
onChange={onPlayerChange}
|
||||||
opponents={opponents}
|
opponents={opponents}
|
||||||
resetCurrentGame={resetCurrentGame}
|
resetCurrentGame={resetCurrentGame}
|
||||||
|
wakeLock={wakeLock}
|
||||||
/>
|
/>
|
||||||
</PlayerMenuWrapper>
|
</PlayerMenuWrapper>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,13 +2,14 @@ import { Button, Checkbox } from '@mui/material';
|
|||||||
import styled, { css } from 'styled-components';
|
import styled, { css } from 'styled-components';
|
||||||
import { Energy, Experience, PartnerTax, Poison } from '../../Icons/generated';
|
import { Energy, Experience, PartnerTax, Poison } from '../../Icons/generated';
|
||||||
import { Player, Rotation } from '../../Types/Player';
|
import { Player, Rotation } from '../../Types/Player';
|
||||||
import { useWakeLock } from 'react-screen-wake-lock';
|
import { WakeLock } from '../../Types/WakeLock';
|
||||||
|
|
||||||
type SettingsProps = {
|
type SettingsProps = {
|
||||||
player: Player;
|
player: Player;
|
||||||
opponents: Player[];
|
opponents: Player[];
|
||||||
onChange: (updatedPlayer: Player) => void;
|
onChange: (updatedPlayer: Player) => void;
|
||||||
resetCurrentGame: () => void;
|
resetCurrentGame: () => void;
|
||||||
|
wakeLock: WakeLock;
|
||||||
};
|
};
|
||||||
|
|
||||||
const SettingsContainer = styled.div<{
|
const SettingsContainer = styled.div<{
|
||||||
@@ -124,9 +125,24 @@ const CheckboxContainer = styled.div<{ rotation: Rotation }>`
|
|||||||
}}
|
}}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => {
|
const Settings = ({
|
||||||
const { released, request, release } = useWakeLock();
|
player,
|
||||||
const handleWakeLock = () => (released === false ? release() : request());
|
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<HTMLInputElement>) => {
|
const handleColorChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
const updatedPlayer = { ...player, color: event.target.value };
|
const updatedPlayer = { ...player, color: event.target.value };
|
||||||
@@ -156,11 +172,7 @@ const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const buttonFontSize =
|
const buttonFontSize = isSide ? '2vmax' : '4vmin';
|
||||||
player.settings.rotation === Rotation.SideFlipped ||
|
|
||||||
player.settings.rotation === Rotation.Side
|
|
||||||
? '1.3vmax'
|
|
||||||
: '2.5vmin';
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SettingsContainer rotation={player.settings.rotation}>
|
<SettingsContainer rotation={player.settings.rotation}>
|
||||||
@@ -271,7 +283,7 @@ const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => {
|
|||||||
</TogglesSection>
|
</TogglesSection>
|
||||||
<ButtonsSections rotation={player.settings.rotation}>
|
<ButtonsSections rotation={player.settings.rotation}>
|
||||||
<Button
|
<Button
|
||||||
variant="outlined"
|
variant="contained"
|
||||||
style={{
|
style={{
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
userSelect: 'none',
|
userSelect: 'none',
|
||||||
@@ -283,7 +295,7 @@ const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => {
|
|||||||
Back to Start
|
Back to Start
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
variant="outlined"
|
variant="contained"
|
||||||
style={{
|
style={{
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
userSelect: 'none',
|
userSelect: 'none',
|
||||||
@@ -295,7 +307,7 @@ const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => {
|
|||||||
Fullscreen
|
Fullscreen
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
variant="outlined"
|
variant="contained"
|
||||||
style={{
|
style={{
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
userSelect: 'none',
|
userSelect: 'none',
|
||||||
@@ -304,7 +316,7 @@ const Settings = ({ player, onChange, resetCurrentGame }: SettingsProps) => {
|
|||||||
}}
|
}}
|
||||||
onClick={handleWakeLock}
|
onClick={handleWakeLock}
|
||||||
>
|
>
|
||||||
{released === false ? 'Release' : 'Request'} nosleep
|
Wake Lock is {wakeLock.active ? 'on' : 'off'}
|
||||||
</Button>
|
</Button>
|
||||||
</ButtonsSections>
|
</ButtonsSections>
|
||||||
</SettingsContainer>
|
</SettingsContainer>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import Counters from '../Counters/Counters';
|
import Counters from '../Counters/Counters';
|
||||||
import { Player } from '../../Types/Player';
|
import { Player } from '../../Types/Player';
|
||||||
|
import { WakeLock } from '../../Types/WakeLock';
|
||||||
|
|
||||||
const MainWrapper = styled.div`
|
const MainWrapper = styled.div`
|
||||||
width: 100vmax;
|
width: 100vmax;
|
||||||
@@ -13,6 +14,7 @@ type PlayProps = {
|
|||||||
onPlayerChange: (updatedPlayer: Player) => void;
|
onPlayerChange: (updatedPlayer: Player) => void;
|
||||||
gridAreas: string;
|
gridAreas: string;
|
||||||
resetCurrentGame: () => void;
|
resetCurrentGame: () => void;
|
||||||
|
wakeLock: WakeLock;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Play = ({
|
const Play = ({
|
||||||
@@ -20,6 +22,7 @@ const Play = ({
|
|||||||
onPlayerChange,
|
onPlayerChange,
|
||||||
gridAreas,
|
gridAreas,
|
||||||
resetCurrentGame,
|
resetCurrentGame,
|
||||||
|
wakeLock,
|
||||||
}: PlayProps) => {
|
}: PlayProps) => {
|
||||||
return (
|
return (
|
||||||
<MainWrapper>
|
<MainWrapper>
|
||||||
@@ -28,6 +31,7 @@ const Play = ({
|
|||||||
onPlayerChange={onPlayerChange}
|
onPlayerChange={onPlayerChange}
|
||||||
gridAreas={gridAreas}
|
gridAreas={gridAreas}
|
||||||
resetCurrentGame={resetCurrentGame}
|
resetCurrentGame={resetCurrentGame}
|
||||||
|
wakeLock={wakeLock}
|
||||||
/>
|
/>
|
||||||
</MainWrapper>
|
</MainWrapper>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { theme } from '../../../Data/theme';
|
|||||||
import { useAnalytics } from '../../../Hooks/useAnalytics';
|
import { useAnalytics } from '../../../Hooks/useAnalytics';
|
||||||
import { Info } from '../../../Icons/generated';
|
import { Info } from '../../../Icons/generated';
|
||||||
import { Player } from '../../../Types/Player';
|
import { Player } from '../../../Types/Player';
|
||||||
|
import { WakeLock } from '../../../Types/WakeLock';
|
||||||
import { InfoModal } from '../../Misc/InfoModal';
|
import { InfoModal } from '../../Misc/InfoModal';
|
||||||
import { SupportMe } from '../../Misc/SupportMe';
|
import { SupportMe } from '../../Misc/SupportMe';
|
||||||
import { H2, Paragraph } from '../../Misc/TextComponents';
|
import { H2, Paragraph } from '../../Misc/TextComponents';
|
||||||
@@ -88,12 +89,14 @@ type StartProps = {
|
|||||||
setInitialGameSettings: (options: InitialSettings) => void;
|
setInitialGameSettings: (options: InitialSettings) => void;
|
||||||
setPlayers: (updatedPlayer: Player[]) => void;
|
setPlayers: (updatedPlayer: Player[]) => void;
|
||||||
initialGameSettings: InitialSettings | null;
|
initialGameSettings: InitialSettings | null;
|
||||||
|
wakeLock: WakeLock;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Start = ({
|
const Start = ({
|
||||||
initialGameSettings,
|
initialGameSettings,
|
||||||
setPlayers,
|
setPlayers,
|
||||||
setInitialGameSettings,
|
setInitialGameSettings,
|
||||||
|
wakeLock,
|
||||||
}: StartProps) => {
|
}: StartProps) => {
|
||||||
const analytics = useAnalytics();
|
const analytics = useAnalytics();
|
||||||
const [openModal, setOpenModal] = useState(false);
|
const [openModal, setOpenModal] = useState(false);
|
||||||
@@ -106,6 +109,13 @@ const Start = ({
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handleWakeLock = () => {
|
||||||
|
if (wakeLock.active) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
wakeLock.request();
|
||||||
|
};
|
||||||
|
|
||||||
const doStartGame = () => {
|
const doStartGame = () => {
|
||||||
if (!initialGameSettings) {
|
if (!initialGameSettings) {
|
||||||
return;
|
return;
|
||||||
@@ -118,6 +128,8 @@ const Start = ({
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleWakeLock();
|
||||||
setInitialGameSettings(initialGameSettings);
|
setInitialGameSettings(initialGameSettings);
|
||||||
setPlayers(createInitialPlayers(initialGameSettings));
|
setPlayers(createInitialPlayers(initialGameSettings));
|
||||||
};
|
};
|
||||||
@@ -180,6 +192,7 @@ const Start = ({
|
|||||||
<SupportMe />
|
<SupportMe />
|
||||||
|
|
||||||
<H2>Life Trinket</H2>
|
<H2>Life Trinket</H2>
|
||||||
|
{wakeLock.active ? 'hej' : 'noo'}
|
||||||
<FormControl focused={false} style={{ width: '80vw' }}>
|
<FormControl focused={false} style={{ width: '80vw' }}>
|
||||||
<FormLabel>Number of Players</FormLabel>
|
<FormLabel>Number of Players</FormLabel>
|
||||||
<Slider
|
<Slider
|
||||||
|
|||||||
9
src/Types/WakeLock.ts
Normal file
9
src/Types/WakeLock.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
type WakeLockType = 'screen';
|
||||||
|
|
||||||
|
export type WakeLock = {
|
||||||
|
isSupported: boolean;
|
||||||
|
request: (type?: WakeLockType) => Promise<void>;
|
||||||
|
active: boolean;
|
||||||
|
release: () => Promise<void>;
|
||||||
|
type: 'screen' | undefined;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user