mirror of
https://github.com/AlecM33/Werewolf.git
synced 2025-12-26 07:47:50 +01:00
fix problem with updating spectator count
This commit is contained in:
@@ -50,7 +50,7 @@ export const globals = {
|
||||
SYNC_GAME_STATE: 'syncGameState',
|
||||
START_TIMER: 'startTimer',
|
||||
PLAYER_LEFT: 'playerLeft',
|
||||
NEW_SPECTATOR: 'newSpectator',
|
||||
UPDATE_SPECTATORS: 'newSpectator',
|
||||
RESTART_GAME: 'restartGame'
|
||||
},
|
||||
USER_TYPES: {
|
||||
|
||||
@@ -203,12 +203,16 @@ export class InProgress {
|
||||
}
|
||||
});
|
||||
|
||||
if (this.socket.hasListeners(globals.EVENT_IDS.NEW_SPECTATOR)) {
|
||||
this.socket.removeAllListeners(globals.EVENT_IDS.NEW_SPECTATOR);
|
||||
if (this.socket.hasListeners(globals.EVENT_IDS.UPDATE_SPECTATORS)) {
|
||||
this.socket.removeAllListeners(globals.EVENT_IDS.UPDATE_SPECTATORS);
|
||||
}
|
||||
|
||||
this.socket.on(globals.EVENT_IDS.NEW_SPECTATOR, (spectator) => {
|
||||
stateBucket.currentGameState.spectators.push(spectator);
|
||||
this.socket.on(globals.EVENT_IDS.UPDATE_SPECTATORS, (updatedSpectatorList) => {
|
||||
stateBucket.currentGameState.spectators = updatedSpectatorList;
|
||||
SharedStateUtil.setNumberOfSpectators(
|
||||
stateBucket.currentGameState.spectators.length,
|
||||
document.getElementById('spectator-count')
|
||||
);
|
||||
if (this.stateBucket.currentGameState.client.userType === globals.USER_TYPES.MODERATOR
|
||||
|| this.stateBucket.currentGameState.client.userType === globals.USER_TYPES.TEMPORARY_MODERATOR) {
|
||||
this.displayAvailableModerators();
|
||||
|
||||
@@ -99,8 +99,8 @@ export class Lobby {
|
||||
}
|
||||
});
|
||||
|
||||
this.socket.on(globals.EVENT_IDS.NEW_SPECTATOR, (spectator) => {
|
||||
this.stateBucket.currentGameState.spectators.push(spectator);
|
||||
this.socket.on(globals.EVENT_IDS.UPDATE_SPECTATORS, (updatedSpectatorList) => {
|
||||
this.stateBucket.currentGameState.spectators = updatedSpectatorList;
|
||||
SharedStateUtil.setNumberOfSpectators(
|
||||
this.stateBucket.currentGameState.spectators.length,
|
||||
document.getElementById('spectator-count')
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#join-game-modal {
|
||||
border-left: 5px solid #b1afcd;
|
||||
animation: entrance 0.5s forwards;
|
||||
transform-origin: center;
|
||||
display: block;
|
||||
z-index: 1 !important;
|
||||
@@ -46,15 +45,3 @@
|
||||
#game-code {
|
||||
font-family: "Courier New", monospace;
|
||||
}
|
||||
|
||||
@keyframes entrance {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
90% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ const globals = {
|
||||
PLAYER_JOINED: 'playerJoined',
|
||||
PLAYER_LEFT: 'playerLeft',
|
||||
SYNC_GAME_STATE: 'syncGameState',
|
||||
NEW_SPECTATOR: 'newSpectator',
|
||||
UPDATE_SPECTATORS: 'newSpectator',
|
||||
BROADCAST: 'broadcast'
|
||||
},
|
||||
ENVIRONMENT: {
|
||||
|
||||
@@ -184,6 +184,11 @@ class GameManager {
|
||||
|
||||
transferModeratorPowers = (socket, game, person, namespace, logger) => {
|
||||
if (person && (person.out || person.userType === globals.USER_TYPES.SPECTATOR)) {
|
||||
let spectatorsUpdated = false;
|
||||
if (game.spectators.includes(person)) {
|
||||
game.spectators.splice(game.spectators.indexOf(person), 1);
|
||||
spectatorsUpdated = true;
|
||||
}
|
||||
logger.debug('game ' + game.accessCode + ': transferring mod powers to ' + person.name);
|
||||
if (game.moderator === person) {
|
||||
person.userType = globals.USER_TYPES.MODERATOR;
|
||||
@@ -197,16 +202,17 @@ class GameManager {
|
||||
game.moderator.userType = globals.USER_TYPES.KILLED_PLAYER; // restore their state from before being made mod.
|
||||
} else if (game.moderator.userType === globals.USER_TYPES.MODERATOR) {
|
||||
game.moderator.userType = globals.USER_TYPES.SPECTATOR;
|
||||
if (!game.spectators.includes(game.moderator)) {
|
||||
game.spectators.push(game.moderator);
|
||||
}
|
||||
if (game.spectators.includes(person)) {
|
||||
game.spectators.splice(game.spectators.indexOf(person), 1);
|
||||
}
|
||||
namespace.in(game.accessCode).emit(globals.EVENTS.NEW_SPECTATOR);
|
||||
game.spectators.push(game.moderator);
|
||||
spectatorsUpdated = true;
|
||||
}
|
||||
person.userType = globals.USER_TYPES.MODERATOR;
|
||||
game.moderator = person;
|
||||
if (spectatorsUpdated === true) {
|
||||
namespace.in(game.accessCode).emit(
|
||||
globals.EVENTS.UPDATE_SPECTATORS,
|
||||
game.spectators.map((spectator) => GameStateCurator.mapPerson(spectator))
|
||||
);
|
||||
}
|
||||
this.namespace.to(person.socketId).emit(globals.EVENTS.SYNC_GAME_STATE);
|
||||
this.namespace.to(oldModerator.socketId).emit(globals.EVENTS.SYNC_GAME_STATE);
|
||||
}
|
||||
@@ -507,8 +513,8 @@ function addSpectator (game, name, logger, namespace) {
|
||||
logger.trace('new spectator: ' + spectator.name);
|
||||
game.spectators.push(spectator);
|
||||
namespace.in(game.accessCode).emit(
|
||||
globals.EVENTS.NEW_SPECTATOR,
|
||||
GameStateCurator.mapPerson(spectator)
|
||||
globals.EVENTS.UPDATE_SPECTATORS,
|
||||
game.spectators.map((spectator) => { return GameStateCurator.mapPerson(spectator); })
|
||||
);
|
||||
return Promise.resolve(spectator.cookie);
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@ describe('GameManager', () => {
|
||||
expect(game.spectators.length).toEqual(1);
|
||||
expect(game.spectators[0].name).toEqual('Jane');
|
||||
expect(game.spectators[0].userType).toEqual(USER_TYPES.SPECTATOR);
|
||||
expect(gameManager.namespace.in().emit).toHaveBeenCalledWith(globals.EVENTS.NEW_SPECTATOR, jasmine.anything());
|
||||
expect(gameManager.namespace.in().emit).toHaveBeenCalledWith(globals.EVENTS.UPDATE_SPECTATORS, jasmine.anything());
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user