From ca261367bfa9dbb281a09547548c6695df91bb86 Mon Sep 17 00:00:00 2001
From: Carl Worth <cworth@cworth.org>
Date: Sat, 27 Jun 2020 09:25:20 -0700
Subject: [PATCH] empathy: Don't count inactive players to advance from
 answering phase

This commit implements the desired behavior described in the previous
commit message. The test case that was added in that commit now
passes, (as does the entire test suite).

In the implementation here, we need a count of all player that have
the active property set to true. Instead of looping over the array and
counting this, we have the Game class track this count as players are
added and removed.
---
 empathy.js | 2 +-
 game.js    | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/empathy.js b/empathy.js
index bc846c1..56ac53f 100644
--- a/empathy.js
+++ b/empathy.js
@@ -577,7 +577,7 @@ router.post('/answer/:prompt_id([0-9]+)', (request, response) => {
 
   /* If every registered player has answered, then there's no need to
    * wait for anything else. */
-  if (game.state.players_answered.length >= game.players.length)
+  if (game.state.players_answered.length >= game.active_players)
     game.perform_judging();
 });
 
diff --git a/game.js b/game.js
index 7ca1507..8ea26e3 100644
--- a/game.js
+++ b/game.js
@@ -59,6 +59,7 @@ class Game {
     this.id = id;
     this.players = [];
     this.players_by_session = {};
+    this.active_players = 0;
     this.next_player_id = 1;
     this.teams = [];
     this.state = {
@@ -192,6 +193,7 @@ class Game {
 
     this.players.push(player);
     this.players_by_session[session.id] = player;
+    this.active_players++;
     this.next_player_id++;
 
     /* After adding the player to the list, and if we are already past
@@ -216,6 +218,7 @@ class Game {
     const remaining = player.remove_connection(connection);
     if (remaining === 0) {
       player.active = false;
+      this.active_players--;
       const player_data = JSON.stringify({ id: player.id });
       this.broadcast_event("player-exit", player_data);
     }
-- 
2.45.2