diff options
| author | Karan Jayachandra <karan.jayachandra@nxp.com> | 2025-11-14 17:16:37 +0100 |
|---|---|---|
| committer | Karan Jayachandra <karan.jayachandra@nxp.com> | 2025-11-14 17:16:37 +0100 |
| commit | baba5a39de4f699141438b122905888acd50ea53 (patch) | |
| tree | 38316ad7e769e97f45cde515d8885d813b04a888 /src/manage.js | |
| parent | 27b3a8f4fe5f6259983a7bcf44e7e987f8e19e09 (diff) | |
Cleaned up the manager
Diffstat (limited to 'src/manage.js')
| -rw-r--r-- | src/manage.js | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/manage.js b/src/manage.js new file mode 100644 index 0000000..31e828d --- /dev/null +++ b/src/manage.js @@ -0,0 +1,139 @@ +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); + }); +} |
