Spaces:
Sleeping
Sleeping
| import { ServerGame } from "@/hooks/serverGame"; | |
| import { Id } from "../../convex/_generated/dataModel"; | |
| import { GameId } from "../../convex/aiTown/ids"; | |
| import { canVote } from "./Game"; | |
| import { useSendInput } from "../hooks/sendInput"; | |
| import { VoteModal } from "./VoteModal"; | |
| import { useState } from "react"; | |
| const getSelectablePlayers = (game: ServerGame, playerId: GameId<'players'>, players: Player[]) => { | |
| if (game.world.gameCycle.cycleState === "WerewolfVoting") { | |
| return players.filter( | |
| (player) => (player.id !== playerId) | |
| ); | |
| } | |
| else if (game.world.gameCycle.cycleState === "PlayerKillVoting") { | |
| return players.filter( | |
| (player) => (player.id !== playerId) && game.playerDescriptions.get(player.id)?.type === 'villager' | |
| ); | |
| } | |
| return [] | |
| } | |
| export default function GameVote({ | |
| engineId, | |
| game, | |
| playerId, | |
| }: { | |
| engineId: Id<'engines'>, | |
| game: ServerGame, | |
| playerId: GameId<'players'>, | |
| }) { | |
| const inputVote = useSendInput(engineId, "gameVote"); | |
| const [votes, setVotes] = useState<GameId<'players'>[]>([]); | |
| const players = getSelectablePlayers(game, playerId, [...game.world.players.values()]) | |
| return ( | |
| <VoteModal | |
| compact={true} | |
| game={game} | |
| engineId={engineId} | |
| playerId={playerId} | |
| maxVotes={1} | |
| votes={votes} | |
| players={players} | |
| onVote={(newVotes) => { | |
| setVotes(newVotes); | |
| inputVote({voter: playerId, votedPlayerIds: newVotes}); | |
| }} | |
| /> | |
| ); | |
| } | |