]> git.cworth.org Git - lmno.games/blobdiff - empathy/empathy.jsx
empathy: Track the player-exit event
[lmno.games] / empathy / empathy.jsx
index e67bbc87afbc91941c7460bb52aeb865aeac0d5b..20612e35336576b229c4a8f9fccc7e7bd1179e97 100644 (file)
@@ -45,6 +45,12 @@ events.addEventListener("player-enter", event => {
   window.game.set_other_player_info(info);
 });
 
+events.addEventListener("player-exit", event => {
+  const info = JSON.parse(event.data);
+
+  window.game.remove_player(info);
+});
+
 events.addEventListener("player-update", event => {
   const info = JSON.parse(event.data);
 
@@ -205,18 +211,23 @@ const PlayerInfo = React.memo(props => {
   if (! props.player.id)
     return null;
 
+  const all_players = [props.player, ...props.other_players];
+
+  const sorted_players = all_players.sort((a,b) => {
+    return b.score - a.score;
+  });
+
+  const names_and_scores = sorted_players.map(player => {
+    if (player.score)
+      return `${player.name} (${player.score})`;
+    else
+      return player.name;
+  }).join(', ');
+
   return (
     <div className="player-info">
       <span className="players-header">Players: </span>
-      {props.player.name}
-      {props.player.score > 0 ? ` (${props.player.score})` : ""}
-      {props.other_players.map(other => (
-        <span key={other.id}>
-          {", "}
-          {other.name}
-          {other.score > 0 ? ` (${other.score})` : ""}
-        </span>
-      ))}
+      <span>{names_and_scores}</span>
     </div>
   );
 });
@@ -822,6 +833,12 @@ class Game extends React.PureComponent {
     });
   }
 
+  remove_player(info) {
+    this.setState({
+      other_players: this.state.other_players.filter(o => o.id !== info.id)
+    });
+  }
+
   reset_game_state() {
     this.setState({
       prompts: [],