import { Player } from "./player"; const WAITING = 0; const PRE_GAME = 1; const PLAYING = 2; export class Game { constructor() { this.us = null; this.players = {}; this.state = WAITING; } isWaiting() { return this.state === WAITING; } isPregame() { return this.state === PRE_GAME; } isPlaying() { return this.state === PLAYING; } incrementState() { this.state += 1; } currentPlayer() { return Object.values(this.players).filter((p) => p.isPlaying)[0]; } addPlayer(id, name, is_us) { let is_new = this.players[id] === undefined; if (this.isWaiting()) { this.players[id] = new Player(id, name, is_us); if (is_us === true) { this.us = this.players[id]; } } if (is_new) { const event = new CustomEvent("addPlayer"); document.dispatchEvent(event); } return is_new; } removePlayer(id) { if (this.players[id] !== undefined) { const event = new CustomEvent("removePlayer"); document.dispatchEvent(event); delete this.players[id]; } } keepAlive(id) { if (id !== this.us.id) { this.players[id].resetTimeout(this); } } setReady(id, ready) { this.players[id].readyState = ready; if (this._allPlayersReady()) { this.incrementState(); } } _allPlayersReady() { for (let player of Object.values(this.players)) { if (!player.readyState) { return false; } } return true; } }