]> git.cworth.org Git - lmno-server/commitdiff
empathy: Don't count inactive players to advance from answering phase
authorCarl Worth <cworth@cworth.org>
Sat, 27 Jun 2020 16:25:20 +0000 (09:25 -0700)
committerCarl Worth <cworth@cworth.org>
Sat, 27 Jun 2020 16:26:15 +0000 (09:26 -0700)
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
game.js

index bc846c19600a13b9c03e8cd65b9673f517c7109e..56ac53f9c32f95d5b6cbefdebb21d69ed68918e0 100644 (file)
@@ -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 7ca150735269d0c0b6c4bc0681e70302d4a41813..8ea26e34084d140a84d51454cfdaf2c58846bba6 100644 (file)
--- 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);
     }