@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.
@@ -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: PositiveSequenceStrategy<number, number, number>;
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.PositiveSequenceStrategy(),
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
- return this.goToNextRule();
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 = _this.hand
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 = _this.hand
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 = this.afterPlaceCards();
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 = this.afterPlaceCards();
133
+ var moves = [];
134
134
  this.memorize(Memory_1.Memory.LastPlayerThatPlay, this.player);
135
- var isEndOfRound = this.hand.length === 0;
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
- return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(this.player);
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 e_2, _a, e_3, _b, e_4, _c, e_5, _d;
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 = (e_3 = void 0, __values(Object.values(group))), _h = _g.next(); !_h.done; _h = _g.next()) {
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 = (e_4 = void 0, __values([tableCount, tableCount + 1])), _k = _j.next(); !_k.done; _k = _j.next()) {
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 = (e_5 = void 0, __values(this.kCombinations(cards, count))), _m = _l.next(); !_m.done; _m = _l.next()) {
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 (e_5_1) { e_5 = { error: e_5_1 }; }
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 (e_5) throw e_5.error; }
229
+ finally { if (e_4) throw e_4.error; }
255
230
  }
256
231
  }
257
232
  }
258
233
  }
259
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
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 (e_4) throw e_4.error; }
239
+ finally { if (e_3) throw e_3.error; }
265
240
  }
266
241
  }
267
242
  }
268
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
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 (e_3) throw e_3.error; }
248
+ finally { if (e_2) throw e_2.error; }
274
249
  }
275
250
  }
276
251
  }
277
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
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 (e_2) throw e_2.error; }
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
- return this.remind(Memory_1.Memory.PlayerScore, this.player)[round];
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.2",
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": "c5272c1052e76fc49097aa007043479a237ac668"
32
+ "gitHead": "3be3270b6e561e6289b862d21400ea93358b5459"
33
33
  }