import { useGame } from '../useGame' import type { Session } from '../types' import { Lobby } from './Lobby' import { ShopPhase } from './ShopPhase' import { ArrangePhase } from './ArrangePhase' import { BattlePhase } from './BattlePhase' import { GameOver } from './GameOver' import { DebugPanel } from './DebugPanel' import { EventLog } from './EventLog' // Table connects to the game and routes to the right phase screen. export function Table({ session, onLeave }: { session: Session; onLeave: () => void }) { const { view, error, connected, send } = useGame(session) if (!view) { return (
{connected ? 'Loading game…' : 'Connecting…'}
) } const you = view.players[view.youSeat] const opponents = view.players.filter((p) => p.seat !== view.youSeat) return (
🐾 SAP
{view.phase !== 'gameover' && (
Round {view.round} / {view.maxRounds}
)}
{view.players.map((p) => (
{p.name} 🏆 {p.trophies} {(view.phase === 'shop' || view.phase === 'cleanup') && ( 🪙 {p.coins} )}
))}
{view.code}
{view.phase === 'lobby' && } {(view.phase === 'shop' || view.phase === 'cleanup') && ( )} {view.phase === 'arrange' && } {view.phase === 'battle' && } {view.phase === 'gameover' && }
{view.phase !== 'lobby' && ( )}
{opponents.some((p) => !p.connected) && view.phase !== 'lobby' && (
An opponent is disconnected…
)} {error &&
{error}
} {view.debug && ( )}
) }