Live location tracking and playback for the game "manhunt"
1import React, { useState } from "react";
2import { AppScreen } from "@/bindings";
3import { useTauriEvent } from "@/lib/hooks";
4import SetupScreen from "./SetupScreen";
5import MenuScreen from "./MenuScreen";
6import LobbyScreen from "./LobbyScreen";
7import GameScreen from "./GameScreen";
8import { flushSync } from "react-dom";
9
10function ScreenRouter({ screen }: { screen: AppScreen }) {
11 switch (screen) {
12 case "Setup":
13 return <SetupScreen />;
14 case "Menu":
15 return <MenuScreen />;
16 case "Lobby":
17 return <LobbyScreen />;
18 case "Game":
19 return <GameScreen />;
20 default:
21 return <p>???</p>;
22 }
23}
24
25export default function App({ initialScreen }: { initialScreen: AppScreen }) {
26 const [currentScreen, setScreen] = useState(initialScreen);
27
28 useTauriEvent("changeScreen", (newScreen) => {
29 const update = () => {
30 setScreen(newScreen);
31 };
32
33 if (document.startViewTransition) {
34 document.startViewTransition(() => flushSync(update));
35 } else {
36 update();
37 }
38 });
39
40 return (
41 <>
42 <ScreenRouter screen={currentScreen} />
43 </>
44 );
45}