MultiplayerMinesweeper/dist/roomManager.js

68 lines
2.1 KiB
JavaScript

import { Game } from "./game.js";
import * as util from "./util.js";
import { IllegalAction } from "./server/illegalAction.js";
class RoomManager {
constructor() {
this.games = [];
}
getGameByID(id) {
const game = this.games.filter(obj => obj.id == id)[0];
if (game === undefined) {
return false;
}
return game;
}
addGame(id, options) {
const game = new Game(id, options);
this.games.push(game);
return game;
}
removeGameByID(id) {
this.games = this.games.filter(obj => obj.id != id);
}
getAllPlayerIDs() {
let ids = [];
for (let i = 0; i < this.games.length; i++) {
for (let j = 0; j < this.games[i].players.length; j++) {
ids.push(this.games[i].players[j].id);
}
}
return ids;
}
getAllGameIDs() {
let ids = [];
for (let i = 0; i < this.games.length; i++) {
ids.push(this.games[i].id);
}
return ids;
}
playerJoinGame(roomCode, playerName, playerID) {
// See if the client is already in a game
if (this.getAllPlayerIDs().includes(playerID)) {
return new IllegalAction(id, 22);
}
if (!this.getAllGameIDs().includes(roomCode)) {
return new IllegalAction(id, 30);
}
const game = this.getGameByID(roomCode);
const player = game.addPlayer(playerID, playerName);
// See if player name is taken already
if (player === false) {
this.removeGame(game);
return new IllegalAction(id, 20);
}
return [game, player];
}
playerCreateGame(options, playerName, playerColor, playerID) {
if (this.getAllPlayerIDs().includes(playerID)) {
return new IllegalAction(id, 22);
}
console.log(options);
const id = util.createCode();
const game = this.addGame(id, options);
const player = game.addPlayer(playerID, playerName, playerColor);
return [game, player];
}
}
export var roomManager = new RoomManager();