aboutsummaryrefslogtreecommitdiff
path: root/player.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'player.mjs')
-rw-r--r--player.mjs150
1 files changed, 0 insertions, 150 deletions
diff --git a/player.mjs b/player.mjs
deleted file mode 100644
index 594bb7b..0000000
--- a/player.mjs
+++ /dev/null
@@ -1,150 +0,0 @@
-import { GuestManager } from "./guest.mjs";
-import { shuffle, Manager } from "./utils.mjs";
-
-class Player {
- constructor(id, name, level, status, totalPlayed) {
- this.id = id;
- this.status = typeof status !== "undefined" ? status : false;
- this.name = name;
- this.level = typeof level !== "undefined" ? level : 1;
- this.totalPlayed = typeof totalPlayed !== "undefined" ? status : 0;
- }
- toggle() {
- this.status = !this.status;
- this.print();
- }
- print() {
- let status = this.status ? "active" : "inactive";
- console.log(this.name + " is currently " + status);
- }
- render() {
- let color = this.status ? "is-success" : "is-danger";
- let type = `class="button is-medium ${color}"`;
- return `<button id=${"regular_" + this.id} ${type}>${this.name}</button>`;
- }
-}
-
-function randomLevel() {
- const max_level = 10;
- return Math.floor(Math.random() * max_level + 1);
-}
-
-function randomStatus() {
- return Math.random() < 0.5;
-}
-
-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, name, level, true, 0);
-}
-
-export class PlayerManager extends Manager {
- g = new GuestManager();
-
- constructor() {
- super("regular", []);
- console.log("Loading player data.");
- let data = JSON.parse(localStorage.getItem(this.description));
- if (data === null || data.length === 0) {
- console.log("Player data unavailable: " + data);
- this.generate();
- return;
- }
- for (let i = 0; i < data.length; i++) {
- let id = Number(data[i].id);
- let name = data[i].name;
- let level = data[i].level;
- let status = data[i].status;
- let totalPlayed = data[i].totalPlayed;
- this.listData.push(new Player(id, name, level, status, totalPlayed));
- }
- console.log("Loaded " + this.listData.length + " players.");
- this.render();
- this.addBehaviour();
- addLoadBehaviour(this);
- }
- generate() {
- console.log("Generating player data.");
- let maxPlayerCount = 71;
- for (let i = 0; i < maxPlayerCount; i++) {
- let p = new Player(i, "Player " + i, randomLevel(), randomStatus(), 0);
- this.listData.push(p);
- }
- console.log("Generated data for " + this.listData.length + " players");
- this.store();
- this.render();
- }
- 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.listData = 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 + ".");
- const activePlayers = this.active(factor);
- 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;
- }
-}
-
-// TODO Add load behaviour to constructor
-export 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);
- });
-}