That is, as long as the answering phase has been going on for a "while".
This avoids an awkward pause when all active players are done
answering, everybody wants to move on, but the "Move On" button hasn't
appeared yet, (because clients haven't been told yet that the
answering phase is idle).
};
this.answers = [];
this.answering_idle_timer = 0;
};
this.answers = [];
this.answering_idle_timer = 0;
+ this.answering_start_time_ms = 0;
this.next_prompt_id = 1;
this.equivalencies = {};
}
this.next_prompt_id = 1;
this.equivalencies = {};
}
this.state.scores = null;
this.answers = [];
this.state.scores = null;
this.answers = [];
+ if (this.answering_idle_timer) {
+ clearTimeout(this.answering_idle_timer);
+ }
+ this.answering_idle_timer = 0;
+ this.answering_start_time_ms = 0;
this.equivalencies = {};
this.broadcast_event_object('game-state', this.state);
this.equivalencies = {};
this.broadcast_event_object('game-state', this.state);
/* And notify all players that this player has answered. */
this.broadcast_event_object('player-answered', player.name);
/* And notify all players that this player has answered. */
this.broadcast_event_object('player-answered', player.name);
+ /* If no players are left in the answering list then we don't need
+ * to wait for the answering_idle_timer to fire, because a person
+ * who isn't there obviously can't be typing. So we can broadcast
+ * the idle event right away. Note that we do this only if the
+ * answering phase has been going for a while to avoid the case of
+ * the first player being super fast and emptying the
+ * players_answering list before anyone else even got in.
+ */
+ if (this.state.players_answering.size === 0 &&
+ ((Date.now() - this.answering_start_time_ms) / 1000) > 30)
+ {
+ this.broadcast_event_object('answering-idle', true);
+ }
+
return { valid: true };
}
return { valid: true };
}
+ if (this.answering_start_time_ms === 0)
+ this.answering_start_time_ms = Date.now();
+
/* Notify all players that this player is actively answering. */
this.state.players_answering.add(player.name);
this.broadcast_event_object('player-answering', player.name);
/* Notify all players that this player is actively answering. */
this.state.players_answering.add(player.name);
this.broadcast_event_object('player-answering', player.name);