Spaces:
Sleeping
Sleeping
| /** | |
| * v0 by Vercel. | |
| * @see https://v0.dev/t/OH0xMc8eRYc | |
| * Documentation: https://v0.dev/docs#integrating-generated-code-into-your-nextjs-app | |
| */ | |
| import Button from "./buttons/Button" | |
| import Modal from 'react-modal'; | |
| import { GameId } from "../../convex/aiTown/ids" | |
| import { Id } from "../../convex/_generated/dataModel" | |
| import { ServerGame } from "@/hooks/serverGame" | |
| import { useState } from "react" | |
| import { VoteModal } from "./VoteModal"; | |
| import { useSendInput } from "../hooks/sendInput"; | |
| export default function LLMVote( | |
| { | |
| game, | |
| engineId, | |
| playerId, | |
| }: { | |
| engineId: Id<'engines'>, | |
| game: ServerGame, | |
| playerId: GameId<'players'>, | |
| } | |
| ) { | |
| const [isModalOpen, setIsModalOpen] = useState(false) | |
| const [votes, setVotes] = useState<GameId<'players'>[]>([]); | |
| const players = [...game.world.playersInit.values()].filter( | |
| (player) => player.id !== playerId | |
| ) | |
| const inputVote = useSendInput(engineId, "llmVote"); | |
| const totalLLMs = players.filter((player) => !player.human).length | |
| return ( | |
| <> | |
| <Button onClick={() => setIsModalOpen(true)} className="lg:block"> | |
| Choose LLM | |
| </Button> | |
| <Modal | |
| isOpen={isModalOpen} | |
| onRequestClose={() => setIsModalOpen(false)} | |
| contentLabel="Choose LLM" | |
| ariaHideApp={false} | |
| className="mx-auto bg-brown-800 p-16 game-frame font-body max-w-[1000px]" | |
| style={{ | |
| content: { | |
| position: 'absolute', | |
| top: '50%', | |
| left: '30%', | |
| transform: 'translate(-20%, -50%)', | |
| }, | |
| }} | |
| > | |
| <h2 className="text-2xl font-bold text-center mb-8">Which players are LLMs ? (Choose up to {totalLLMs} players)</h2> | |
| <div className="max-w-[600px] w-full mx-auto"> | |
| <VoteModal compact={false} votes={votes} players={players} onVote={(newVotes) => { | |
| setVotes(newVotes) | |
| inputVote({voter: playerId, votedPlayerIds: newVotes}); | |
| }} engineId={engineId} game={game} playerId={playerId} maxVotes={totalLLMs} /> | |
| </div> | |
| </Modal> | |
| </> | |
| ) | |
| } | |