keep tilts synced

This commit is contained in:
Gavin McDonald
2025-07-01 14:35:32 -04:00
parent 6b3ab9a54e
commit f61ca0d0a1
4 changed files with 29 additions and 21 deletions

View File

@@ -107,11 +107,15 @@ export default class GameStore {
return this.gameUpdate(game);
}
leaveGame(game: GameState, playerID: string): GameState {
leaveGame(playerID: string): GameUpdate {
const game = this.getGameByPlayerID(playerID);
this.players.delete(playerID);
game.players.delete(playerID);
this._clearTilts(game, playerID);
game.lastUpdated = Date.now();
return game;
return this.gameUpdate(game);
}
flipCard(gameID: string, cardIndex: number): GameUpdate {
@@ -159,15 +163,21 @@ export default class GameStore {
if (!cardTilts) throw new Error(`Card tilts ${cardIndex} not found`);
game.tilts[cardIndex] = [
...cardTilts.filter((tilt) => tilt.playerID !== playerID),
{ playerID, rotateX, rotateY },
];
game.lastUpdated = Date.now();
this._clearTilts(game, playerID);
if (rotateX && rotateY) {
game.tilts[cardIndex] = [...game.tilts[cardIndex], { playerID, rotateX, rotateY }];
game.lastUpdated = Date.now();
}
return this.gameUpdate(game);
}
_clearTilts(game: GameState, playerID: string) {
game.tilts = game.tilts.map((card) => card.filter((tilt) => tilt.playerID !== playerID));
game.lastUpdated = Date.now();
}
updateSettings(gameID: string, settings: Settings) {
const game = this.getGame(gameID);
@@ -198,16 +208,13 @@ export default class GameStore {
return { dmID, spectatorID, cards, settings, tilts };
}
playerExit(playerID: string): GameState | null {
playerExit(playerID: string): GameUpdate | null {
if (this.startUps.has(playerID)) {
this.startUps.delete(playerID);
return null;
} else {
const game = this.getGameByPlayerID(playerID);
this.players.delete(playerID);
return this.leaveGame(game, playerID);
return this.leaveGame(playerID);
}
}