mirror of
https://github.com/Vikeo/LifeTrinket.git
synced 2025-11-17 16:27:59 +00:00
116 lines
3.2 KiB
TypeScript
116 lines
3.2 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { twc } from 'react-twc';
|
|
import { twGridTemplateAreas } from '../../../tailwind.config';
|
|
import { useGlobalSettings } from '../../Hooks/useGlobalSettings';
|
|
import { usePlayers } from '../../Hooks/usePlayers';
|
|
import { Orientation, PreStartMode } from '../../Types/Settings';
|
|
import { Players } from '../Players/Players';
|
|
import { PreStart } from '../PreStartGame/PreStart';
|
|
|
|
const MainWrapper = twc.div`w-[100dvmax] h-[100dvmin] overflow-hidden, setPlayers`;
|
|
|
|
type GridTemplateAreasKeys = keyof typeof twGridTemplateAreas;
|
|
|
|
export type GridLayout = `grid-areas-${GridTemplateAreasKeys}`;
|
|
|
|
export const Play = () => {
|
|
const { players, setPlayers } = usePlayers();
|
|
const { initialGameSettings, playing, settings, preStartCompleted } =
|
|
useGlobalSettings();
|
|
|
|
let gridLayout: GridLayout;
|
|
switch (players.length) {
|
|
case 1:
|
|
if (initialGameSettings?.orientation === Orientation.Portrait) {
|
|
gridLayout = 'grid-areas-onePlayerPortrait';
|
|
}
|
|
gridLayout = 'grid-areas-onePlayerLandscape';
|
|
break;
|
|
case 2:
|
|
switch (initialGameSettings?.orientation) {
|
|
case Orientation.Portrait:
|
|
gridLayout = 'grid-areas-twoPlayersOppositePortrait';
|
|
break;
|
|
default:
|
|
case Orientation.Landscape:
|
|
gridLayout = 'grid-areas-twoPlayersSameSideLandscape';
|
|
break;
|
|
case Orientation.OppositeLandscape:
|
|
gridLayout = 'grid-areas-twoPlayersOppositeLandscape';
|
|
break;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (initialGameSettings?.orientation === Orientation.Portrait) {
|
|
gridLayout = 'grid-areas-threePlayersSide';
|
|
break;
|
|
}
|
|
gridLayout = 'grid-areas-threePlayers';
|
|
break;
|
|
default:
|
|
case 4:
|
|
if (initialGameSettings?.orientation === Orientation.Portrait) {
|
|
gridLayout = 'grid-areas-fourPlayerPortrait';
|
|
break;
|
|
}
|
|
gridLayout = 'grid-areas-fourPlayer';
|
|
break;
|
|
case 5:
|
|
if (initialGameSettings?.orientation === Orientation.Portrait) {
|
|
gridLayout = 'grid-areas-fivePlayersSide';
|
|
break;
|
|
}
|
|
gridLayout = 'grid-areas-fivePlayers';
|
|
break;
|
|
case 6:
|
|
if (initialGameSettings?.orientation === Orientation.Portrait) {
|
|
gridLayout = 'grid-areas-sixPlayersSide';
|
|
break;
|
|
}
|
|
gridLayout = 'grid-areas-sixPlayers';
|
|
break;
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (settings.preStartMode !== PreStartMode.None) {
|
|
return;
|
|
}
|
|
|
|
const randomIndex = Math.floor(Math.random() * players.length);
|
|
|
|
setPlayers(
|
|
players.map((p) =>
|
|
p.index === randomIndex
|
|
? {
|
|
...p,
|
|
isStartingPlayer: true,
|
|
}
|
|
: {
|
|
...p,
|
|
isStartingPlayer: false,
|
|
}
|
|
)
|
|
);
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, []);
|
|
|
|
if (
|
|
!preStartCompleted &&
|
|
settings.preStartMode !== PreStartMode.None &&
|
|
!playing &&
|
|
settings.showStartingPlayer
|
|
) {
|
|
return (
|
|
<MainWrapper>
|
|
<PreStart gridLayout={gridLayout} />
|
|
</MainWrapper>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<MainWrapper>
|
|
<Players gridLayout={gridLayout} />
|
|
</MainWrapper>
|
|
);
|
|
};
|