ending games, style low timer

This commit is contained in:
Alec
2021-12-22 15:49:12 -05:00
parent 5690a0a46c
commit 31f5d01092
29 changed files with 794 additions and 125 deletions

View File

@@ -12,7 +12,8 @@ const globals = {
KILL_PLAYER: 'killPlayer',
REVEAL_PLAYER: 'revealPlayer',
TRANSFER_MODERATOR: 'transferModerator',
CHANGE_NAME: 'changeName'
CHANGE_NAME: 'changeName',
END_GAME: 'endGame'
},
MESSAGES: {
ENTER_NAME: "Client must enter name."

View File

@@ -49,7 +49,7 @@ class ActiveGameRunner {
});
gameProcess.on('exit', () => {
this.logger.debug('Game ' + game.accessCode + ' has ended.');
this.logger.debug('Game ' + game.accessCode + ' timer has expired.');
delete this.timerThreads[game.accessCode];
});
gameProcess.send({

View File

@@ -33,7 +33,7 @@ class GameManager {
ackFn(this.environment);
});
socket.on(globals.CLIENT_COMMANDS.START_GAME, (accessCode, personId) => {
socket.on(globals.CLIENT_COMMANDS.START_GAME, (accessCode) => {
let game = this.activeGameRunner.activeGames[accessCode];
if (game) {
game.status = globals.STATUS.IN_PROGRESS;
@@ -158,6 +158,17 @@ class GameManager {
}
}
});
socket.on(globals.CLIENT_COMMANDS.END_GAME, (accessCode) => {
let game = this.activeGameRunner.activeGames[accessCode];
if (game) {
game.status = globals.STATUS.ENDED;
for (let person of game.people) {
person.revealed = true;
}
namespace.in(accessCode).emit(globals.CLIENT_COMMANDS.END_GAME, GameStateCurator.mapPeopleForModerator(game.people));
}
})
}

View File

@@ -7,6 +7,23 @@ const globals = require("../config/globals")
const GameStateCurator = {
getGameStateFromPerspectiveOfPerson: (game, person, gameRunner, socket, logger) => {
return getGameStateBasedOnPermissions(game, person, gameRunner);
},
mapPeopleForModerator: (people) => {
return people
.filter((person) => {
return person.assigned === true
})
.map((person) => ({
name: person.name,
id: person.id,
userType: person.userType,
gameRole: person.gameRole,
gameRoleDescription: person.gameRoleDescription,
alignment: person.alignment,
out: person.out,
revealed: person.revealed
}));
}
}
@@ -27,7 +44,7 @@ function getGameStateBasedOnPermissions(game, person, gameRunner) {
switch (person.userType) {
case globals.USER_TYPES.PLAYER:
case globals.USER_TYPES.KILLED_PLAYER:
return {
let state = {
accessCode: game.accessCode,
status: game.status,
moderator: mapPerson(game.moderator),
@@ -37,10 +54,16 @@ function getGameStateBasedOnPermissions(game, person, gameRunner) {
.filter((person) => {
return person.assigned === true
})
.map((filteredPerson) => mapPerson(filteredPerson)),
.map((filteredPerson) =>
mapPerson(filteredPerson)
),
timerParams: game.timerParams,
isFull: game.isFull,
}
if (game.status === globals.STATUS.ENDED) {
state.people = GameStateCurator.mapPeopleForModerator(game.people);
}
return state;
case globals.USER_TYPES.MODERATOR:
return {
accessCode: game.accessCode,
@@ -48,7 +71,7 @@ function getGameStateBasedOnPermissions(game, person, gameRunner) {
moderator: mapPerson(game.moderator),
client: client,
deck: game.deck,
people: mapPeopleForModerator(game.people, client),
people: GameStateCurator.mapPeopleForModerator(game.people, client),
timerParams: game.timerParams,
isFull: game.isFull,
spectators: game.spectators
@@ -88,23 +111,6 @@ function getGameStateBasedOnPermissions(game, person, gameRunner) {
}
}
function mapPeopleForModerator(people) {
return people
.filter((person) => {
return person.assigned === true
})
.map((person) => ({
name: person.name,
id: person.id,
userType: person.userType,
gameRole: person.gameRole,
gameRoleDescription: person.gameRoleDescription,
alignment: person.alignment,
out: person.out,
revealed: person.revealed
}));
}
function mapPerson(person) {
if (person.revealed) {
return {