]> git.cworth.org Git - empires-server/blobdiff - game.js
Switch team property from being a string to being an object
[empires-server] / game.js
diff --git a/game.js b/game.js
index 34a0d13b4168868a4ed6e55d275c2139b0774dbc..b43a75c42a36fd69212b75a29aa9f140ea153d1f 100644 (file)
--- a/game.js
+++ b/game.js
@@ -1,3 +1,5 @@
+const no_team = { name: "" };
+
 /* A single player can have multiple connections, (think, multiple
  * browser windows with a common session cookie). */
 class Player {
@@ -6,7 +8,7 @@ class Player {
     this.session_id = session_id;
     this.name = name;
     this.connections = [connection];
-    this.team = "";
+    this.team = no_team;
   }
 
   add_connection(connection) {
@@ -34,7 +36,7 @@ class Player {
     return JSON.stringify({
       id: this.id,
       name: this.name,
-      team: this.team
+      team: this.team.name
     });
   }
 }
@@ -48,7 +50,7 @@ class Game {
     this.next_player_id = 1;
     this.teams = [];
     this.state = {
-      team_to_play: ""
+      team_to_play: no_team
     };
     this.first_move = true;
 
@@ -94,7 +96,7 @@ class Game {
       }
 
       /* Cannot move if you are not on a team. */
-      if (player.team === "")
+      if (player.team === no_team)
       {
         return { legal: false,
                  message: "You must be on a team to take a turn" };
@@ -115,7 +117,7 @@ class Game {
    * Return true if assignment made, false otherwise. */
   assign_player_to_team_perhaps(player, team)
   {
-    if (player.team !== "")
+    if (player.team !== no_team)
       return false;
 
     player.team = team;
@@ -138,7 +140,7 @@ class Game {
 
       /* Yes, start at 1 to skip teams[0] which we just assigned. */
       for (let i = 1; i < this.teams.length; i++) {
-        const other = this.players.find(p => p !== player && p.team === "");
+        const other = this.players.find(p => (p !== player) && (p.team === no_team));
         if (!other)
           return;
         this.assign_player_to_team_perhaps(other, this.teams[i]);
@@ -239,7 +241,7 @@ class Game {
   handle_player(request, response) {
     const player = this.players_by_session[request.session.id];
     const name = request.body.name;
-    const team = request.body.team;
+    const team_name = request.body.team;
     var updated = false;
     if (! player) {
       response.sendStatus(404);
@@ -257,12 +259,18 @@ class Game {
       updated = true;
     }
 
-    if (team !== null && (player.team !== team) &&
-        (team === "" || this.teams.includes(team)))
+    if (team_name !== null && (player.team.name !== team_name))
     {
-      player.team = team;
-
-      updated = true;
+      if (team_name === "") {
+        player.team = no_team;
+        updated = true;
+      } else {
+        const index = this.teams.findIndex(t => t.name === team_name);
+        if (index >= 0) {
+          player.team = this.teams[index];
+          updated = true;
+        }
+      }
     }
 
     if (updated)