From ca261367bfa9dbb281a09547548c6695df91bb86 Mon Sep 17 00:00:00 2001 From: Carl Worth 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.43.0