'use client'; import { Suspense, useEffect, useState } from 'react'; import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import DicePlane from './diceplane'; import { DEFAULT_ASSETS, getAssets } from './asset-storage'; import { useRoom } from '@/lib/rooms/client'; function GamePageInner() { const searchParams = useSearchParams(); const roomId = searchParams.get('roomId'); const [backgroundSrc, setBackgroundSrc] = useState(DEFAULT_ASSETS.background); const [ready, setReady] = useState(false); const [simAmount, setSimAmount] = useState(1000); const { room, error, consumeDice, simulateDonation } = useRoom(roomId); const chzzkOn = Boolean(room?.settings.chzzkEnabled); const manualMode = Boolean(roomId) && room != null && !chzzkOn; useEffect(() => { setBackgroundSrc(getAssets().background); setReady(true); }, []); return (
{ready && ( // eslint-disable-next-line @next/next/no-img-element )}
홈 {roomId && chzzkOn && (

주사위 큐: {room?.diceQueue ?? '…'}

{room?.settings.channelId && (

채널 ID: {room.settings.channelId}

)} {room && (

{room.channelName || room.settings.channelId || '—'} · {room.chatStatus} {` · ${room.settings.cheesePerDice}원/${ room.settings.multiplyByCheese ? `배수${room.settings.maxMultiplier > 0 ? `≤${room.settings.maxMultiplier}` : ''}` : '1회' }`}

)} {error &&

{error}

} {room?.chatError &&

{room.chatError}

} {room?.lastDonations?.[0] && (

최근: {room.lastDonations[0].donatorNickname}{' '} {room.lastDonations[0].payAmount}원 → +{room.lastDonations[0].diceAdded}

)}
setSimAmount(Number(e.target.value) || 1)} className="w-24 rounded border border-white/20 bg-black/50 px-2 py-1 text-white" />
)} {manualMode && (

수동 모드

치지직·채팅 연동 없음 · 주사위는 자유롭게 굴릴 수 있습니다.

{error &&

{error}

}
)}
); } export default function GamePage() { return ( 불러오는 중…
} > ); }