window.game.set_end_judging(state.end_judging);
window.game.set_scores(state.scores);
+
+ window.game.set_new_game_votes(state.new_game_votes);
+
+ window.game.state_ready();
});
events.addEventListener("prompt", event => {
window.game.set_scores(scores);
});
+events.addEventListener("vote-new-game", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_vote_new_game(player);
+});
+
+events.addEventListener("unvote-new-game", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_unvote_new_game(player);
+});
+
/*********************************************************
* Game and supporting classes *
*********************************************************/
);
}
- if (this.props.players_judged.has(this.props.player.name)) {
- return (
- <div className="please-wait">
- <h2>Submission received</h2>
+ let still_waiting = null;
+ const judging_players = Object.keys(this.props.players_judging);
+ if (judging_players.length) {
+ still_waiting = (
+ <div>
<p>
- The following players have completed judging:
- {[...this.props.players_judged].join(', ')}
- </p>
- <p>
- Still waiting for the following players:
+ Still waiting for the following player
+ {judging_players.length > 1 ? 's' : '' }
+ :
</p>
<ul>
- {Object.keys(this.props.players_judging).map(player => {
+ {judging_players.map(player => {
return (
<li
key={player}
);
})}
</ul>
+ </div>
+ );
+ }
+
+ if (this.props.players_judged.has(this.props.player.name)) {
+ return (
+ <div className="please-wait">
+ <h2>Submission received</h2>
+ <p>
+ The following players have completed judging:{' '}
+ {[...this.props.players_judged].join(', ')}
+ </p>
+ {still_waiting}
{move_on_button}
</div>
what goes around comes around, so it's best to be generous when
judging.
</p>
+ <h2>{this.props.prompt.prompt}</h2>
{this.state.word_sets.map(set => {
return (
<div
);
}
- if (this.props.players_answered.has(this.props.player.name)) {
- return (
- <div className="please-wait">
- <h2>Submission received</h2>
+ let still_waiting = null;
+ const answering_players = Object.keys(this.props.players_answering);;
+ if (answering_players.length) {
+ still_waiting = (
+ <div>
<p>
- The following players have submitted their answers:
- {[...this.props.players_answered].join(', ')}
- </p>
- <p>
- Still waiting for the following players:
+ Still waiting for the following player
+ {answering_players.length > 1 ? 's' : ''}
+ :
</p>
<ul>
- {Object.keys(this.props.players_answering).map(player => {
+ {answering_players.map(player => {
return (
<li
key={player}
);
})}
</ul>
+ </div>
+ );
+ }
+
+ if (this.props.players_answered.has(this.props.player.name)) {
+ return (
+ <div className="please-wait">
+ <h2>Submission received</h2>
+ <p>
+ The following players have submitted their answers:{' '}
+ {[...this.props.players_answered].join(', ')}
+ </p>
+ {still_waiting}
{move_on_button}
</div>
<p>
Remember, you're trying to match your answers with
what the other players submit.
- Give {this.props.prompt.items} answers for the following prompt:
+ Give {this.props.prompt.items} answer
+ {this.props.prompt.items > 1 ? 's' : ''} for the following prompt:
</p>
<h2>{this.props.prompt.prompt}</h2>
<form onSubmit={this.handle_submit}>
players_judging: {},
judging_idle: false,
end_judging_votes: new Set(),
- scores: null
+ scores: null,
+ new_game_votes: new Set(),
+ ready: false
};
}
players_judging: {},
judging_idle: false,
end_judging_votes: new Set(),
- scores: null
+ scores: null,
+ new_game_votes: new Set(),
+ ready: false
});
}
}
set_judging_idle(value) {
- console.log("Setting judging idle to " + value);
this.setState({
judging_idle: value
});
});
}
+ set_new_game_votes(players) {
+ this.setState({
+ new_game_votes: new Set(players)
+ });
+ }
+
+ set_player_vote_new_game(player) {
+ this.setState({
+ new_game_votes: new Set([...this.state.new_game_votes, player])
+ });
+ }
+
+ set_player_unvote_new_game(player) {
+ this.setState({
+ new_game_votes: new Set([...this.state.new_game_votes].filter(p => p !== player))
+ });
+ }
+
+ state_ready() {
+ this.setState({
+ ready: true
+ });
+ }
+
render() {
const state = this.state;
const players_total = 1 + state.other_players.length;
if (state.scores) {
return (
<div className="scores">
+ <h2>{state.active_prompt.prompt}</h2>
<h2>Scores</h2>
<ul>
{state.scores.scores.map(score => {
return (
<li key={score.player}>
- {score.player}: {score.score}
+ {score.players.join("/")}: {score.score}
</li>
);
})}
{state.scores.words.map(word => {
return (
<li key={word.word}>
- {`${word.word}: ${word.players.join(', ')}`}
+ {word.word} ({word.players.length}): {word.players.join(', ')}
</li>
);
})}
</ul>
<button
- className="new-game"
- onClick={() => fetch_post_json('reset') }
+ className="vote-button"
+ onClick={() => fetch_post_json(`new-game/${state.active_prompt.id}`) }
>
New Game
+ <div className="vote-choices">
+ {[...state.new_game_votes].map(v => {
+ return (
+ <div
+ key={v}
+ className="vote-choice"
+ >
+ {v}
+ </div>
+ );
+ })}
+ </div>
</button>
</div>
);
/>;
}
+ if (! state.ready)
+ return null;
+
return [
<GameInfo
key="game-info"