import React, { useEffect, useState } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { useNakama } from "./providers/NakamaProvider"; export default function Player({ onMatchDataCallback, }: { onMatchDataCallback: (msg: any) => void; }) { const { session, matchId, loginOrRegister, logout, onMatchData, joinMatchmaker, exitMatchmaker, } = useNakama(); const [username, setUsername] = useState( localStorage.getItem("username") ?? "" ); const [selectedGame, setSelectedGame] = useState("tictactoe"); const [selectedMode, setSelectedMode] = useState("classic"); const [isQueueing, setIsQueueing] = useState(false); const isRegistered = localStorage.getItem("registered") === "yes"; // ------------------------------------------ // CONNECT // ------------------------------------------ async function handleConnect() { await loginOrRegister(username); // Match data listener onMatchData(onMatchDataCallback); } // ------------------------------------------ // MATCHMAKING // ------------------------------------------ async function startQueue( selectedGame: string, selectedMode: string ) { setIsQueueing(true); const gameMetadata = { game: selectedGame, mode: selectedMode, } try { const ticket = await joinMatchmaker(gameMetadata); console.log("Queued:", ticket); } catch (err) { console.error("Matchmaking failed:", err); setIsQueueing(false); } } async function cancelQueue( selectedGame: string, selectedMode: string ) { setIsQueueing(false); const gameMetadata = { game: selectedGame, mode: selectedMode, } await exitMatchmaker(gameMetadata) } useEffect(() => { handleConnect(); }, []); return (