@gamepark/odin 0.0.2 → 0.0.3
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/OdinRules.d.ts +2 -3
- package/dist/OdinRules.js +1 -1
- package/dist/rules/DealCardsRule.d.ts +2 -0
- package/dist/rules/DealCardsRule.js +6 -0
- package/dist/rules/PickCardRule.d.ts +1 -0
- package/dist/rules/PickCardRule.js +40 -2
- package/dist/rules/PlayCardsRule.d.ts +0 -1
- package/dist/rules/PlayCardsRule.js +19 -44
- package/dist/rules/helper/ScoreHelper.d.ts +1 -1
- package/dist/rules/helper/ScoreHelper.js +2 -1
- package/package.json +2 -2
package/dist/OdinRules.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { CustomMove, MaterialGame, MaterialMove, PlayMoveContext, PositiveSequenceStrategy, SecretMaterialRules, TimeLimit } from '@gamepark/rules-api';
|
|
2
|
-
import { CompetitiveScore } from '../../../rules-api';
|
|
1
|
+
import { CompetitiveScore, CustomMove, FillGapStrategy, MaterialGame, MaterialMove, PlayMoveContext, PositiveSequenceStrategy, SecretMaterialRules, TimeLimit } from '@gamepark/rules-api';
|
|
3
2
|
import { LocationType } from './material/LocationType';
|
|
4
3
|
import { MaterialType } from './material/MaterialType';
|
|
5
4
|
import { PlayerId } from './PlayerId';
|
|
@@ -24,7 +23,7 @@ export declare class OdinRules extends SecretMaterialRules<PlayerId, MaterialTyp
|
|
|
24
23
|
1: {
|
|
25
24
|
2: PositiveSequenceStrategy<number, number, number>;
|
|
26
25
|
1: PositiveSequenceStrategy<number, number, number>;
|
|
27
|
-
3:
|
|
26
|
+
3: FillGapStrategy<number, number, number>;
|
|
28
27
|
4: PositiveSequenceStrategy<number, number, number>;
|
|
29
28
|
};
|
|
30
29
|
};
|
package/dist/OdinRules.js
CHANGED
|
@@ -48,7 +48,7 @@ var OdinRules = (function (_super) {
|
|
|
48
48
|
_d[MaterialType_1.MaterialType.Card] = (_e = {},
|
|
49
49
|
_e[LocationType_1.LocationType.Hand] = new rules_api_1.PositiveSequenceStrategy(),
|
|
50
50
|
_e[LocationType_1.LocationType.Deck] = new rules_api_1.PositiveSequenceStrategy(),
|
|
51
|
-
_e[LocationType_1.LocationType.MiddleOfTable] = new rules_api_1.
|
|
51
|
+
_e[LocationType_1.LocationType.MiddleOfTable] = new rules_api_1.FillGapStrategy(),
|
|
52
52
|
_e[LocationType_1.LocationType.Discard] = new rules_api_1.PositiveSequenceStrategy(),
|
|
53
53
|
_e),
|
|
54
54
|
_d);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { ItemMove, MaterialMove, MaterialRulesPart } from '@gamepark/rules-api';
|
|
2
|
+
import { PlayerId } from '../PlayerId';
|
|
2
3
|
export declare class DealCardsRule extends MaterialRulesPart {
|
|
3
4
|
onRuleStart(): MaterialMove<number, number, number, number>[];
|
|
4
5
|
afterItemMove(move: ItemMove): MaterialMove[];
|
|
5
6
|
dealToPlayersAndGo(): MaterialMove[];
|
|
7
|
+
getPlayerHand(player: PlayerId): import("@gamepark/rules-api").Material<number, number, number>;
|
|
6
8
|
get deck(): import("@gamepark/rules-api").MaterialDeck<number, number, number>;
|
|
7
9
|
get discard(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
8
10
|
}
|
|
@@ -88,6 +88,9 @@ var DealCardsRule = (function (_super) {
|
|
|
88
88
|
try {
|
|
89
89
|
for (var _b = (e_1 = void 0, __values(this.game.players)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
90
90
|
var player = _c.value;
|
|
91
|
+
var hand = this.getPlayerHand(player);
|
|
92
|
+
if (hand.length + i >= 9)
|
|
93
|
+
continue;
|
|
91
94
|
moves.push.apply(moves, __spreadArray([], __read(deck.deal({
|
|
92
95
|
type: LocationType_1.LocationType.Hand,
|
|
93
96
|
player: player
|
|
@@ -105,6 +108,9 @@ var DealCardsRule = (function (_super) {
|
|
|
105
108
|
moves.push(this.startPlayerTurn(RuleId_1.RuleId.PlayCards, this.remind(Memory_1.Memory.FirstPlayer)));
|
|
106
109
|
return moves;
|
|
107
110
|
};
|
|
111
|
+
DealCardsRule.prototype.getPlayerHand = function (player) {
|
|
112
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(player);
|
|
113
|
+
};
|
|
108
114
|
Object.defineProperty(DealCardsRule.prototype, "deck", {
|
|
109
115
|
get: function () {
|
|
110
116
|
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Deck).deck();
|
|
@@ -2,6 +2,7 @@ import { MaterialMove, MoveItem } from '@gamepark/rules-api';
|
|
|
2
2
|
import { BasePlayerTurn } from './BasePlayerTurn';
|
|
3
3
|
export declare class PickCardRule extends BasePlayerTurn {
|
|
4
4
|
onRuleStart(): MaterialMove<number, number, number, number>[];
|
|
5
|
+
get isEndOfRound(): boolean;
|
|
5
6
|
getPlayerMoves(): MaterialMove[];
|
|
6
7
|
afterItemMove(move: MoveItem): MaterialMove<number, number, number, number>[];
|
|
7
8
|
goToNextRule(): MaterialMove<number, number, number, number>[];
|
|
@@ -14,12 +14,38 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
15
|
};
|
|
16
16
|
})();
|
|
17
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
18
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
19
|
+
if (!m) return o;
|
|
20
|
+
var i = m.call(o), r, ar = [], e;
|
|
21
|
+
try {
|
|
22
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
23
|
+
}
|
|
24
|
+
catch (error) { e = { error: error }; }
|
|
25
|
+
finally {
|
|
26
|
+
try {
|
|
27
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
28
|
+
}
|
|
29
|
+
finally { if (e) throw e.error; }
|
|
30
|
+
}
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
34
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
35
|
+
if (ar || !(i in from)) {
|
|
36
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
37
|
+
ar[i] = from[i];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
41
|
+
};
|
|
17
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
43
|
exports.PickCardRule = void 0;
|
|
19
44
|
var rules_api_1 = require("@gamepark/rules-api");
|
|
20
45
|
var LocationType_1 = require("../material/LocationType");
|
|
21
46
|
var MaterialType_1 = require("../material/MaterialType");
|
|
22
47
|
var BasePlayerTurn_1 = require("./BasePlayerTurn");
|
|
48
|
+
var CustomMoveType_1 = require("./CustomMoveType");
|
|
23
49
|
var RuleId_1 = require("./RuleId");
|
|
24
50
|
var PickCardRule = (function (_super) {
|
|
25
51
|
__extends(PickCardRule, _super);
|
|
@@ -27,10 +53,22 @@ var PickCardRule = (function (_super) {
|
|
|
27
53
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
28
54
|
}
|
|
29
55
|
PickCardRule.prototype.onRuleStart = function () {
|
|
56
|
+
if (this.isEndOfRound) {
|
|
57
|
+
return [this.customMove(CustomMoveType_1.CustomMoveType.TurnTempo, true), this.startRule(RuleId_1.RuleId.EndOfRound)];
|
|
58
|
+
}
|
|
59
|
+
var moves = [this.customMove(CustomMoveType_1.CustomMoveType.TurnTempo)];
|
|
30
60
|
if (this.getPlayerMoves().length)
|
|
31
|
-
return
|
|
32
|
-
|
|
61
|
+
return moves;
|
|
62
|
+
moves.push.apply(moves, __spreadArray([], __read(this.goToNextRule()), false));
|
|
63
|
+
return moves;
|
|
33
64
|
};
|
|
65
|
+
Object.defineProperty(PickCardRule.prototype, "isEndOfRound", {
|
|
66
|
+
get: function () {
|
|
67
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(this.player).length === 0;
|
|
68
|
+
},
|
|
69
|
+
enumerable: false,
|
|
70
|
+
configurable: true
|
|
71
|
+
});
|
|
34
72
|
PickCardRule.prototype.getPlayerMoves = function () {
|
|
35
73
|
return this.currentTable.moveItems({
|
|
36
74
|
type: LocationType_1.LocationType.Hand,
|
|
@@ -8,7 +8,6 @@ export declare class PlayCardsRule extends BasePlayerTurn {
|
|
|
8
8
|
onCustomMove(move: CustomMove): MaterialMove<number, number, number, number>[];
|
|
9
9
|
afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
|
|
10
10
|
goToNextPlayer(): MaterialMove<number, number, number, number>[];
|
|
11
|
-
afterPlaceCards(): MaterialMove<number, number, number, number>[];
|
|
12
11
|
get firstPlayer(): number;
|
|
13
12
|
get table(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
14
13
|
get playableCards(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
@@ -83,7 +83,7 @@ var PlayCardsRule = (function (_super) {
|
|
|
83
83
|
if (allHandCombination.length) {
|
|
84
84
|
moves.push.apply(moves, __spreadArray([], __read(allHandCombination.map(function (c) {
|
|
85
85
|
var _a;
|
|
86
|
-
return (_a =
|
|
86
|
+
return (_a = playableCards
|
|
87
87
|
.id(function (id) { return c.includes(id); }))
|
|
88
88
|
.sort.apply(_a, __spreadArray([], __read(_this.sort), false)).moveItemsAtOnce({
|
|
89
89
|
type: LocationType_1.LocationType.MiddleOfTable,
|
|
@@ -93,7 +93,7 @@ var PlayCardsRule = (function (_super) {
|
|
|
93
93
|
}
|
|
94
94
|
moves.push.apply(moves, __spreadArray([], __read(combinations.map(function (c) {
|
|
95
95
|
var _a;
|
|
96
|
-
return (_a =
|
|
96
|
+
return (_a = playableCards
|
|
97
97
|
.id(function (id) { return c.includes(id); }))
|
|
98
98
|
.sort.apply(_a, __spreadArray([], __read(_this.sort), false)).moveItemsAtOnce({
|
|
99
99
|
type: LocationType_1.LocationType.MiddleOfTable,
|
|
@@ -123,23 +123,16 @@ var PlayCardsRule = (function (_super) {
|
|
|
123
123
|
PlayCardsRule.prototype.onCustomMove = function (move) {
|
|
124
124
|
if (!(0, rules_api_1.isCustomMoveType)(CustomMoveType_1.CustomMoveType.Pass)(move))
|
|
125
125
|
return [];
|
|
126
|
-
var moves =
|
|
126
|
+
var moves = [];
|
|
127
127
|
moves.push.apply(moves, __spreadArray([], __read(this.goToNextPlayer()), false));
|
|
128
128
|
return moves;
|
|
129
129
|
};
|
|
130
130
|
PlayCardsRule.prototype.afterItemMove = function (move) {
|
|
131
131
|
if (!(0, rules_api_1.isMoveItemTypeAtOnce)(MaterialType_1.MaterialType.Card)(move) || move.location.type !== LocationType_1.LocationType.MiddleOfTable)
|
|
132
132
|
return [];
|
|
133
|
-
var moves =
|
|
133
|
+
var moves = [];
|
|
134
134
|
this.memorize(Memory_1.Memory.LastPlayerThatPlay, this.player);
|
|
135
|
-
|
|
136
|
-
moves.push(this.customMove(CustomMoveType_1.CustomMoveType.TurnTempo, isEndOfRound));
|
|
137
|
-
if (this.hand.length === 0) {
|
|
138
|
-
moves.push(this.startRule(RuleId_1.RuleId.EndOfRound));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
moves.push(this.startRule(RuleId_1.RuleId.PickCard));
|
|
142
|
-
}
|
|
135
|
+
moves.push(this.startRule(RuleId_1.RuleId.PickCard));
|
|
143
136
|
return moves;
|
|
144
137
|
};
|
|
145
138
|
PlayCardsRule.prototype.goToNextPlayer = function () {
|
|
@@ -162,25 +155,6 @@ var PlayCardsRule = (function (_super) {
|
|
|
162
155
|
}
|
|
163
156
|
return moves;
|
|
164
157
|
};
|
|
165
|
-
PlayCardsRule.prototype.afterPlaceCards = function () {
|
|
166
|
-
var e_1, _a;
|
|
167
|
-
var moves = [];
|
|
168
|
-
var selected = this.material(MaterialType_1.MaterialType.Card).selected().getItems();
|
|
169
|
-
try {
|
|
170
|
-
for (var selected_1 = __values(selected), selected_1_1 = selected_1.next(); !selected_1_1.done; selected_1_1 = selected_1.next()) {
|
|
171
|
-
var item = selected_1_1.value;
|
|
172
|
-
delete item.selected;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
176
|
-
finally {
|
|
177
|
-
try {
|
|
178
|
-
if (selected_1_1 && !selected_1_1.done && (_a = selected_1.return)) _a.call(selected_1);
|
|
179
|
-
}
|
|
180
|
-
finally { if (e_1) throw e_1.error; }
|
|
181
|
-
}
|
|
182
|
-
return moves;
|
|
183
|
-
};
|
|
184
158
|
Object.defineProperty(PlayCardsRule.prototype, "firstPlayer", {
|
|
185
159
|
get: function () {
|
|
186
160
|
return this.remind(Memory_1.Memory.FirstPlayer);
|
|
@@ -197,7 +171,8 @@ var PlayCardsRule = (function (_super) {
|
|
|
197
171
|
});
|
|
198
172
|
Object.defineProperty(PlayCardsRule.prototype, "playableCards", {
|
|
199
173
|
get: function () {
|
|
200
|
-
|
|
174
|
+
var _this = this;
|
|
175
|
+
return this.material(MaterialType_1.MaterialType.Card).location(function (l) { return (l.type === LocationType_1.LocationType.Hand && l.player === _this.player) || (l.type === LocationType_1.LocationType.MiddleOfTable && l.id === LocationType_1.MiddleOfTable.Next); });
|
|
201
176
|
},
|
|
202
177
|
enumerable: false,
|
|
203
178
|
configurable: true
|
|
@@ -224,7 +199,7 @@ var PlayCardsRule = (function (_super) {
|
|
|
224
199
|
return parseInt(values.join(''), 10);
|
|
225
200
|
};
|
|
226
201
|
PlayCardsRule.prototype.getPlayableCombinations = function (hand, tableCount, tableValue) {
|
|
227
|
-
var
|
|
202
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
|
|
228
203
|
var results = [];
|
|
229
204
|
var byColor = (0, groupBy_1.default)(hand, function (card) { return card % 10; });
|
|
230
205
|
var byValue = (0, groupBy_1.default)(hand, function (card) { return Math.floor(card / 10); });
|
|
@@ -232,54 +207,54 @@ var PlayCardsRule = (function (_super) {
|
|
|
232
207
|
for (var _e = __values([byColor, byValue]), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
233
208
|
var group = _f.value;
|
|
234
209
|
try {
|
|
235
|
-
for (var _g = (
|
|
210
|
+
for (var _g = (e_2 = void 0, __values(Object.values(group))), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
236
211
|
var cards = _h.value;
|
|
237
212
|
try {
|
|
238
|
-
for (var _j = (
|
|
213
|
+
for (var _j = (e_3 = void 0, __values([tableCount, tableCount + 1])), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
239
214
|
var count = _k.value;
|
|
240
215
|
if (cards.length >= count) {
|
|
241
216
|
try {
|
|
242
|
-
for (var _l = (
|
|
217
|
+
for (var _l = (e_4 = void 0, __values(this.kCombinations(cards, count))), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
243
218
|
var comb = _m.value;
|
|
244
219
|
if (this.concatCardValue(comb) > tableValue) {
|
|
245
220
|
results.push(comb);
|
|
246
221
|
}
|
|
247
222
|
}
|
|
248
223
|
}
|
|
249
|
-
catch (
|
|
224
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
250
225
|
finally {
|
|
251
226
|
try {
|
|
252
227
|
if (_m && !_m.done && (_d = _l.return)) _d.call(_l);
|
|
253
228
|
}
|
|
254
|
-
finally { if (
|
|
229
|
+
finally { if (e_4) throw e_4.error; }
|
|
255
230
|
}
|
|
256
231
|
}
|
|
257
232
|
}
|
|
258
233
|
}
|
|
259
|
-
catch (
|
|
234
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
260
235
|
finally {
|
|
261
236
|
try {
|
|
262
237
|
if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
|
|
263
238
|
}
|
|
264
|
-
finally { if (
|
|
239
|
+
finally { if (e_3) throw e_3.error; }
|
|
265
240
|
}
|
|
266
241
|
}
|
|
267
242
|
}
|
|
268
|
-
catch (
|
|
243
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
269
244
|
finally {
|
|
270
245
|
try {
|
|
271
246
|
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
|
|
272
247
|
}
|
|
273
|
-
finally { if (
|
|
248
|
+
finally { if (e_2) throw e_2.error; }
|
|
274
249
|
}
|
|
275
250
|
}
|
|
276
251
|
}
|
|
277
|
-
catch (
|
|
252
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
278
253
|
finally {
|
|
279
254
|
try {
|
|
280
255
|
if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
|
|
281
256
|
}
|
|
282
|
-
finally { if (
|
|
257
|
+
finally { if (e_1) throw e_1.error; }
|
|
283
258
|
}
|
|
284
259
|
var unique = (0, uniqWith_1.default)(results, function (a, b) { return (0, isEqual_1.default)((0, orderBy_1.default)(a), (0, orderBy_1.default)(b)); });
|
|
285
260
|
return unique;
|
|
@@ -5,6 +5,6 @@ export declare class ScoreHelper extends MaterialRulesPart {
|
|
|
5
5
|
constructor(game: MaterialGame, player: PlayerId);
|
|
6
6
|
isWinningRound(round: number): boolean;
|
|
7
7
|
get score(): number;
|
|
8
|
-
getRoundScore(round: number): number;
|
|
8
|
+
getRoundScore(round: number): number | undefined;
|
|
9
9
|
get isWinning(): boolean;
|
|
10
10
|
}
|
|
@@ -42,7 +42,8 @@ var ScoreHelper = (function (_super) {
|
|
|
42
42
|
configurable: true
|
|
43
43
|
});
|
|
44
44
|
ScoreHelper.prototype.getRoundScore = function (round) {
|
|
45
|
-
|
|
45
|
+
var _a;
|
|
46
|
+
return (_a = this.remind(Memory_1.Memory.PlayerScore, this.player)) === null || _a === void 0 ? void 0 : _a[round - 1];
|
|
46
47
|
};
|
|
47
48
|
Object.defineProperty(ScoreHelper.prototype, "isWinning", {
|
|
48
49
|
get: function () {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gamepark/odin",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "The rules of Odin adapted for Game Park",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"i18next": "^22.0.3",
|
|
30
30
|
"lodash": "^4.17.21"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "3be3270b6e561e6289b862d21400ea93358b5459"
|
|
33
33
|
}
|