import { useRef, useState } from 'react'; import PixiGame from './PixiGame.tsx'; import { useElementSize } from 'usehooks-ts'; import { Stage } from '@pixi/react'; import { ConvexProvider, useConvex, useQuery } from 'convex/react'; import PlayerDetails from './PlayerDetails.tsx'; import { api } from '../../convex/_generated/api'; import { useWorldHeartbeat } from '../hooks/useWorldHeartbeat.ts'; import { useHistoricalTime } from '../hooks/useHistoricalTime.ts'; import { DebugTimeManager } from './DebugTimeManager.tsx'; import { GameId } from '../../convex/aiTown/ids.ts'; import { useServerGame } from '../hooks/serverGame.ts'; export const SHOW_DEBUG_UI = !!import.meta.env.VITE_SHOW_DEBUG_UI; export default function Game() { const convex = useConvex(); const [selectedElement, setSelectedElement] = useState<{ kind: 'player'; id: GameId<'players'>; }>(); const [gameWrapperRef, { width, height }] = useElementSize(); const worldStatus = useQuery(api.world.defaultWorldStatus); const worldId = worldStatus?.worldId; const engineId = worldStatus?.engineId; const game = useServerGame(worldId); // Send a periodic heartbeat to our world to keep it alive. useWorldHeartbeat(); const worldState = useQuery(api.world.worldState, worldId ? { worldId } : 'skip'); const { historicalTime, timeManager } = useHistoricalTime(worldState?.engine); const scrollViewRef = useRef(null); if (!worldId || !engineId || !game) { return null; } return ( <> {SHOW_DEBUG_UI && }
{/* Game area */}
{/* Re-propagate context because contexts are not shared between renderers. https://github.com/michalochman/react-pixi-fiber/issues/145#issuecomment-531549215 */}
{/* Right column area */}
); }