Skip to content

Commit

Permalink
Release v1.2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
s1hofmann authored Apr 12, 2020
2 parents e434190 + 2ef2c49 commit badd1f1
Show file tree
Hide file tree
Showing 21 changed files with 520 additions and 41 deletions.
Binary file added .gfx/preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@ jobs:
- run: npm ci
- run: npm run bundle
- run: npm --prefix=packages/zahlenspiel-backend test
- run: npm --prefix=packages/zahlenspiel-ui test
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Zahlenspiel

![Preview image](.gfx/preview.png)

## What is it?

This repository contains a digital version of **The Game**
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"packages": [
"packages/*"
],
"version": "1.2.3"
"version": "1.2.4"
}
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "zahlenspiel",
"version": "1.2.3",
"version": "1.2.4",
"description": "Zahlenspiel",
"main": "index.js",
"scripts": {
Expand All @@ -9,6 +9,7 @@
"clean:artifacts": "lerna exec -- rm -rf dist/ tsconfig.tsbuildinfo",
"rebuild": "npm run clean && npm i && npm run bootstrap && npm run build",
"build": "lerna run build",
"versionBump": "lerna version --no-git-tag-version --no-push",
"prebundle": "rm -rf bundle && mkdir bundle && npm run rebuild",
"bundle-frontend": "cp -rf packages/zahlenspiel-ui/build bundle/public",
"bundle-backend": "cp -rf packages/zahlenspiel-backend/node_modules bundle && mv packages/zahlenspiel-backend/app bundle",
Expand Down
2 changes: 1 addition & 1 deletion packages/zahlenspiel-backend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/zahlenspiel-backend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "zahlenspiel-backend",
"version": "1.2.3",
"version": "1.2.4",
"description": "Zahlenspiel Backend",
"main": "dist/index",
"types": "dist/index",
Expand Down Expand Up @@ -38,6 +38,6 @@
"sneer": "^1.0.1",
"uuid": "^7.0.2",
"winston": "^3.2.1",
"zahlenspiel-shared-entities": "1.2.3"
"zahlenspiel-shared-entities": "^1.2.4"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describe('determineCardsInHand', () => {
[3, 6],
[4, 6],
[5, 6],
])('$s player(s) should have $s cards', (players: number, cards: number) => {
])('%d player(s) should have %d cards', (players: number, cards: number) => {
expect(determineCardsInHand(players)).toBe(cards);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describe('turnFinishable', () => {
[true, 4, 4],
[false, 4, 1],
[false, 4, 0],
])('should be $s for $s remaining cards and $s dropped card', (expected: boolean, remainingCards: number, droppedCards: number) => {
])('should be %s for %d remaining cards and %d dropped card', (expected: boolean, remainingCards: number, droppedCards: number) => {
// WHEN
const result = turnFinishable(droppedCards, remainingCards);

Expand Down
56 changes: 32 additions & 24 deletions packages/zahlenspiel-backend/src/rooms/zahlenspiel-room.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import {
isStartGameMessage,
isVoteFirstTurnMessage,
JoinErrorMessage,
JoinSuccessMessage, MAX_RECONNECTION_TIME_IN_SECONDS,
JoinSuccessMessage,
MAX_RECONNECTION_TIME_IN_SECONDS,
NewCardMessage,
PlayerJoinMessage,
PlayerLeaveMessage,
Expand All @@ -24,6 +25,7 @@ import {
import {turnFinishable} from "../game-rules";
import {marshallCardStacks, marshallPlayers, toPlayerDTO} from "../entities/entity-mapping";
import {Player} from "../entities";
import {BroadcastOptions} from "colyseus/lib/Room";

export class ZahlenspielRoom extends Room<GameState> {

Expand All @@ -46,12 +48,8 @@ export class ZahlenspielRoom extends Room<GameState> {
this.state.addNewPlayer(client, options.playerName || "Guy Incognito");
const newPlayer = this.state.getPlayer(client.id);
if (newPlayer) {
setTimeout(() => {
this.send(client, new JoinSuccessMessage(toPlayerDTO(newPlayer)));
}, 300);
setTimeout(() => {
this.broadcast(new PlayerJoinMessage(marshallPlayers(this.state.players)));
}, 300);
this.sendDelayed(client, new JoinSuccessMessage(toPlayerDTO(newPlayer)));
this.broadcastDelayed(new PlayerJoinMessage(marshallPlayers(this.state.players)));
} else {
this.send(client, new JoinErrorMessage("Failed to add player."));
}
Expand Down Expand Up @@ -115,7 +113,7 @@ export class ZahlenspielRoom extends Room<GameState> {
const playerList = marshallPlayers(this.state.players);
this.broadcast(new PlayerLeaveMessage(playerList), {except: client});
if (this.isGamePhase()) {
this.broadcast(new GameLostMessage(this.state.totalRemainingCards(), `${leavingPlayer.name} couldn't handle the pressure and left!`));
this.broadcastDelayed(new GameLostMessage(this.state.totalRemainingCards(), `${leavingPlayer.name} couldn't handle the pressure and left!`), {except: client});
}
} else {
const reconnectedClient = await this.allowReconnection(client, MAX_RECONNECTION_TIME_IN_SECONDS);
Expand Down Expand Up @@ -198,22 +196,32 @@ export class ZahlenspielRoom extends Room<GameState> {
}

private syncPlayerAfterReconnect(player: Player) {
setTimeout(() => {
this.send(player.client, new JoinSuccessMessage(toPlayerDTO(player)));
this.send(player.client, new PlayerJoinMessage(marshallPlayers(this.state.players)));
if (this.isPreGamePhase()) {
this.send(player.client, new UpdateCardStackMessage(marshallCardStacks(this.state.cardStacks), this.state.remainingCardsOnStack()));
this.send(player.client, new NewCardMessage(player.cards));
this.send(player.client, new SetupFinishedMessage());
} else if (this.isGamePhase()) {
this.send(player.client, new UpdateCardStackMessage(marshallCardStacks(this.state.cardStacks), this.state.remainingCardsOnStack()));
this.send(player.client, new NewCardMessage(player.cards));
this.send(player.client, new PlayerSwitchMessage(toPlayerDTO(this.state.currentPlayer)));
this.send(player.client, new GameStartedMessage());
if (this.state.isCurrentPlayer(player) && turnFinishable(this.state.validDroppedCards, this.state.currentDeck.length)) {
this.send(player.client, new TurnFinishableMessage());
}
this.sendDelayed(player.client, new JoinSuccessMessage(toPlayerDTO(player)));
this.sendDelayed(player.client, new PlayerJoinMessage(marshallPlayers(this.state.players)));
if (this.isPreGamePhase()) {
this.sendDelayed(player.client, new UpdateCardStackMessage(marshallCardStacks(this.state.cardStacks), this.state.remainingCardsOnStack()));
this.sendDelayed(player.client, new NewCardMessage(player.cards));
this.sendDelayed(player.client, new SetupFinishedMessage());
} else if (this.isGamePhase()) {
this.sendDelayed(player.client, new UpdateCardStackMessage(marshallCardStacks(this.state.cardStacks), this.state.remainingCardsOnStack()));
this.sendDelayed(player.client, new NewCardMessage(player.cards));
this.sendDelayed(player.client, new PlayerSwitchMessage(toPlayerDTO(this.state.currentPlayer)));
this.sendDelayed(player.client, new GameStartedMessage());
if (this.state.isCurrentPlayer(player) && turnFinishable(this.state.validDroppedCards, this.state.currentDeck.length)) {
this.sendDelayed(player.client, new TurnFinishableMessage());
}
}, 200);
}
}

private sendDelayed(client: Client, message: any, delay: number = 200) {
setTimeout(() => {
this.send(client, message);
}, delay);
}

private broadcastDelayed(message: any, options?: BroadcastOptions, delay: number = 200) {
setTimeout(() => {
this.broadcast(message, options);
}, delay);
}
}
Loading

0 comments on commit badd1f1

Please sign in to comment.