X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=game.js;h=b43a75c42a36fd69212b75a29aa9f140ea153d1f;hb=c381788fa303d9ca392fc4b7b25c4d55344717da;hp=34a0d13b4168868a4ed6e55d275c2139b0774dbc;hpb=038e9507a47ff66398f01931f271159d4a0b2aa5;p=empires-server diff --git a/game.js b/game.js index 34a0d13..b43a75c 100644 --- 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)