X-Git-Url: https://git.cworth.org/git?p=lmno.games;a=blobdiff_plain;f=empathy%2Fempathy.jsx;h=1a9ad80ceb7298d0c7e341ccddce680b1a80870d;hp=dee5a677ff47da93c0307b84af7cec0be8399db6;hb=3dce1ecbdc99e7afbcb0338e585b4e587e0c6cd2;hpb=2f53ad28854b9d68fcbd19ca02002c5883234638;ds=sidebyside
diff --git a/empathy/empathy.jsx b/empathy/empathy.jsx
index dee5a67..1a9ad80 100644
--- a/empathy/empathy.jsx
+++ b/empathy/empathy.jsx
@@ -57,6 +57,8 @@ events.addEventListener("player-update", event => {
events.addEventListener("game-state", event => {
const state = JSON.parse(event.data);
+ window.game.reset_game_state();
+
window.game.set_prompts(state.prompts);
window.game.set_active_prompt(state.active_prompt);
@@ -78,10 +80,28 @@ events.addEventListener("start", event => {
window.game.set_active_prompt(prompt);
});
-events.addEventListener("answered", event => {
- const players_answered = JSON.parse(event.data);
+events.addEventListener("player-answered", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_answered(player);
+});
+
+events.addEventListener("player-answering", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_answering(player);
+});
+
+events.addEventListener("vote-end-answers", event => {
+ const player = JSON.parse(event.data);
- window.game.set_players_answered(players_answered);
+ window.game.set_player_vote_end_answers(player);
+});
+
+events.addEventListener("unvote-end-answers", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_unvote_end_answers(player);
});
events.addEventListener("ambiguities", event => {
@@ -90,10 +110,28 @@ events.addEventListener("ambiguities", event => {
window.game.set_ambiguities(ambiguities);
});
-events.addEventListener("judged", event => {
- const players_judged = JSON.parse(event.data);
+events.addEventListener("player-judged", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_judged(player);
+});
+
+events.addEventListener("player-judging", event => {
+ const player = JSON.parse(event.data);
- window.game.set_players_judged(players_judged);
+ window.game.set_player_judging(player);
+});
+
+events.addEventListener("vote-end-judging", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_vote_end_judging(player);
+});
+
+events.addEventListener("unvote-end-judging", event => {
+ const player = JSON.parse(event.data);
+
+ window.game.set_player_unvote_end_judging(player);
});
events.addEventListener("scores", event => {
@@ -225,7 +263,6 @@ class CategoryRequest extends React.PureComponent {
if (response.status === 200) {
const result = await response.json();
- console.log(result);
if (! result.valid) {
add_message("danger", result.message);
return;
@@ -436,11 +473,46 @@ class Ambiguities extends React.PureComponent {
if (this.state.submitted)
return (
-
{this.props.players_judged}/
- {this.props.players_total} players have responded
+
Submission received
- Please wait for the rest of the players to complete judging.
+ The following players have completed judging:
+ {[...this.props.players_judged].join(', ')}
+
+ Still waiting for the following players:
+
+
+ {Object.entries(this.props.players_judging).map(player => {
+ return (
+
+ {player}
+ {this.props.players_judging[player] ?
+ : null }
+
+ );
+ })}
+
+
fetch_post_json(`end-judging/${this.props.prompt.id}`) }
+ >
+ Move On
+
+ {[...this.props.votes].map(v => {
+ return (
+
+ {v}
+
+ );
+ })}
+
+
+
);
@@ -535,11 +607,46 @@ class ActivePrompt extends React.PureComponent {
if (this.state.submitted)
return (
-
{this.props.players_answered}/
- {this.props.players_total} players have responded
+
Submission received
- Please wait for the rest of the players to submit their answers.
+ The following players have submitted their answers:
+ {[...this.props.players_answered].join(', ')}
+
+ Still waiting for the following players:
+
+
+ {Object.entries(this.props.players_answering).map(player => {
+ return (
+
+ {player}
+ {this.props.players_answering[player] ?
+ : null }
+
+ );
+ })}
+
+
fetch_post_json(`end-answers/${this.props.prompt.id}`) }
+ >
+ Move On
+
+ {[...this.props.votes].map(v => {
+ return (
+
+ {v}
+
+ );
+ })}
+
+
+
);
@@ -592,9 +699,14 @@ class Game extends React.PureComponent {
other_players: [],
prompts: [],
active_prompt: null,
- players_answered: 0,
+ players_answered: new Set(),
+ players_answering: {},
+ end_answers_votes: new Set(),
ambiguities: null,
- players_judged: 0
+ players_judged: new Set(),
+ players_judging: {},
+ end_judging_votes: new Set(),
+ scores: null
};
}
@@ -623,6 +735,21 @@ class Game extends React.PureComponent {
});
}
+ reset_game_state() {
+ this.setState({
+ prompts: [],
+ active_prompt: null,
+ players_answered: new Set(),
+ players_answering: {},
+ end_answers_votes: new Set(),
+ ambiguities: null,
+ players_judged: new Set(),
+ players_judging: {},
+ end_judging_votes: new Set(),
+ scores: null
+ });
+ }
+
set_prompts(prompts) {
this.setState({
prompts: prompts
@@ -648,9 +775,34 @@ class Game extends React.PureComponent {
});
}
- set_players_answered(players_answered) {
+ set_player_answered(player) {
+ const new_players_answering = {...this.state.players_answering};
+ delete new_players_answering[player];
+
this.setState({
- players_answered: players_answered
+ players_answered: new Set([...this.state.players_answered, player]),
+ players_answering: new_players_answering
+ });
+ }
+
+ set_player_answering(player) {
+ this.setState({
+ players_answering: {
+ ...this.state.players_answering,
+ [player]: {active: true}
+ }
+ });
+ }
+
+ set_player_vote_end_answers(player) {
+ this.setState({
+ end_answers_votes: new Set([...this.state.end_answers_votes, player])
+ });
+ }
+
+ set_player_unvote_end_answers(player) {
+ this.setState({
+ end_answers_votes: new Set([...this.state.end_answers_votes].filter(p => p !== player))
});
}
@@ -660,9 +812,35 @@ class Game extends React.PureComponent {
});
}
- set_players_judged(players_judged) {
+ set_player_judged(player) {
+ const new_players_judging = {...this.state.players_judging};
+ delete new_players_judging[player];
+
+ this.setState({
+ players_judged: new Set([...this.state.players_judged, player]),
+ players_judging: new_players_judging
+ });
+ }
+
+ set_player_judging(player) {
+ this.setState({
+ players_judging: {
+ ...this.state.players_judging,
+ [player]: {active: true}
+ }
+ });
+ }
+
+
+ set_player_vote_end_judging(player) {
+ this.setState({
+ end_judging_votes: new Set([...this.state.end_judging_votes, player])
+ });
+ }
+
+ set_player_unvote_end_judging(player) {
this.setState({
- players_judged: players_judged
+ end_judging_votes: new Set([...this.state.end_judging_votes].filter(p => p !== player))
});
}
@@ -714,7 +892,8 @@ class Game extends React.PureComponent {
prompt={state.active_prompt}
words={state.ambiguities}
players_judged={state.players_judged}
- players_total={players_total}
+ players_judging={state.players_judging}
+ votes={state.end_judging_votes}
/>;
}
@@ -722,7 +901,8 @@ class Game extends React.PureComponent {
return ;
}