trucoshi 0.3.54 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types.d.ts +102 -21
- package/dist/types.js +12 -9
- package/package.json +11 -9
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -18
- package/dist/lib/classes/Deck.d.ts +0 -17
- package/dist/lib/classes/Deck.js +0 -41
- package/dist/lib/classes/Envido.d.ts +0 -34
- package/dist/lib/classes/Envido.js +0 -168
- package/dist/lib/classes/Flor.d.ts +0 -0
- package/dist/lib/classes/Flor.js +0 -1
- package/dist/lib/classes/GameLoop.d.ts +0 -28
- package/dist/lib/classes/GameLoop.js +0 -115
- package/dist/lib/classes/Hand.d.ts +0 -43
- package/dist/lib/classes/Hand.js +0 -295
- package/dist/lib/classes/Lobby.d.ts +0 -31
- package/dist/lib/classes/Lobby.js +0 -146
- package/dist/lib/classes/Match.d.ts +0 -21
- package/dist/lib/classes/Match.js +0 -90
- package/dist/lib/classes/Play.d.ts +0 -22
- package/dist/lib/classes/Play.js +0 -47
- package/dist/lib/classes/Player.d.ts +0 -36
- package/dist/lib/classes/Player.js +0 -117
- package/dist/lib/classes/Queue.d.ts +0 -5
- package/dist/lib/classes/Queue.js +0 -15
- package/dist/lib/classes/Round.d.ts +0 -17
- package/dist/lib/classes/Round.js +0 -33
- package/dist/lib/classes/Table.d.ts +0 -12
- package/dist/lib/classes/Table.js +0 -38
- package/dist/lib/classes/Team.d.ts +0 -20
- package/dist/lib/classes/Team.js +0 -59
- package/dist/lib/classes/Truco.d.ts +0 -30
- package/dist/lib/classes/Truco.js +0 -97
- package/dist/lib/classes/index.d.ts +0 -11
- package/dist/lib/classes/index.js +0 -27
- package/dist/lib/index.d.ts +0 -2
- package/dist/lib/index.js +0 -18
- package/dist/lib/types.d.ts +0 -44
- package/dist/lib/types.js +0 -21
- package/dist/lib/utils.d.ts +0 -5
- package/dist/lib/utils.js +0 -58
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CARDS } from "./lib/constants";
|
|
2
2
|
export interface ISaidCommand {
|
|
3
3
|
player: IPlayer | IPublicPlayer;
|
|
4
4
|
command: ECommand | number;
|
|
@@ -42,7 +42,7 @@ export interface IChatRoom {
|
|
|
42
42
|
id: string;
|
|
43
43
|
messages: Array<IChatMessage>;
|
|
44
44
|
send(user: IChatMessage["user"], message: string): void;
|
|
45
|
-
card(user: IChatMessage["user"],
|
|
45
|
+
card(user: IChatMessage["user"], card: ICard): void;
|
|
46
46
|
command(team: 0 | 1, command: ECommand | number): void;
|
|
47
47
|
system(message: string): void;
|
|
48
48
|
emit(message?: IChatMessage): void;
|
|
@@ -90,28 +90,9 @@ export declare enum EHandState {
|
|
|
90
90
|
FINISHED = "FINISHED"
|
|
91
91
|
}
|
|
92
92
|
export type ECommand = ESayCommand | EEnvidoCommand | EAnswerCommand | EEnvidoAnswerCommand | ETrucoCommand | EFlorCommand;
|
|
93
|
-
export declare enum GAME_ERROR {
|
|
94
|
-
MATCH_ALREADY_STARTED = "MATCH_ALREADY_STARTED",
|
|
95
|
-
LOBBY_IS_FULL = "LOBBY_IS_FULL",
|
|
96
|
-
UNEXPECTED_TEAM_SIZE = "UNEXPECTED_TEAM_SIZE",
|
|
97
|
-
TEAM_NOT_READY = "TEAM_NOT_READY",
|
|
98
|
-
TEAM_IS_FULL = "TEAM_IS_FULL"
|
|
99
|
-
}
|
|
100
93
|
export type IHandCommands = {
|
|
101
94
|
[key in ECommand]: (player: IPlayer) => void;
|
|
102
95
|
};
|
|
103
|
-
export type IEnvidoCalculatorResult = {
|
|
104
|
-
accept: number;
|
|
105
|
-
decline: number;
|
|
106
|
-
next: Array<ECommand>;
|
|
107
|
-
};
|
|
108
|
-
export type IEnvidoCalculatorArgs = {
|
|
109
|
-
teams: [ITeam, ITeam];
|
|
110
|
-
matchPoint: number;
|
|
111
|
-
};
|
|
112
|
-
export type IEnvidoCalculator = {
|
|
113
|
-
[key in EEnvidoCommand]: (args?: IEnvidoCalculatorArgs) => IEnvidoCalculatorResult;
|
|
114
|
-
};
|
|
115
96
|
export declare enum EServerEvent {
|
|
116
97
|
PONG = "PONG",
|
|
117
98
|
PREVIOUS_HAND = "PREVIOUS_HAND",
|
|
@@ -194,3 +175,103 @@ export declare class TMap<K, V> extends Map<K, V> {
|
|
|
194
175
|
findAll(finder: (value: V) => boolean): V[];
|
|
195
176
|
getOrThrow(key?: K): NonNullable<V>;
|
|
196
177
|
}
|
|
178
|
+
export declare enum GAME_ERROR {
|
|
179
|
+
MATCH_ALREADY_STARTED = "MATCH_ALREADY_STARTED",
|
|
180
|
+
LOBBY_IS_FULL = "LOBBY_IS_FULL",
|
|
181
|
+
UNEXPECTED_TEAM_SIZE = "UNEXPECTED_TEAM_SIZE",
|
|
182
|
+
TEAM_NOT_READY = "TEAM_NOT_READY",
|
|
183
|
+
TEAM_IS_FULL = "TEAM_IS_FULL",
|
|
184
|
+
INVALID_ENVIDO_POINTS = "INVALID_ENVIDO_POINTS",
|
|
185
|
+
ENVIDO_NOT_ACCEPTED = "ENVIDO_NOT_ACCEPTED",
|
|
186
|
+
INVALID_COMAND = "INVALID_COMAND"
|
|
187
|
+
}
|
|
188
|
+
export interface EnvidoState {
|
|
189
|
+
accept: number;
|
|
190
|
+
decline: number;
|
|
191
|
+
teamIdx: 0 | 1 | null;
|
|
192
|
+
}
|
|
193
|
+
export type IEnvidoCalculatorResult = {
|
|
194
|
+
accept: number;
|
|
195
|
+
decline: number;
|
|
196
|
+
replace?: number;
|
|
197
|
+
next: Array<ECommand>;
|
|
198
|
+
};
|
|
199
|
+
export type IFaltaEnvidoCalculatorArgs = {
|
|
200
|
+
teams: [ITeam, ITeam];
|
|
201
|
+
matchPoint: number;
|
|
202
|
+
};
|
|
203
|
+
export type IEnvidoCalculatorArgs = {
|
|
204
|
+
stake: number;
|
|
205
|
+
declineStake: number;
|
|
206
|
+
} & (IFaltaEnvidoCalculatorArgs | never);
|
|
207
|
+
export type IEnvidoCalculator = {
|
|
208
|
+
[key in EEnvidoCommand]: (args?: IEnvidoCalculatorArgs) => IEnvidoCalculatorResult;
|
|
209
|
+
};
|
|
210
|
+
export interface IDeck {
|
|
211
|
+
cards: Array<ICard>;
|
|
212
|
+
usedCards: Array<ICard>;
|
|
213
|
+
takeCard(): ICard;
|
|
214
|
+
takeThree(): [ICard, ICard, ICard];
|
|
215
|
+
shuffle(): IDeck;
|
|
216
|
+
}
|
|
217
|
+
export type ICard = keyof typeof CARDS;
|
|
218
|
+
export interface IPlayedCard {
|
|
219
|
+
get key(): string;
|
|
220
|
+
player: IPlayer | IPublicPlayer;
|
|
221
|
+
card: ICard;
|
|
222
|
+
}
|
|
223
|
+
export interface IHandPoints {
|
|
224
|
+
0: number;
|
|
225
|
+
1: number;
|
|
226
|
+
}
|
|
227
|
+
export type IPublicPlayer = Pick<IPlayer, "id" | "key" | "disabled" | "ready" | "hand" | "envido" | "usedHand" | "prevHand" | "teamIdx" | "session" | "hasFlor" | "isTurn" | "isEnvidoTurn" | "isOwner"> & {
|
|
228
|
+
commands: Array<ECommand>;
|
|
229
|
+
};
|
|
230
|
+
export type IPublicTeam = Pick<ITeam, "points"> & {
|
|
231
|
+
players: Array<IPublicPlayer>;
|
|
232
|
+
};
|
|
233
|
+
export interface IPlayer {
|
|
234
|
+
teamIdx: number;
|
|
235
|
+
id: string;
|
|
236
|
+
key: string;
|
|
237
|
+
session?: string;
|
|
238
|
+
hand: Array<ICard>;
|
|
239
|
+
envido: Array<number>;
|
|
240
|
+
_commands: Set<ECommand>;
|
|
241
|
+
get commands(): Array<ECommand>;
|
|
242
|
+
usedHand: Array<ICard>;
|
|
243
|
+
prevHand: Array<ICard>;
|
|
244
|
+
isTurn: boolean;
|
|
245
|
+
hasFlor: boolean;
|
|
246
|
+
isEnvidoTurn: boolean;
|
|
247
|
+
isOwner: boolean;
|
|
248
|
+
disabled: boolean;
|
|
249
|
+
ready: boolean;
|
|
250
|
+
resetCommands(): void;
|
|
251
|
+
calculateEnvido(): Array<number>;
|
|
252
|
+
setTurn(turn: boolean): void;
|
|
253
|
+
setEnvidoTurn(turn: boolean): void;
|
|
254
|
+
getPublicPlayer(): IPublicPlayer;
|
|
255
|
+
setSession(session: string): void;
|
|
256
|
+
setIsOwner(isOwner: boolean): void;
|
|
257
|
+
enable(): void;
|
|
258
|
+
disable(): void;
|
|
259
|
+
setReady(ready: boolean): void;
|
|
260
|
+
setHand(hand: Array<ICard>): Array<ICard>;
|
|
261
|
+
useCard(idx: number, card: ICard): ICard | null;
|
|
262
|
+
}
|
|
263
|
+
export interface ITeam {
|
|
264
|
+
_players: Map<string, IPlayer>;
|
|
265
|
+
players: Array<IPlayer>;
|
|
266
|
+
points: ITeamPoints;
|
|
267
|
+
getPublicTeam(playerSession?: string): IPublicTeam;
|
|
268
|
+
isTeamDisabled(): boolean;
|
|
269
|
+
disable(player: IPlayer): boolean;
|
|
270
|
+
enable(player?: IPlayer): boolean;
|
|
271
|
+
addPoints(matchPoint: number, points: number): ITeamPoints;
|
|
272
|
+
}
|
|
273
|
+
export interface ITeamPoints {
|
|
274
|
+
buenas: number;
|
|
275
|
+
malas: number;
|
|
276
|
+
winner: boolean;
|
|
277
|
+
}
|
package/dist/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.GAME_ERROR = exports.TMap = exports.ETrucoshiMatchState = exports.EClientEvent = exports.EServerEvent = exports.EHandState = exports.EEnvidoCommand = exports.EEnvidoAnswerCommand = exports.EAnswerCommand = exports.ETrucoCommand = exports.EFlorCommand = exports.ESayCommand = exports.EMatchTableState = exports.EChatSystem = void 0;
|
|
4
4
|
var EChatSystem;
|
|
5
5
|
(function (EChatSystem) {
|
|
6
6
|
EChatSystem[EChatSystem["TEAM_0"] = 0] = "TEAM_0";
|
|
@@ -52,14 +52,6 @@ var EHandState;
|
|
|
52
52
|
EHandState["WAITING_ENVIDO_POINTS_ANSWER"] = "WAITING_ENVIDO_POINTS_ANSWER";
|
|
53
53
|
EHandState["FINISHED"] = "FINISHED";
|
|
54
54
|
})(EHandState = exports.EHandState || (exports.EHandState = {}));
|
|
55
|
-
var GAME_ERROR;
|
|
56
|
-
(function (GAME_ERROR) {
|
|
57
|
-
GAME_ERROR["MATCH_ALREADY_STARTED"] = "MATCH_ALREADY_STARTED";
|
|
58
|
-
GAME_ERROR["LOBBY_IS_FULL"] = "LOBBY_IS_FULL";
|
|
59
|
-
GAME_ERROR["UNEXPECTED_TEAM_SIZE"] = "UNEXPECTED_TEAM_SIZE";
|
|
60
|
-
GAME_ERROR["TEAM_NOT_READY"] = "TEAM_NOT_READY";
|
|
61
|
-
GAME_ERROR["TEAM_IS_FULL"] = "TEAM_IS_FULL";
|
|
62
|
-
})(GAME_ERROR = exports.GAME_ERROR || (exports.GAME_ERROR = {}));
|
|
63
55
|
var EServerEvent;
|
|
64
56
|
(function (EServerEvent) {
|
|
65
57
|
EServerEvent["PONG"] = "PONG";
|
|
@@ -121,3 +113,14 @@ class TMap extends Map {
|
|
|
121
113
|
}
|
|
122
114
|
}
|
|
123
115
|
exports.TMap = TMap;
|
|
116
|
+
var GAME_ERROR;
|
|
117
|
+
(function (GAME_ERROR) {
|
|
118
|
+
GAME_ERROR["MATCH_ALREADY_STARTED"] = "MATCH_ALREADY_STARTED";
|
|
119
|
+
GAME_ERROR["LOBBY_IS_FULL"] = "LOBBY_IS_FULL";
|
|
120
|
+
GAME_ERROR["UNEXPECTED_TEAM_SIZE"] = "UNEXPECTED_TEAM_SIZE";
|
|
121
|
+
GAME_ERROR["TEAM_NOT_READY"] = "TEAM_NOT_READY";
|
|
122
|
+
GAME_ERROR["TEAM_IS_FULL"] = "TEAM_IS_FULL";
|
|
123
|
+
GAME_ERROR["INVALID_ENVIDO_POINTS"] = "INVALID_ENVIDO_POINTS";
|
|
124
|
+
GAME_ERROR["ENVIDO_NOT_ACCEPTED"] = "ENVIDO_NOT_ACCEPTED";
|
|
125
|
+
GAME_ERROR["INVALID_COMAND"] = "INVALID_COMAND";
|
|
126
|
+
})(GAME_ERROR = exports.GAME_ERROR || (exports.GAME_ERROR = {}));
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trucoshi",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"main": "dist/
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"main": "dist/types.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
7
|
+
"start": "nodemon",
|
|
8
|
+
"profiler": "yarn build && node --prof ./bin/trucoshi-server",
|
|
9
9
|
"build": "yarn run rimraf ./dist && yarn run tsc --project .",
|
|
10
10
|
"prepublishOnly": "yarn test && yarn build",
|
|
11
11
|
"test": "yarn run ts-mocha --exit ./test/**/*.ts",
|
|
@@ -24,17 +24,19 @@
|
|
|
24
24
|
"ts-mocha": "^10.0.0"
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
|
-
"dist/
|
|
28
|
-
"dist/
|
|
27
|
+
"dist/lib/constants.js",
|
|
28
|
+
"dist/lib/constants.d.ts",
|
|
29
29
|
"dist/types.js",
|
|
30
|
-
"dist/types.d.ts"
|
|
31
|
-
"dist/lib/**/*"
|
|
30
|
+
"dist/types.d.ts"
|
|
32
31
|
],
|
|
33
32
|
"dependencies": {
|
|
33
|
+
"@types/pino": "^7.0.5",
|
|
34
|
+
"pino": "^8.11.0",
|
|
35
|
+
"pino-pretty": "^10.0.0",
|
|
34
36
|
"rimraf": "^4.1.1",
|
|
35
37
|
"socket.io": "^4.5.4",
|
|
36
38
|
"ts-node": "^10.9.1",
|
|
37
39
|
"tsc": "^2.0.4",
|
|
38
40
|
"typescript": "^4.9.4"
|
|
39
41
|
}
|
|
40
|
-
}
|
|
42
|
+
}
|
package/dist/index.d.ts
DELETED
package/dist/index.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./lib"), exports);
|
|
18
|
-
__exportStar(require("./types"), exports);
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { CARDS } from "../constants";
|
|
2
|
-
import { IPlayer, IPublicPlayer } from "./Player";
|
|
3
|
-
export interface IDeck {
|
|
4
|
-
cards: Array<ICard>;
|
|
5
|
-
usedCards: Array<ICard>;
|
|
6
|
-
takeCard(): ICard;
|
|
7
|
-
takeThree(): [ICard, ICard, ICard];
|
|
8
|
-
shuffle(): IDeck;
|
|
9
|
-
}
|
|
10
|
-
export type ICard = keyof typeof CARDS;
|
|
11
|
-
export interface IPlayedCard {
|
|
12
|
-
get key(): string;
|
|
13
|
-
player: IPlayer | IPublicPlayer;
|
|
14
|
-
card: ICard;
|
|
15
|
-
}
|
|
16
|
-
export declare function Deck(): IDeck;
|
|
17
|
-
export declare function PlayedCard(player: IPlayer | IPublicPlayer, card: ICard): IPlayedCard;
|
package/dist/lib/classes/Deck.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PlayedCard = exports.Deck = void 0;
|
|
4
|
-
const constants_1 = require("../constants");
|
|
5
|
-
const utils_1 = require("../utils");
|
|
6
|
-
function Deck() {
|
|
7
|
-
const deck = {
|
|
8
|
-
cards: Object.keys(constants_1.CARDS),
|
|
9
|
-
usedCards: [],
|
|
10
|
-
takeCard() {
|
|
11
|
-
const card = deck.cards.shift();
|
|
12
|
-
deck.usedCards.push(card);
|
|
13
|
-
return card;
|
|
14
|
-
},
|
|
15
|
-
takeThree() {
|
|
16
|
-
return [deck.takeCard(), deck.takeCard(), deck.takeCard()];
|
|
17
|
-
},
|
|
18
|
-
shuffle() {
|
|
19
|
-
deck.cards = deck.cards.concat(deck.usedCards);
|
|
20
|
-
deck.usedCards = [];
|
|
21
|
-
deck.cards = (0, utils_1.shuffleArray)(deck.cards);
|
|
22
|
-
if (deck.cards.length !== 40) {
|
|
23
|
-
throw new Error("This is not good");
|
|
24
|
-
}
|
|
25
|
-
return deck;
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
return deck;
|
|
29
|
-
}
|
|
30
|
-
exports.Deck = Deck;
|
|
31
|
-
function PlayedCard(player, card) {
|
|
32
|
-
const pc = {
|
|
33
|
-
player,
|
|
34
|
-
card,
|
|
35
|
-
get key() {
|
|
36
|
-
return card + player.key;
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
return pc;
|
|
40
|
-
}
|
|
41
|
-
exports.PlayedCard = PlayedCard;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { ECommand, EEnvidoCommand } from "../../types";
|
|
2
|
-
import { IEnvidoCalculator } from "../types";
|
|
3
|
-
import { IPlayer } from "./Player";
|
|
4
|
-
import { ITable } from "./Table";
|
|
5
|
-
import { ITeam } from "./Team";
|
|
6
|
-
export interface IEnvido {
|
|
7
|
-
started: boolean;
|
|
8
|
-
accepted: boolean;
|
|
9
|
-
answered: boolean;
|
|
10
|
-
finished: boolean;
|
|
11
|
-
possibleAnswerCommands: Array<ECommand>;
|
|
12
|
-
stake: number;
|
|
13
|
-
declineStake: number;
|
|
14
|
-
teamIdx: 0 | 1 | null;
|
|
15
|
-
answer: boolean | null;
|
|
16
|
-
pointAnswersCount: number;
|
|
17
|
-
winningPointsAnswer: number;
|
|
18
|
-
turn: number;
|
|
19
|
-
winningPlayer: IPlayer | null;
|
|
20
|
-
winner: ITeam | null;
|
|
21
|
-
teams: [ITeam, ITeam];
|
|
22
|
-
players: Array<IPlayer>;
|
|
23
|
-
currentPlayer: IPlayer | null;
|
|
24
|
-
generator: Generator<IEnvido, void, unknown>;
|
|
25
|
-
sayPoints(player: IPlayer, points: number): IEnvido;
|
|
26
|
-
sayEnvido(command: EEnvidoCommand, player: IPlayer): IEnvido;
|
|
27
|
-
sayAnswer(player: IPlayer, answer: boolean | null): IEnvido;
|
|
28
|
-
setTurn(turn: number): number;
|
|
29
|
-
setTeam(idx: 0 | 1): 0 | 1;
|
|
30
|
-
setCurrentPlayer(player: IPlayer | null): IPlayer | null;
|
|
31
|
-
getNextPlayer(): IteratorResult<IEnvido, IEnvido | void>;
|
|
32
|
-
}
|
|
33
|
-
export declare const EnvidoCalculator: IEnvidoCalculator;
|
|
34
|
-
export declare function Envido(teams: [ITeam, ITeam], matchPoint: number, table: ITable): IEnvido;
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Envido = exports.EnvidoCalculator = void 0;
|
|
4
|
-
const types_1 = require("../../types");
|
|
5
|
-
const types_2 = require("../types");
|
|
6
|
-
const utils_1 = require("../utils");
|
|
7
|
-
const EMPTY_ENVIDO = {
|
|
8
|
-
turn: 0,
|
|
9
|
-
teamIdx: null,
|
|
10
|
-
answer: null,
|
|
11
|
-
winningPlayer: null,
|
|
12
|
-
currentPlayer: null,
|
|
13
|
-
players: [],
|
|
14
|
-
};
|
|
15
|
-
exports.EnvidoCalculator = {
|
|
16
|
-
[types_1.EEnvidoCommand.ENVIDO]: (args) => {
|
|
17
|
-
if (!args || args.stake === undefined || args.declineStake === undefined) {
|
|
18
|
-
throw new Error("Envido calculator arguments are undefined");
|
|
19
|
-
}
|
|
20
|
-
const next = [
|
|
21
|
-
types_1.EEnvidoCommand.REAL_ENVIDO,
|
|
22
|
-
types_1.EEnvidoCommand.FALTA_ENVIDO,
|
|
23
|
-
types_1.EAnswerCommand.QUIERO,
|
|
24
|
-
types_1.EAnswerCommand.NO_QUIERO,
|
|
25
|
-
];
|
|
26
|
-
return {
|
|
27
|
-
accept: 2,
|
|
28
|
-
decline: 1,
|
|
29
|
-
next: args.stake < 2 ? [types_1.EEnvidoCommand.ENVIDO, ...next] : next,
|
|
30
|
-
};
|
|
31
|
-
},
|
|
32
|
-
[types_1.EEnvidoCommand.REAL_ENVIDO]: () => ({
|
|
33
|
-
accept: 3,
|
|
34
|
-
decline: 1,
|
|
35
|
-
next: [types_1.EEnvidoCommand.FALTA_ENVIDO, types_1.EAnswerCommand.QUIERO, types_1.EAnswerCommand.NO_QUIERO],
|
|
36
|
-
}),
|
|
37
|
-
[types_1.EEnvidoCommand.FALTA_ENVIDO]: (args) => {
|
|
38
|
-
if (!args || !args.teams || !args.matchPoint) {
|
|
39
|
-
throw new Error("Envido calculator arguments are undefined");
|
|
40
|
-
}
|
|
41
|
-
const { teams, matchPoint } = args;
|
|
42
|
-
const totals = teams.map((team) => team.points.malas + team.points.buenas);
|
|
43
|
-
const higher = (0, utils_1.getMaxNumberIndex)(totals);
|
|
44
|
-
const points = teams[higher].points;
|
|
45
|
-
const accept = points.buenas > 0 ? matchPoint - points.buenas : matchPoint - points.malas;
|
|
46
|
-
return {
|
|
47
|
-
accept: 0,
|
|
48
|
-
decline: 2,
|
|
49
|
-
replace: accept,
|
|
50
|
-
next: [types_1.EAnswerCommand.QUIERO, types_1.EAnswerCommand.NO_QUIERO],
|
|
51
|
-
};
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
function Envido(teams, matchPoint, table) {
|
|
55
|
-
function* envidoAnswerGeneratorSequence() {
|
|
56
|
-
let i = 0;
|
|
57
|
-
while (i < envido.players.length && (envido.answer === null || envido.winner === null)) {
|
|
58
|
-
const player = envido.players[envido.turn];
|
|
59
|
-
envido.setCurrentPlayer(player);
|
|
60
|
-
if (player.disabled || !player.ready) {
|
|
61
|
-
envido.setCurrentPlayer(null);
|
|
62
|
-
}
|
|
63
|
-
if (envido.turn >= envido.players.length - 1) {
|
|
64
|
-
envido.setTurn(0);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
envido.setTurn(envido.turn + 1);
|
|
68
|
-
}
|
|
69
|
-
i++;
|
|
70
|
-
yield envido;
|
|
71
|
-
}
|
|
72
|
-
envido.setCurrentPlayer(null);
|
|
73
|
-
yield envido;
|
|
74
|
-
}
|
|
75
|
-
const envido = Object.assign(Object.assign({}, EMPTY_ENVIDO), { started: false, finished: false, answered: false, accepted: false, possibleAnswerCommands: Object.values(types_1.EEnvidoCommand), declineStake: 0, winningPointsAnswer: 0, pointAnswersCount: 0, winner: null, stake: 0, teams, generator: envidoAnswerGeneratorSequence(), sayEnvido(command, player) {
|
|
76
|
-
const playerTeamIdx = player.teamIdx;
|
|
77
|
-
if (envido.teamIdx !== playerTeamIdx && envido.possibleAnswerCommands.includes(command)) {
|
|
78
|
-
const opponentIdx = Number(!playerTeamIdx);
|
|
79
|
-
const { accept, decline, replace, next } = exports.EnvidoCalculator[command]({
|
|
80
|
-
stake: envido.stake,
|
|
81
|
-
declineStake: envido.declineStake,
|
|
82
|
-
teams,
|
|
83
|
-
matchPoint,
|
|
84
|
-
});
|
|
85
|
-
envido.teamIdx = playerTeamIdx;
|
|
86
|
-
envido.stake += accept;
|
|
87
|
-
envido.declineStake += decline;
|
|
88
|
-
envido.generator = envidoAnswerGeneratorSequence();
|
|
89
|
-
envido.players = teams[opponentIdx].players;
|
|
90
|
-
envido.started = true;
|
|
91
|
-
envido.answered = false;
|
|
92
|
-
if (replace) {
|
|
93
|
-
envido.stake = replace;
|
|
94
|
-
}
|
|
95
|
-
envido.possibleAnswerCommands = next;
|
|
96
|
-
}
|
|
97
|
-
return envido;
|
|
98
|
-
},
|
|
99
|
-
sayPoints(player, points) {
|
|
100
|
-
if (!envido.accepted) {
|
|
101
|
-
throw new Error(types_2.GAME_ERROR.ENVIDO_NOT_ACCEPTED);
|
|
102
|
-
}
|
|
103
|
-
if (!envido.winningPlayer || !envido.winningPointsAnswer) {
|
|
104
|
-
envido.winningPlayer = player;
|
|
105
|
-
envido.winningPointsAnswer = points;
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
if (points > envido.winningPointsAnswer) {
|
|
109
|
-
envido.winningPlayer = player;
|
|
110
|
-
envido.winningPointsAnswer = points;
|
|
111
|
-
}
|
|
112
|
-
if (points === envido.winningPointsAnswer) {
|
|
113
|
-
const forehandWinner = table.getPlayerPosition(player.key, true) <
|
|
114
|
-
table.getPlayerPosition(envido.winningPlayer.key, true)
|
|
115
|
-
? player
|
|
116
|
-
: envido.winningPlayer;
|
|
117
|
-
envido.winningPlayer = forehandWinner;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
envido.pointAnswersCount++;
|
|
121
|
-
if (envido.pointAnswersCount >= envido.players.length) {
|
|
122
|
-
envido.finished = true;
|
|
123
|
-
envido.winner = teams[envido.winningPlayer.teamIdx];
|
|
124
|
-
}
|
|
125
|
-
return envido;
|
|
126
|
-
},
|
|
127
|
-
sayAnswer(player, answer) {
|
|
128
|
-
const opponentIdx = Number(!player.teamIdx);
|
|
129
|
-
if (answer === null || player.teamIdx === envido.teamIdx) {
|
|
130
|
-
return envido;
|
|
131
|
-
}
|
|
132
|
-
if (answer) {
|
|
133
|
-
envido.accepted = true;
|
|
134
|
-
envido.generator = envidoAnswerGeneratorSequence();
|
|
135
|
-
envido.turn = 0;
|
|
136
|
-
table.players.forEach((player) => player.calculateEnvido());
|
|
137
|
-
envido.players = table.getPlayersForehandFirst();
|
|
138
|
-
}
|
|
139
|
-
if (answer === false) {
|
|
140
|
-
envido.finished = true;
|
|
141
|
-
const opponentTeam = teams[opponentIdx];
|
|
142
|
-
opponentTeam.addPoints(matchPoint, envido.declineStake);
|
|
143
|
-
envido.winner = opponentTeam;
|
|
144
|
-
}
|
|
145
|
-
envido.answered = true;
|
|
146
|
-
envido.teamIdx = opponentIdx;
|
|
147
|
-
envido.answer = answer;
|
|
148
|
-
envido.turn = 0;
|
|
149
|
-
return envido;
|
|
150
|
-
},
|
|
151
|
-
setTeam(idx) {
|
|
152
|
-
envido.teamIdx = idx;
|
|
153
|
-
return envido.teamIdx;
|
|
154
|
-
},
|
|
155
|
-
setTurn(turn) {
|
|
156
|
-
envido.turn = turn;
|
|
157
|
-
return envido.turn;
|
|
158
|
-
},
|
|
159
|
-
setCurrentPlayer(player) {
|
|
160
|
-
envido.currentPlayer = player;
|
|
161
|
-
return envido.currentPlayer;
|
|
162
|
-
},
|
|
163
|
-
getNextPlayer() {
|
|
164
|
-
return envido.generator.next();
|
|
165
|
-
} });
|
|
166
|
-
return envido;
|
|
167
|
-
}
|
|
168
|
-
exports.Envido = Envido;
|
|
File without changes
|
package/dist/lib/classes/Flor.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { IHand } from "./Hand";
|
|
2
|
-
import { IMatch } from "./Match";
|
|
3
|
-
import { IPlayInstance } from "./Play";
|
|
4
|
-
import { IPlayer } from "./Player";
|
|
5
|
-
import { ITeam } from "./Team";
|
|
6
|
-
export type IWinnerCallback = (winner: ITeam, teams: [ITeam, ITeam]) => Promise<void>;
|
|
7
|
-
export type ITurnCallback = (play: IPlayInstance) => Promise<void>;
|
|
8
|
-
export type ITrucoCallback = (play: IPlayInstance) => Promise<void>;
|
|
9
|
-
export type IHandFinishedCallback = (hand: IHand | null) => Promise<void>;
|
|
10
|
-
export type IEnvidoCallback = (play: IPlayInstance, pointsRound: boolean) => Promise<void>;
|
|
11
|
-
export interface IGameLoop {
|
|
12
|
-
_onTruco: ITrucoCallback;
|
|
13
|
-
_onTurn: ITurnCallback;
|
|
14
|
-
_onWinner: IWinnerCallback;
|
|
15
|
-
_onEnvido: IEnvidoCallback;
|
|
16
|
-
_onHandFinished: IHandFinishedCallback;
|
|
17
|
-
currentPlayer: IPlayer | null;
|
|
18
|
-
currentHand: IHand | null;
|
|
19
|
-
teams: Array<ITeam>;
|
|
20
|
-
winner: ITeam | null;
|
|
21
|
-
onTurn: (callback: ITurnCallback) => IGameLoop;
|
|
22
|
-
onWinner: (callback: IWinnerCallback) => IGameLoop;
|
|
23
|
-
onTruco: (callback: ITrucoCallback) => IGameLoop;
|
|
24
|
-
onEnvido: (callback: IEnvidoCallback) => IGameLoop;
|
|
25
|
-
onHandFinished: (callback: IHandFinishedCallback) => IGameLoop;
|
|
26
|
-
begin: () => Promise<void>;
|
|
27
|
-
}
|
|
28
|
-
export declare const GameLoop: (match: IMatch) => IGameLoop;
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.GameLoop = void 0;
|
|
13
|
-
const types_1 = require("../../types");
|
|
14
|
-
const GameLoop = (match) => {
|
|
15
|
-
let gameloop = {
|
|
16
|
-
_onEnvido: () => Promise.resolve(),
|
|
17
|
-
_onTruco: () => Promise.resolve(),
|
|
18
|
-
_onTurn: () => Promise.resolve(),
|
|
19
|
-
_onWinner: () => Promise.resolve(),
|
|
20
|
-
_onHandFinished: () => Promise.resolve(),
|
|
21
|
-
teams: [],
|
|
22
|
-
winner: null,
|
|
23
|
-
currentPlayer: null,
|
|
24
|
-
currentHand: null,
|
|
25
|
-
onHandFinished: (callback) => {
|
|
26
|
-
gameloop._onHandFinished = callback;
|
|
27
|
-
return gameloop;
|
|
28
|
-
},
|
|
29
|
-
onTruco: (callback) => {
|
|
30
|
-
gameloop._onTruco = callback;
|
|
31
|
-
return gameloop;
|
|
32
|
-
},
|
|
33
|
-
onTurn: (callback) => {
|
|
34
|
-
gameloop._onTurn = callback;
|
|
35
|
-
return gameloop;
|
|
36
|
-
},
|
|
37
|
-
onWinner: (callback) => {
|
|
38
|
-
gameloop._onWinner = callback;
|
|
39
|
-
return gameloop;
|
|
40
|
-
},
|
|
41
|
-
onEnvido: (callback) => {
|
|
42
|
-
gameloop._onEnvido = callback;
|
|
43
|
-
return gameloop;
|
|
44
|
-
},
|
|
45
|
-
begin() {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
gameloop.teams = match.teams;
|
|
48
|
-
while (!match.winner) {
|
|
49
|
-
const play = match.play();
|
|
50
|
-
gameloop.currentHand = match.currentHand;
|
|
51
|
-
if (!play) {
|
|
52
|
-
try {
|
|
53
|
-
yield gameloop._onHandFinished(match.prevHand);
|
|
54
|
-
}
|
|
55
|
-
catch (e) {
|
|
56
|
-
console.error("GAME LOOP ERROR - ON HAND FINISHED");
|
|
57
|
-
}
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
if (!play.player) {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
gameloop.currentPlayer = play.player;
|
|
64
|
-
if (play.state === types_1.EHandState.WAITING_ENVIDO_ANSWER) {
|
|
65
|
-
try {
|
|
66
|
-
play.player.setTurn(true);
|
|
67
|
-
yield gameloop._onEnvido(play, false);
|
|
68
|
-
play.player.setTurn(false);
|
|
69
|
-
}
|
|
70
|
-
catch (e) {
|
|
71
|
-
console.error("GAME LOOP ERROR - WAITING ENVIDO ANSWER", e);
|
|
72
|
-
}
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (play.state === types_1.EHandState.WAITING_ENVIDO_POINTS_ANSWER) {
|
|
76
|
-
try {
|
|
77
|
-
play.player.setEnvidoTurn(true);
|
|
78
|
-
yield gameloop._onEnvido(play, true);
|
|
79
|
-
play.player.setEnvidoTurn(false);
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
console.error("GAME LOOP ERROR - WAITING ENVIDO POINTS ANSWER", e);
|
|
83
|
-
}
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (play.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
|
|
87
|
-
try {
|
|
88
|
-
yield gameloop._onTruco(play);
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
91
|
-
console.error("GAME LOOP ERROR - WAITING TRUCO ANSWER", e);
|
|
92
|
-
}
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
if (play.state === types_1.EHandState.WAITING_PLAY) {
|
|
96
|
-
try {
|
|
97
|
-
play.player.setTurn(true);
|
|
98
|
-
yield gameloop._onTurn(play);
|
|
99
|
-
play.player.setTurn(false);
|
|
100
|
-
}
|
|
101
|
-
catch (e) {
|
|
102
|
-
console.error("GAME LOOP ERROR - WAITING PLAY", e);
|
|
103
|
-
}
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
gameloop.winner = match.winner;
|
|
108
|
-
gameloop.currentPlayer = null;
|
|
109
|
-
yield gameloop._onWinner(match.winner, match.teams);
|
|
110
|
-
});
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
return gameloop;
|
|
114
|
-
};
|
|
115
|
-
exports.GameLoop = GameLoop;
|