diff options
Diffstat (limited to 'game.mjs')
| -rw-r--r-- | game.mjs | 202 |
1 files changed, 129 insertions, 73 deletions
@@ -1,4 +1,5 @@ -import { getMatchCount, shuffle } from "./utils.mjs"; +import { CourtManager } from "./court.mjs"; +import { getMatchCount, shuffle, Manager } from "./utils.mjs"; class Team { constructor(playerOne, playerTwo) { @@ -13,9 +14,9 @@ class Team { } } -export class Game { - constructor(court, team_1, team_2) { - this.courtId = court.id; +class Game { + constructor(courtId, team_1, team_2) { + this.courtId = courtId; this.team_1 = team_1; this.team_2 = team_2; } @@ -27,91 +28,146 @@ export class Game { render() { let type = this.team_1.playerOne === "RESERVED" ? `class="is-danger is-dark"` : ``; - // type = this.team_1.playerOne === "---" ? `class="is-warning is-dark"` : ``; return `<tr ${type}><td align="center" style="width: 8%;">${ this.courtId + 1 }</td>${this.team_1.render()}${this.team_2.render()}</tr>`; } } -export function generateDummyGames(courts, description) { +function generateDummyGames(courts, description) { let team = new Team(description, description); let games = []; for (const court of courts) { - let game = new Game(court, team, team); + let game = new Game(court.id, team, team); games.push(game); } return games; } -export class Round { - constructor(games, number) { - this.games = games; - this.description = - typeof number === "undefined" ? "Proposal" : "Round " + number; +export class GameManager extends Manager { + constructor() { + super("game", []); + this.round = Number(localStorage.getItem("round")) || 0; + this.courts = new CourtManager(); + console.log("Loading game data."); + let data = JSON.parse(localStorage.getItem(this.description)); + if (data === null || data.length === 0) { + console.log("Game data unavailable: " + data); + this.generate(); + return; + } + for (let i = 0; i < data.length; i++) { + let courtId = Number(data[i].courtId); + let teamOne = new Team( + data[i].team_1.playerOne, + data[i].team_1.playerTwo + ); + let teamTwo = new Team( + data[i].team_2.playerOne, + data[i].team_2.playerTwo + ); + this.listData.push(new Game(courtId, teamOne, teamTwo)); + } + console.log("Loaded " + this.listData.length + " games."); + this.render(); + this.addDescription(); } - render() { - let output = `<table class="table is-fullwidth"><thead><th colspan='5'>${this.description}</th><tr><th align="center">Court</th><th align="center" colspan='2'>Team 1</th><th colspan='2' align="center">Team 2</th></tr></thead>`; - for (const game of this.games) { - output += game.render(); + generate() { + console.log("Generating the dummy round."); + this.listData = generateDummyGames(this.courts.listData, "---"); + console.log("Loaded " + this.listData.length + " dummy round."); + this.store(); + this.render(); + this.addDescription(); + } + addDescription() { + let description = this.proposed ? "Proposal" : "Round " + this.round; + document.getElementById("game_description").innerHTML = description; + } + propose(players) { + console.log("Proposing new games!"); + let possibleMatches = getMatchCount(players, this.courts.listData); + let requiredPlayers = possibleMatches * 4; + console.log("Required players are " + requiredPlayers); + const activeCourts = this.courts.listData.filter(function (c) { + return c.status; + }); + const inactiveCourts = this.courts.listData.filter(function (c) { + return !c.status; + }); + const activePlayers = players.filter(function (p) { + return p.status; + }); + console.log("Total reserved courts are " + inactiveCourts.length + "."); + console.log("Total possible matches are " + possibleMatches + "."); + console.log("Active players are:"); + console.log( + activePlayers + .map((i) => { + return i.name; + }) + .join(",") + ); + const shuffledPlayers = shuffle(activePlayers); + shuffledPlayers.sort((a, b) => a.totalPlayed - b.totalPlayed); + const selectedPlayers = shuffledPlayers.slice(0, requiredPlayers); + selectedPlayers.sort((a, b) => a.level - b.level); + console.log("Selected players are:"); + console.log( + selectedPlayers + .map((i) => { + return i.name; + }) + .join(",") + ); + console.log("The matches are:"); + this.listData = generateDummyGames( + activeCourts.slice(possibleMatches + 1), + "---" + ); + this.listData = this.listData.concat( + generateDummyGames(inactiveCourts, "RESERVED") + ); + for (let index = 0; index < possibleMatches; index++) { + const startIndex = 4 * index; + const endIndex = startIndex + 4; + const courtPlayers = selectedPlayers.slice(startIndex, endIndex); + const team_1 = new Team(courtPlayers[0].name, courtPlayers[3].name); + const team_2 = new Team(courtPlayers[1].name, courtPlayers[2].name); + const game = new Game(activeCourts[index].id, team_1, team_2); + game.print(); + this.listData.push(game); } - output += "</table>"; - return output; + this.listData.sort((a, b) => a.courtId - b.courtId); + this.proposed = true; + this.render(); + this.addDescription(); } -} - -export function proposeGames(players, courts) { - console.log("Proposing new games!"); - let possibleMatches = getMatchCount(players, courts); - let requiredPlayers = possibleMatches * 4; - console.log("Required players are " + requiredPlayers); - const activeCourts = courts.filter(function (c) { - return c.status; - }); - const inactiveCourts = courts.filter(function (c) { - return !c.status; - }); - const activePlayers = players.filter(function (p) { - return p.status; - }); - console.log("Total reserved courts are " + inactiveCourts.length + "."); - console.log("Total possible matches are " + possibleMatches + "."); - console.log("Active players are:"); - console.log( - activePlayers - .map((i) => { - return i.name; - }) - .join(",") - ); - const shuffledPlayers = shuffle(activePlayers); - shuffledPlayers.sort((a, b) => a.totalPlayed - b.totalPlayed); - const selectedPlayers = shuffledPlayers.slice(0, requiredPlayers); - selectedPlayers.sort((a, b) => a.level - b.level); - console.log("Selected players are:"); - console.log( - selectedPlayers - .map((i) => { - return i.name; - }) - .join(",") - ); - console.log("The matches are:"); - let games = generateDummyGames( - activeCourts.slice(possibleMatches + 1), - "---" - ); - games = games.concat(generateDummyGames(inactiveCourts, "RESERVED")); - for (let index = 0; index < possibleMatches; index++) { - const startIndex = 4 * index; - const endIndex = startIndex + 4; - const courtPlayers = selectedPlayers.slice(startIndex, endIndex); - const team_1 = new Team(courtPlayers[0].name, courtPlayers[3].name); - const team_2 = new Team(courtPlayers[1].name, courtPlayers[2].name); - const game = new Game(activeCourts[index], team_1, team_2); - game.print(); - games.push(game); + confirm() { + this.proposed = false; + this.round += 1; + localStorage.setItem("round", this.round); + // Need to update the number of games played here + this.store(); + this.addDescription(); + document.getElementById("timer-start").click(); + const notification = new Notyf({ + duration: 30 * 1000, + position: { x: "center", y: "top" }, + types: [ + { + type: "success", + background: "green", + duration: 1000 * 1000, + dismissible: true, + }, + ], + }); + notification.success("Round confirmed!"); + } + reset() { + localStorage.clear("round"); + localStorage.clear("round"); + window.location.reload(); } - games.sort((a, b) => a.courtId - b.courtId); - return games; } |
