71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
"use client";
|
|
|
|
import { useState } from "react";
|
|
import { useSoloGame } from "../lib/useSoloGame";
|
|
import { useMultiGame } from "../lib/useMultiGame";
|
|
import { useGameEffects } from "../lib/useGameEffects";
|
|
import { useGameHandlers } from "../lib/useGameHandlers";
|
|
import { ScreenRouter } from "./components/ScreenRouter";
|
|
import type { Screen } from "../lib/types";
|
|
|
|
export default function WikiRush() {
|
|
const [screen, setScreen] = useState<Screen>("home");
|
|
const [playerName, setPlayerName] = useState("");
|
|
const [joinCode, setJoinCode] = useState("");
|
|
const [maxPlayers, setMaxPlayers] = useState(16);
|
|
const [totalRounds, setTotalRounds] = useState(3);
|
|
const [gameMode, setGameMode] = useState<"race" | "all_finish">("race");
|
|
const [error, setError] = useState<string | null>(null);
|
|
const [loading, setLoading] = useState(false);
|
|
const [showAuth, setShowAuth] = useState(false);
|
|
|
|
const solo = useSoloGame();
|
|
const multi = useMultiGame();
|
|
|
|
const { session } = useGameEffects({
|
|
solo,
|
|
multi,
|
|
screen,
|
|
setScreen,
|
|
setPlayerName,
|
|
});
|
|
const handlers = useGameHandlers({
|
|
solo,
|
|
multi,
|
|
playerName,
|
|
joinCode,
|
|
maxPlayers,
|
|
totalRounds,
|
|
gameMode,
|
|
setScreen,
|
|
setError,
|
|
setLoading,
|
|
});
|
|
|
|
return (
|
|
<ScreenRouter
|
|
screen={screen}
|
|
setScreen={setScreen}
|
|
session={session}
|
|
solo={solo}
|
|
multi={multi}
|
|
handlers={handlers}
|
|
playerName={playerName}
|
|
setPlayerName={setPlayerName}
|
|
joinCode={joinCode}
|
|
setJoinCode={setJoinCode}
|
|
maxPlayers={maxPlayers}
|
|
setMaxPlayers={setMaxPlayers}
|
|
totalRounds={totalRounds}
|
|
setTotalRounds={setTotalRounds}
|
|
gameMode={gameMode}
|
|
setGameMode={setGameMode}
|
|
error={error}
|
|
setError={setError}
|
|
loading={loading}
|
|
showAuth={showAuth}
|
|
setShowAuth={setShowAuth}
|
|
/>
|
|
);
|
|
}
|