aboutsummaryrefslogtreecommitdiff
path: root/src/manage.js
diff options
context:
space:
mode:
authorKaran Jayachandra <karan.jayachandra@nxp.com>2025-11-14 17:16:37 +0100
committerKaran Jayachandra <karan.jayachandra@nxp.com>2025-11-14 17:16:37 +0100
commitbaba5a39de4f699141438b122905888acd50ea53 (patch)
tree38316ad7e769e97f45cde515d8885d813b04a888 /src/manage.js
parent27b3a8f4fe5f6259983a7bcf44e7e987f8e19e09 (diff)
Cleaned up the manager
Diffstat (limited to 'src/manage.js')
-rw-r--r--src/manage.js139
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);
+ });
+}