import { Court, Guest, Player } from "./data"; import { shuffle, Manager, randomLevel, randomStatus } from "./utils"; export class CourtManager extends Manager { constructor() { super("Court", 12); } createItem(i) { return new Court(i, randomStatus()); } loadItem(data) { let id = Number(data.id); let status = Boolean(Number(data.status)); return new Court(id, status); } } export class GuestManager extends Manager { constructor() { super("Guest", 12); } createItem(i) { return new Guest(i, randomStatus()); } loadItem(data) { let id = Number(data.id); let status = Boolean(Number(data.status)); let games = data.games; return new Guest(id, status, games); } active(factor) { factor = typeof factor !== "undefined" ? factor : 1; let data = super.active(); console.log("Normalize skill by a factor of " + factor + "."); let players = data.map(function (p) { p.skill = Math.ceil(p.skill / factor); return p; }); return players; } } export class PlayerManager extends Manager { constructor() { super("Regular", 71); addLoadBehaviour(this); this.g = new GuestManager(); } createItem(i) { return new Player(i, randomStatus(), randomLevel()); } loadItem(data) { let id = Number(data.id); let name = data.name; let level = Number(data.level); let status = Boolean(Number(data.status)); let games = Number(data.games); return new Player(id, status, level, games, name); } import(data) { var lines = data.split("\n"); var players = []; for (var i = 1; i < lines.length; i++) { if (lines[i] == undefined || lines[i].trim() == "") { continue; } players.push(parseLineToPlayer(lines[i])); } console.log("Loaded " + players.length + " Players"); for (var i = 0; i < players.length; i++) { players[i].print(); } this.data = players; this.store(); this.render(); } active(factor) { factor = typeof factor !== "undefined" ? factor : 1; let data = super.active(); console.log("Normalize skill by a factor of " + factor + "."); let players = data.map(function (p) { p.skill = Math.ceil(p.skill / factor); return p; }); return players; } propose(count) { console.log("Required players are " + count); let factor = Number(document.getElementById("skill").value); console.log("Skill normalized by a factor of " + factor + "."); let activePlayers = this.active(factor); const activeGuests = this.g.active(factor); activePlayers = activePlayers.concat(activeGuests); 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, count); selectedPlayers.sort((a, b) => a.level - b.level); console.log("Selected players are:"); console.log( selectedPlayers .map((i) => { return i.name; }) .join(",") ); return selectedPlayers; } } function parseLineToPlayer(data) { var info = data.split(","); var id = Number(info[0].trim()); var name = info[1].trim() + " " + info[2].trim(); var level = Number(info[3].trim()); return new Player(id, true, level, 0, name); } function addLoadBehaviour(p) { const f = document.querySelector("#player-load input[type=file]"); f.addEventListener("change", () => { const file = f.files[0]; let importData; console.log("Loading data from " + file.name); const reader = new FileReader(); reader.onload = function (e) { importData = reader.result; p.import(importData); }; reader.readAsText(file); }); }