trucoshi 0.3.4 → 0.3.5

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.
Files changed (42) hide show
  1. package/LICENSE +674 -674
  2. package/README.md +60 -60
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.js +18 -18
  5. package/dist/lib/classes/Deck.d.ts +17 -17
  6. package/dist/lib/classes/Deck.js +41 -41
  7. package/dist/lib/classes/Envido.d.ts +34 -34
  8. package/dist/lib/classes/Envido.js +168 -167
  9. package/dist/lib/classes/Flor.js +1 -1
  10. package/dist/lib/classes/GameLoop.d.ts +26 -26
  11. package/dist/lib/classes/GameLoop.js +106 -105
  12. package/dist/lib/classes/Hand.d.ts +43 -43
  13. package/dist/lib/classes/Hand.js +295 -295
  14. package/dist/lib/classes/Lobby.d.ts +27 -27
  15. package/dist/lib/classes/Lobby.js +113 -113
  16. package/dist/lib/classes/Match.d.ts +21 -21
  17. package/dist/lib/classes/Match.js +88 -88
  18. package/dist/lib/classes/Play.d.ts +22 -22
  19. package/dist/lib/classes/Play.js +44 -44
  20. package/dist/lib/classes/Player.d.ts +35 -35
  21. package/dist/lib/classes/Player.js +126 -126
  22. package/dist/lib/classes/Round.d.ts +17 -17
  23. package/dist/lib/classes/Round.js +33 -33
  24. package/dist/lib/classes/Table.d.ts +12 -12
  25. package/dist/lib/classes/Table.js +38 -38
  26. package/dist/lib/classes/Team.d.ts +20 -20
  27. package/dist/lib/classes/Team.js +59 -59
  28. package/dist/lib/classes/Truco.d.ts +30 -30
  29. package/dist/lib/classes/Truco.js +97 -97
  30. package/dist/lib/classes/index.d.ts +11 -11
  31. package/dist/lib/classes/index.js +27 -27
  32. package/dist/lib/constants.d.ts +43 -43
  33. package/dist/lib/constants.js +46 -46
  34. package/dist/lib/index.d.ts +2 -2
  35. package/dist/lib/index.js +18 -18
  36. package/dist/lib/types.d.ts +44 -44
  37. package/dist/lib/types.js +21 -21
  38. package/dist/lib/utils.d.ts +5 -5
  39. package/dist/lib/utils.js +58 -58
  40. package/dist/types.d.ts +193 -184
  41. package/dist/types.js +123 -121
  42. package/package.json +1 -1
@@ -1,167 +1,168 @@
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
- }
144
- envido.answered = true;
145
- envido.teamIdx = opponentIdx;
146
- envido.answer = answer;
147
- envido.turn = 0;
148
- return envido;
149
- },
150
- setTeam(idx) {
151
- envido.teamIdx = idx;
152
- return envido.teamIdx;
153
- },
154
- setTurn(turn) {
155
- envido.turn = turn;
156
- return envido.turn;
157
- },
158
- setCurrentPlayer(player) {
159
- envido.currentPlayer = player;
160
- return envido.currentPlayer;
161
- },
162
- getNextPlayer() {
163
- return envido.generator.next();
164
- } });
165
- return envido;
166
- }
167
- exports.Envido = Envido;
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;
@@ -1 +1 @@
1
- "use strict";
1
+ "use strict";
@@ -1,26 +1,26 @@
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, newHandJustStarted: boolean) => Promise<void>;
8
- export type ITrucoCallback = (play: IPlayInstance) => Promise<void>;
9
- export type IEnvidoCallback = (play: IPlayInstance, pointsRound: boolean) => Promise<void>;
10
- export interface IGameLoop {
11
- _onTruco: ITrucoCallback;
12
- _onTurn: ITurnCallback;
13
- _onWinner: IWinnerCallback;
14
- _onEnvido: IEnvidoCallback;
15
- currentPlayer: IPlayer | null;
16
- currentHand: IHand | null;
17
- lastCheckedHand: number | null;
18
- teams: Array<ITeam>;
19
- winner: ITeam | null;
20
- onTurn: (callback: ITurnCallback) => IGameLoop;
21
- onWinner: (callback: IWinnerCallback) => IGameLoop;
22
- onTruco: (callback: ITrucoCallback) => IGameLoop;
23
- onEnvido: (callback: IEnvidoCallback) => IGameLoop;
24
- begin: () => Promise<void>;
25
- }
26
- export declare const GameLoop: (match: IMatch) => IGameLoop;
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, newHandJustStarted: boolean) => Promise<void>;
8
+ export type ITrucoCallback = (play: IPlayInstance) => Promise<void>;
9
+ export type IEnvidoCallback = (play: IPlayInstance, pointsRound: boolean) => Promise<void>;
10
+ export interface IGameLoop {
11
+ _onTruco: ITrucoCallback;
12
+ _onTurn: ITurnCallback;
13
+ _onWinner: IWinnerCallback;
14
+ _onEnvido: IEnvidoCallback;
15
+ currentPlayer: IPlayer | null;
16
+ currentHand: IHand | null;
17
+ lastCheckedHand: number | null;
18
+ teams: Array<ITeam>;
19
+ winner: ITeam | null;
20
+ onTurn: (callback: ITurnCallback) => IGameLoop;
21
+ onWinner: (callback: IWinnerCallback) => IGameLoop;
22
+ onTruco: (callback: ITrucoCallback) => IGameLoop;
23
+ onEnvido: (callback: IEnvidoCallback) => IGameLoop;
24
+ begin: () => Promise<void>;
25
+ }
26
+ export declare const GameLoop: (match: IMatch) => IGameLoop;
@@ -1,105 +1,106 @@
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
- teams: [],
21
- winner: null,
22
- currentPlayer: null,
23
- currentHand: null,
24
- lastCheckedHand: null,
25
- onTruco: (callback) => {
26
- gameloop._onTruco = callback;
27
- return gameloop;
28
- },
29
- onTurn: (callback) => {
30
- gameloop._onTurn = callback;
31
- return gameloop;
32
- },
33
- onWinner: (callback) => {
34
- gameloop._onWinner = callback;
35
- return gameloop;
36
- },
37
- onEnvido: (callback) => {
38
- gameloop._onEnvido = callback;
39
- return gameloop;
40
- },
41
- begin() {
42
- var _a;
43
- return __awaiter(this, void 0, void 0, function* () {
44
- gameloop.teams = match.teams;
45
- while (!match.winner) {
46
- const play = match.play();
47
- gameloop.currentHand = match.currentHand;
48
- if (!play || !play.player) {
49
- continue;
50
- }
51
- gameloop.currentPlayer = play.player;
52
- if (play.state === types_1.EHandState.WAITING_ENVIDO_ANSWER) {
53
- try {
54
- play.player.setTurn(true);
55
- yield gameloop._onEnvido(play, false);
56
- play.player.setTurn(false);
57
- }
58
- catch (e) {
59
- console.error("GAME LOOP ERROR - WAITING ENVIDO ANSWER", e);
60
- }
61
- continue;
62
- }
63
- if (play.state === types_1.EHandState.WAITING_ENVIDO_POINTS_ANSWER) {
64
- try {
65
- play.player.setEnvidoTurn(true);
66
- yield gameloop._onEnvido(play, true);
67
- play.player.setEnvidoTurn(false);
68
- }
69
- catch (e) {
70
- console.error("GAME LOOP ERROR - WAITING ENVIDO POINTS ANSWER", e);
71
- }
72
- continue;
73
- }
74
- if (play.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
75
- try {
76
- yield gameloop._onTruco(play);
77
- }
78
- catch (e) {
79
- console.error("GAME LOOP ERROR - WAITING TRUCO ANSWER", e);
80
- }
81
- continue;
82
- }
83
- if (play.state === types_1.EHandState.WAITING_PLAY) {
84
- try {
85
- play.player.setTurn(true);
86
- const newHandJustStarted = gameloop.lastCheckedHand !== ((_a = play.prevHand) === null || _a === void 0 ? void 0 : _a.idx);
87
- gameloop.lastCheckedHand = play.prevHand ? play.prevHand.idx : null;
88
- yield gameloop._onTurn(play, newHandJustStarted);
89
- play.player.setTurn(false);
90
- }
91
- catch (e) {
92
- console.error("GAME LOOP ERROR - WAITING PLAY", e);
93
- }
94
- continue;
95
- }
96
- }
97
- gameloop.winner = match.winner;
98
- gameloop.currentPlayer = null;
99
- yield gameloop._onWinner(match.winner, match.teams);
100
- });
101
- },
102
- };
103
- return gameloop;
104
- };
105
- exports.GameLoop = GameLoop;
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
+ teams: [],
21
+ winner: null,
22
+ currentPlayer: null,
23
+ currentHand: null,
24
+ lastCheckedHand: null,
25
+ onTruco: (callback) => {
26
+ gameloop._onTruco = callback;
27
+ return gameloop;
28
+ },
29
+ onTurn: (callback) => {
30
+ gameloop._onTurn = callback;
31
+ return gameloop;
32
+ },
33
+ onWinner: (callback) => {
34
+ gameloop._onWinner = callback;
35
+ return gameloop;
36
+ },
37
+ onEnvido: (callback) => {
38
+ gameloop._onEnvido = callback;
39
+ return gameloop;
40
+ },
41
+ begin() {
42
+ var _a, _b;
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ gameloop.teams = match.teams;
45
+ while (!match.winner) {
46
+ const play = match.play();
47
+ gameloop.currentHand = match.currentHand;
48
+ if (!play || !play.player) {
49
+ continue;
50
+ }
51
+ gameloop.currentPlayer = play.player;
52
+ if (play.state === types_1.EHandState.WAITING_ENVIDO_ANSWER) {
53
+ try {
54
+ play.player.setTurn(true);
55
+ yield gameloop._onEnvido(play, false);
56
+ play.player.setTurn(false);
57
+ }
58
+ catch (e) {
59
+ console.error("GAME LOOP ERROR - WAITING ENVIDO ANSWER", e);
60
+ }
61
+ continue;
62
+ }
63
+ if (play.state === types_1.EHandState.WAITING_ENVIDO_POINTS_ANSWER) {
64
+ try {
65
+ play.player.setEnvidoTurn(true);
66
+ yield gameloop._onEnvido(play, true);
67
+ play.player.setEnvidoTurn(false);
68
+ }
69
+ catch (e) {
70
+ console.error("GAME LOOP ERROR - WAITING ENVIDO POINTS ANSWER", e);
71
+ }
72
+ continue;
73
+ }
74
+ if (play.state === types_1.EHandState.WAITING_FOR_TRUCO_ANSWER) {
75
+ try {
76
+ yield gameloop._onTruco(play);
77
+ }
78
+ catch (e) {
79
+ console.error("GAME LOOP ERROR - WAITING TRUCO ANSWER", e);
80
+ }
81
+ continue;
82
+ }
83
+ if (play.state === types_1.EHandState.WAITING_PLAY) {
84
+ try {
85
+ play.player.setTurn(true);
86
+ const newHandJustStarted = gameloop.lastCheckedHand !== ((_a = play.prevHand) === null || _a === void 0 ? void 0 : _a.idx) &&
87
+ ((_b = gameloop.currentHand) === null || _b === void 0 ? void 0 : _b.rounds[0].cards.length) === 0;
88
+ gameloop.lastCheckedHand = play.prevHand ? play.prevHand.idx : null;
89
+ yield gameloop._onTurn(play, newHandJustStarted);
90
+ play.player.setTurn(false);
91
+ }
92
+ catch (e) {
93
+ console.error("GAME LOOP ERROR - WAITING PLAY", e);
94
+ }
95
+ continue;
96
+ }
97
+ }
98
+ gameloop.winner = match.winner;
99
+ gameloop.currentPlayer = null;
100
+ yield gameloop._onWinner(match.winner, match.teams);
101
+ });
102
+ },
103
+ };
104
+ return gameloop;
105
+ };
106
+ exports.GameLoop = GameLoop;