Live location tracking and playback for the game "manhunt"
at ben/frontend 45 lines 1.2 kB view raw
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}