Kopie van https://gitlab.com/studieverenigingvia/ict/centurion met een paar aanpassingen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
1.7 KiB
109 lines
1.7 KiB
const User = require("./User.js");
|
|
|
|
module.exports = class Lobby {
|
|
/**
|
|
* @type {User[]}
|
|
*/
|
|
users = [];
|
|
/**
|
|
* @type {string|undefined}
|
|
*/
|
|
leaderId = undefined;
|
|
|
|
running = false;
|
|
runningInterval = undefined;
|
|
currentTime = 0;
|
|
|
|
constructor(name) {
|
|
this.name = name;
|
|
}
|
|
|
|
run() {
|
|
this.running = true;
|
|
this.runningInterval = setInterval(() => {
|
|
this.currentTime += 1;
|
|
}, 1000);
|
|
}
|
|
|
|
pause() {
|
|
this.running = false;
|
|
clearInterval(this.runningInterval);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @returns {boolean}
|
|
*/
|
|
hasUsers() {
|
|
return this.users.length !== 0;
|
|
}
|
|
|
|
|
|
setRandomLeader() {
|
|
if (this.hasUsers()) {
|
|
this.leaderId = this.users[0].id;
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {User} user
|
|
*/
|
|
addUser(user) {
|
|
this.users.push(user);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param id
|
|
* @returns {User|undefined}
|
|
*/
|
|
getUser(id) {
|
|
return this.users.find(u => u.id === id);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {string} id
|
|
*/
|
|
removeUser(id) {
|
|
this.users = this.users.filter(u => u.id !== id);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @returns {boolean}
|
|
*/
|
|
hasLeader() {
|
|
return !!this.leaderId;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {string} id
|
|
* @returns {boolean}
|
|
*/
|
|
isLeader(id) {
|
|
return this.leaderId === id;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {string} id
|
|
*/
|
|
setLeader(id) {
|
|
if (!this.getUser(id)) {
|
|
throw new Error('user_not_in_lobby');
|
|
}
|
|
|
|
this.leaderId = id;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @returns {User|undefined}
|
|
*/
|
|
getLeader() {
|
|
return this.users.find(u => u.id === this.leaderId)
|
|
}
|
|
};
|
|
|