From eb6749dc0ba1e12330d958091146dccc3a6b6877 Mon Sep 17 00:00:00 2001 From: Vishesh 'ironeagle' Bangotra Date: Wed, 3 Dec 2025 22:01:44 +0530 Subject: [PATCH] feat(ui): add dynamic game board selection and hide board until match join Added renderGameBoard() resolver for dynamic board rendering Board now hidden before match join Game auto-selected based on metadata.game from Player matchmaking Updated header to use dynamic game name Removed hardcoded Battleship board --- src/App.tsx | 49 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 04ba19e..ff855ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,6 +5,7 @@ import Player from "./Player"; import { PlayerModel } from "./models/player"; import TicTacToeBoard from "./games/tictactoe/TicTacToeBoard"; +import BattleShipBoard from "./games/battleship/BattleShipBoard"; export default function App() { // setting up a 2D game boards @@ -13,9 +14,44 @@ export default function App() { const [winner, setWinner] = useState(null); const [gameOver, setGameOver] = useState(null); const [players, setPlayers] = useState([]); + const [metadata, setMetadata] = useState>({}); const { sendMatchData, onMatchData, matchId, session } = useNakama(); + function renderGameBoard() { + if (!matchId || !metadata?.game) return null; + + switch (metadata.game) { + case "tictactoe": + return ( + + ); + + case "battleship": + return ( + + ); + + default: + return
Unknown game: {metadata.game}
; + } + } // ------------------------------------------ // MATCH DATA CALLBACK (from Player component) // ------------------------------------------ @@ -39,6 +75,7 @@ export default function App() { setWinner(null); } setPlayers(state.players || []); + setMetadata(state.metadata || {}); } } @@ -86,7 +123,7 @@ export default function App() { letterSpacing: "1px", }} > - Tic Tac Toe + Games {/* ---------------- MAIN CONTENT (scrolls) ---------------- */} @@ -113,15 +150,7 @@ export default function App() { minWidth: "300px", }} > - + {renderGameBoard()}