1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
import { GuestManager } from "./guest.mjs";
import { shuffle, Manager, randomLevel, randomStatus } from "./utils.mjs";
import { Player } from "./data";
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);
}
export class PlayerManager extends Manager {
g = new GuestManager();
constructor() {
super();
console.log("Loading player data.");
let tempPlayer = new Player();
let data = JSON.parse(localStorage.getItem(tempPlayer.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 = Number(data[i].level);
let status = Boolean(Number(data[i].status));
let games = Number(data[i].games);
this.data.push(new Player(id, status, level, games, name));
}
console.log("Loaded " + this.data.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, randomStatus(), randomLevel());
console.log(p);
this.data.push(p);
}
console.log("Generated data for " + this.data.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.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 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);
});
}
|