]> git.cworth.org Git - lmno-server/blobdiff - empathy.js
Accumulate running scores for a multi-round game
[lmno-server] / empathy.js
index 3ec4a7b74d3dda75f237e1a0a944b7edcc5010dd..f9bf7410d4da8e77f3208b6608005dc770dabbbd 100644 (file)
@@ -7,15 +7,28 @@ class Empathy extends Game {
     this.state = {
       prompts: [],
       active_prompt: null,
-      players_answered: 0
+      players_answered: 0,
+      scores: null
     };
     this.answers = [];
     this.next_prompt_id = 1;
   }
 
   reset() {
+    /* Now that we're done with the active prompt, we remove it from
+     * the list of prompts and also remove any prompts that received
+     * no votes. This keeps the list of prompts clean.
+     */
+    const active_id = this.state.active_prompt.id;
+    this.state.prompts =
+      this.state.prompts.filter(
+        p => p.id !== active_id && p.votes.length > 0
+      );
+
     this.state.active_prompt = null;
     this.state.players_answered = 0;
+    this.state.scores = null;
+
     this.answers = [];
 
     this.broadcast_event_object('game-state', this.state);
@@ -112,6 +125,16 @@ class Empathy extends Game {
         player: a.player.name,
         score: score
       });
+      /* Now that we've computed the score for a player for this
+       * round, also accumulate that score into the players runnning
+       * total. */
+      if (a.player.score)
+        a.player.score += score;
+      else
+        a.player.score = score;
+
+      /* And broadcast that new score out. */
+      this.broadcast_event('player-update', a.player.info_json());
     }
 
     scores.sort((a,b) => {
@@ -126,11 +149,14 @@ class Empathy extends Game {
       return b.players.length - a.players.length;
     });
 
+    /* Put this round's scores into the game state object so it will
+     * be sent to any new clients that join. */
     this.state.scores = {
       scores: scores,
       words: word_submitters_arr
     };
 
+    /* And broadcast the scores to all connected clients. */
     this.broadcast_event_object('scores', this.state.scores);
   }
 }