65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
|
import {Game} from "./game.mjs"
|
||
|
import * as log from "./log.mjs"
|
||
|
import {IllegalAction} from "./server/illegalAction.mjs"
|
||
|
class RoomManager {
|
||
|
constructor(){
|
||
|
this.games = [];
|
||
|
}
|
||
|
getGameByName(name, create) {
|
||
|
const game = this.games.filter(obj => obj.name == name)[0]
|
||
|
if (game === undefined && create) {
|
||
|
this.addGame(name);
|
||
|
// Oh no.... This cant be good code.
|
||
|
// Coming back to it two months later. Horrible, but I don't know how to fix it. Maybe I'll leave it as an ancient artifact.
|
||
|
return this.getGameByName(name);
|
||
|
}
|
||
|
return game
|
||
|
}
|
||
|
|
||
|
addGame(name, settings) {
|
||
|
const game = new Game(name, settings);
|
||
|
this.games.push(game);
|
||
|
return game
|
||
|
}
|
||
|
removeGame(name) {
|
||
|
this.games = this.games.filter(obj => obj.name != name);
|
||
|
log.log("removed game - " + name)
|
||
|
// Broken?
|
||
|
}
|
||
|
|
||
|
getAllIDs() {
|
||
|
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
|
||
|
}
|
||
|
|
||
|
joinClientToGame(room, nick, id, client) {
|
||
|
if (this.getAllIDs().includes(id)) {
|
||
|
return new IllegalAction(id, 22)
|
||
|
}
|
||
|
if (nick.length > 9) {
|
||
|
return new IllegalAction(id, 21)
|
||
|
}
|
||
|
const game = this.getGameByName(room, true);
|
||
|
const player = game.addPlayer(id, nick);
|
||
|
if (player === false) {
|
||
|
this.removeGame(game)
|
||
|
return new IllegalAction(id, 20)
|
||
|
}
|
||
|
|
||
|
client.join(game.name)
|
||
|
client.game = game;
|
||
|
client.player = player
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
export var roomManager = new RoomManager();
|