@konoui/mjimage 0.0.22 → 0.0.23

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.
@@ -43,15 +43,15 @@ var Hand = (function () {
43
43
  continue;
44
44
  }
45
45
  else if (b.is(constants_1.BLOCK.HAND)) {
46
- this.inc(b.tiles);
46
+ this.inc(__spreadArray([], b.tiles, true));
47
47
  continue;
48
48
  }
49
49
  else if (input.split("").every(function (v) { return v === constants_1.TYPE.BACK; })) {
50
- this.inc(b.tiles);
50
+ this.inc(__spreadArray([], b.tiles, true));
51
51
  continue;
52
52
  }
53
53
  else if (allowBackBlock) {
54
- this.inc(b.tiles);
54
+ this.inc(__spreadArray([], b.tiles, true));
55
55
  continue;
56
56
  }
57
57
  throw new Error("unexpected block ".concat(b.type, " ").concat(b.toString()));
@@ -77,7 +77,7 @@ var Hand = (function () {
77
77
  var idx = tiles.findIndex(function (t) { return t.equals(t); });
78
78
  if (idx < 0)
79
79
  throw new Error("[debug] hand has drawn: ".concat(this.drawn, " but no tile in hands"));
80
- tiles[idx].add(constants_1.OPERATOR.TSUMO);
80
+ tiles[idx] = tiles[idx].clone({ add: constants_1.OPERATOR.TSUMO });
81
81
  }
82
82
  if (tiles.length < 1)
83
83
  throw new Error("[debug] no tiles in hand ".concat(tiles.length, ", called: ").concat(this.called, ", data: ").concat(JSON.stringify(this.data, null, 2)));
@@ -93,7 +93,7 @@ var Hand = (function () {
93
93
  c = "".concat(c, ",").concat(b_1.toString());
94
94
  }
95
95
  var tiles = this.hands;
96
- var b = new parser_1.Block(tiles, constants_1.BLOCK.HAND).toString();
96
+ var b = new parser_1.BlockHand(tiles).toString();
97
97
  return "".concat(b).concat(c);
98
98
  };
99
99
  Object.defineProperty(Hand.prototype, "called", {
@@ -147,20 +147,16 @@ var Hand = (function () {
147
147
  throw new Error("unable to increase ".concat(t, " in ").concat(this.toString()));
148
148
  }
149
149
  backup.push(t);
150
- if (!(t.t == constants_1.TYPE.Z || t.t == constants_1.TYPE.BACK) && t.n == 0) {
150
+ if ((0, parser_1.isNum0)(t)) {
151
151
  this.data[t.t][5] += 1;
152
152
  }
153
153
  if (t.t == constants_1.TYPE.BACK)
154
154
  this.data[t.t][1] += 1;
155
155
  else
156
156
  this.data[t.t][t.n] += 1;
157
- if (t.t != constants_1.TYPE.Z &&
158
- t.n == 5 &&
159
- this.get(t.t, 5) == 4 &&
160
- this.get(t.t, 0) == 0) {
157
+ if ((0, parser_1.isNum5)(t) && this.get(t.t, 5) == 4 && this.get(t.t, 0) == 0) {
161
158
  this.data[t.t][0] = 1;
162
- var c = backup.pop().clone();
163
- c.n = 0;
159
+ var c = backup.pop().clone({ n: 0 });
164
160
  backup.push(c);
165
161
  }
166
162
  }
@@ -180,29 +176,25 @@ var Hand = (function () {
180
176
  throw new Error("unable to decrease ".concat(t.toString(), " in ").concat(this.toString()));
181
177
  }
182
178
  backup.push(t);
183
- if (!(t.t == constants_1.TYPE.Z || t.t == constants_1.TYPE.BACK) && t.n == 0) {
179
+ if ((0, parser_1.isNum0)(t)) {
184
180
  this.data[t.t][5] -= 1;
185
181
  }
186
182
  if (t.t == constants_1.TYPE.BACK)
187
183
  this.data[t.t][1] -= 1;
188
184
  else
189
185
  this.data[t.t][t.n] -= 1;
190
- if (t.t != constants_1.TYPE.Z &&
191
- t.n == 5 &&
192
- this.get(t.t, 5) == 0 &&
193
- this.get(t.t, 0) > 0) {
186
+ if ((0, parser_1.isNum5)(t) && this.get(t.t, 5) == 0 && this.get(t.t, 0) > 0) {
194
187
  this.data[t.t][0] = 0;
195
- var c = backup.pop().clone();
196
- c.n = 0;
188
+ var c = backup.pop().clone({ n: 0 });
197
189
  backup.push(c);
198
190
  }
199
191
  }
200
192
  return backup;
201
193
  };
202
194
  Hand.prototype.draw = function (t) {
203
- t.add(constants_1.OPERATOR.TSUMO);
204
- this.inc([t]);
205
- this.data.tsumo = t;
195
+ var ts = t.clone({ add: constants_1.OPERATOR.TSUMO });
196
+ this.inc([ts]);
197
+ this.data.tsumo = ts;
206
198
  return;
207
199
  };
208
200
  Hand.prototype.discard = function (t) {
@@ -242,8 +234,8 @@ var Hand = (function () {
242
234
  var idx = this.data.called.findIndex(function (v) { return v.is(constants_1.BLOCK.PON) && v.tiles[0].equals(b.tiles[0], true); });
243
235
  if (idx == -1)
244
236
  throw new Error("unable to find ".concat(b.tiles[0]));
245
- var t = b.tiles[0].clone();
246
- if (t.isNum() && t.n == 0) {
237
+ var t = b.tiles[0];
238
+ if ((0, parser_1.isNum0)(t)) {
247
239
  t = new parser_1.Tile(t.t, 5);
248
240
  }
249
241
  this.data.called.splice(idx, 1);
@@ -258,7 +250,7 @@ var Hand = (function () {
258
250
  var c = new Hand(this.toString());
259
251
  c.data.called = this.called.map(function (b) { return b.clone(); });
260
252
  c.data.reached = this.data.reached;
261
- c.data.tsumo = this.data.tsumo == null ? null : this.data.tsumo.clone();
253
+ c.data.tsumo = this.data.tsumo == null ? null : this.data.tsumo;
262
254
  return c;
263
255
  };
264
256
  return Hand;
@@ -504,7 +496,11 @@ var BlockCalculator = (function () {
504
496
  var _a = indexes_1[_i], hidx = _a[0], bidx = _a[1], tidx = _a[2];
505
497
  var hand = hands[hidx];
506
498
  var newHand = hand.map(function (block) { return block.clone(); });
507
- newHand[bidx].tiles[tidx].add(op);
499
+ var block = newHand[bidx];
500
+ var newTile = block.tiles[tidx].clone({ add: op });
501
+ newHand[bidx] = block.clone({
502
+ replace: { idx: tidx, tile: newTile },
503
+ });
508
504
  newHands.push(newHand);
509
505
  }
510
506
  return newHands;
@@ -571,7 +567,7 @@ var BlockCalculator = (function () {
571
567
  cond(t, 8, [1, 2]);
572
568
  var cond2 = this.hand.sum(t) == 14;
573
569
  if (cond1 && cond2) {
574
- return [[new parser_1.Block(this.hand.hands, constants_1.BLOCK.HAND)]];
570
+ return [[new parser_1.BlockHand(this.hand.hands)]];
575
571
  }
576
572
  }
577
573
  return [];
@@ -702,8 +698,8 @@ var DoubleCalculator = (function () {
702
698
  blindDoras: params.blindDoraMarkers == null
703
699
  ? []
704
700
  : params.blindDoraMarkers.map(function (v) { return toDora(v); }),
705
- roundWind: new parser_1.Parser(params.round.substring(0, 2)).parse()[0].tiles[0],
706
- myWind: new parser_1.Parser(params.myWind).parse()[0].tiles[0],
701
+ roundWind: parser_1.Tile.from(params.round.substring(0, 2)),
702
+ myWind: parser_1.Tile.from(params.myWind),
707
703
  reached: (_a = params.reached) !== null && _a !== void 0 ? _a : 0,
708
704
  sticks: (_b = params.sticks) !== null && _b !== void 0 ? _b : { dead: 0, reach: 0 },
709
705
  replacementWin: (_c = params.replacementWin) !== null && _c !== void 0 ? _c : false,
@@ -950,7 +946,7 @@ var DoubleCalculator = (function () {
950
946
  if (t.equals(d, true))
951
947
  bcount++;
952
948
  }
953
- if (t.n == 0)
949
+ if ((0, parser_1.isNum0)(t))
954
950
  rcount++;
955
951
  }
956
952
  }
@@ -973,17 +969,17 @@ var DoubleCalculator = (function () {
973
969
  var _loop_2 = function (block) {
974
970
  if (!check(block))
975
971
  return "continue";
976
- var tile = block.minTile();
972
+ var tile = minTile(block);
977
973
  if (tile.t == constants_1.TYPE.Z)
978
974
  return "continue";
979
975
  var filteredTypes = [constants_1.TYPE.M, constants_1.TYPE.P, constants_1.TYPE.S].filter(function (v) { return v != tile.t; });
980
976
  var cond1 = h.some(function (b) {
981
977
  var newTile = new parser_1.Tile(filteredTypes[0], tile.n);
982
- return check(b) && newTile.equals(b.minTile(), true);
978
+ return check(b) && newTile.equals(minTile(b), true);
983
979
  });
984
980
  var cond2 = h.some(function (b) {
985
981
  var newTile = new parser_1.Tile(filteredTypes[1], tile.n);
986
- return check(b) && newTile.equals(b.minTile(), true);
982
+ return check(b) && newTile.equals(minTile(b), true);
987
983
  });
988
984
  if (cond1 && cond2)
989
985
  return { value: [{ name: "三色同順", double: 2 - this_2.minus() }] };
@@ -1038,17 +1034,17 @@ var DoubleCalculator = (function () {
1038
1034
  var _loop_3 = function (block) {
1039
1035
  if (!check(block))
1040
1036
  return "continue";
1041
- var tile = block.minTile();
1037
+ var tile = minTile(block);
1042
1038
  if (tile.t == constants_1.TYPE.Z)
1043
1039
  return "continue";
1044
1040
  var filteredTypes = [constants_1.TYPE.M, constants_1.TYPE.P, constants_1.TYPE.S].filter(function (v) { return v != tile.t; });
1045
1041
  var cond1 = h.some(function (b) {
1046
1042
  var newTile = new parser_1.Tile(filteredTypes[0], tile.n);
1047
- return check(b) && newTile.equals(b.minTile(), true);
1043
+ return check(b) && newTile.equals(minTile(b), true);
1048
1044
  });
1049
1045
  var cond2 = h.some(function (b) {
1050
1046
  var newTile = new parser_1.Tile(filteredTypes[1], tile.n);
1051
- return check(b) && newTile.equals(b.minTile(), true);
1047
+ return check(b) && newTile.equals(minTile(b), true);
1052
1048
  });
1053
1049
  if (cond1 && cond2)
1054
1050
  return { value: [{ name: "三色同刻", double: 2 }] };
@@ -1099,12 +1095,12 @@ var DoubleCalculator = (function () {
1099
1095
  _a);
1100
1096
  for (var _i = 0, h_4 = h; _i < h_4.length; _i++) {
1101
1097
  var block = h_4[_i];
1102
- var tile = block.minTile();
1098
+ var tile = minTile(block);
1103
1099
  if (tile.t == constants_1.TYPE.BACK)
1104
1100
  continue;
1105
1101
  if (tile.t == constants_1.TYPE.Z)
1106
1102
  continue;
1107
- if (!(block instanceof parser_1.BlockRun))
1103
+ if (!(block instanceof parser_1.BlockRun || block instanceof parser_1.BlockChi))
1108
1104
  continue;
1109
1105
  if (tile.n == 1)
1110
1106
  m[tile.t][0]++;
@@ -1377,6 +1373,9 @@ var countSameBlocks = function (h) {
1377
1373
  }
1378
1374
  return count;
1379
1375
  };
1376
+ var minTile = function (b) {
1377
+ return __spreadArray([], b.tiles, true).sort(parser_1.tileSortFunc)[0];
1378
+ };
1380
1379
  var toDora = function (doraMarker) {
1381
1380
  var n = doraMarker.isNum() && doraMarker.n == 0 ? 5 : doraMarker.n;
1382
1381
  var t = doraMarker.t;
@@ -25,6 +25,15 @@ var __assign = (this && this.__assign) || function () {
25
25
  };
26
26
  return __assign.apply(this, arguments);
27
27
  };
28
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
29
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
30
+ if (ar || !(i in from)) {
31
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
32
+ ar[i] = from[i];
33
+ }
34
+ }
35
+ return to.concat(ar || Array.prototype.slice.call(from));
36
+ };
28
37
  var __importDefault = (this && this.__importDefault) || function (mod) {
29
38
  return (mod && mod.__esModule) ? mod : { "default": mod };
30
39
  };
@@ -208,12 +217,11 @@ var Controller = (function () {
208
217
  (0, assert_1.default)(tiles, "".concat(selected.type, " choice is none"));
209
218
  this.actor.send({
210
219
  type: selected.type,
211
- tile: tiles[0].remove(core_1.OPERATOR.TSUMO),
220
+ tile: tiles[0].clone({ remove: core_1.OPERATOR.TSUMO }),
212
221
  iam: w,
213
222
  });
214
223
  break;
215
- case "AN_KAN":
216
- case "SHO_KAN":
224
+ case "AN_KAN": {
217
225
  var choices = e.choices[selected.type];
218
226
  (0, assert_1.default)(choices, "".concat(selected.type, " choice is none"));
219
227
  this.actor.send({
@@ -222,6 +230,17 @@ var Controller = (function () {
222
230
  iam: w,
223
231
  });
224
232
  break;
233
+ }
234
+ case "SHO_KAN": {
235
+ var choices = e.choices[selected.type];
236
+ (0, assert_1.default)(choices, "".concat(selected.type, " choice is none"));
237
+ this.actor.send({
238
+ type: selected.type,
239
+ block: choices[0],
240
+ iam: w,
241
+ });
242
+ break;
243
+ }
225
244
  case "DRAWN_GAME_BY_NINE_TILES":
226
245
  this.actor.send({ type: "DRAWN_GAME_BY_NINE_TILES", iam: w });
227
246
  break;
@@ -294,8 +313,6 @@ var Controller = (function () {
294
313
  this.actor.start();
295
314
  this.histories.push(ent);
296
315
  var v = this.actor.getSnapshot().status;
297
- if (v != "done")
298
- throw new Error("unexpected state ".concat(this.actor.getSnapshot().value, "(").concat(v, ")"));
299
316
  };
300
317
  Controller.prototype.startGame = function () {
301
318
  for (;;) {
@@ -367,9 +384,9 @@ var Controller = (function () {
367
384
  return false;
368
385
  if (hand.hands.length < 3)
369
386
  return false;
370
- var fake = t.clone().remove(core_1.OPERATOR.HORIZONTAL);
371
- if (t.isNum() && t.n == 0)
372
- fake.n = 5;
387
+ var fake = t.clone({ remove: core_1.OPERATOR.HORIZONTAL });
388
+ if ((0, parser_1.isNum0)(t))
389
+ fake = fake.clone({ n: 5 });
373
390
  if (hand.get(t.t, fake.n) < 2)
374
391
  return false;
375
392
  var blocks = [];
@@ -380,14 +397,17 @@ var Controller = (function () {
380
397
  idx = 1;
381
398
  if (idx == 1)
382
399
  idx = 2;
383
- var b = new parser_1.BlockPon([fake.clone(), fake.clone(), fake.clone()]);
384
- b.tiles[idx] = t.clone().add(core_1.OPERATOR.HORIZONTAL);
385
- if (t.isNum() && fake.n == 5 && hand.get(t.t, 0) > 0)
386
- b.tiles[(idx % 2) + 1].n = 0;
400
+ var b = new parser_1.BlockPon([fake, fake, fake]);
401
+ b = b.clone({
402
+ replace: { idx: idx, tile: t.clone({ add: core_1.OPERATOR.HORIZONTAL }) },
403
+ });
404
+ var ridx = (idx % 2) + 1;
405
+ var rt = b.tiles[ridx];
406
+ if ((0, parser_1.isNum5)(t) && hand.get(t.t, 0) > 0)
407
+ b = b.clone({ replace: { idx: ridx, tile: rt.clone({ n: 0 }) } });
387
408
  blocks.push(b);
388
- if (t.isNum() && t.n == 5 && hand.get(t.t, fake.n) == 3) {
389
- var red = b.clone();
390
- red.tiles[(idx % 2) + 1].n = 5;
409
+ if ((0, parser_1.isNum5)(t) && hand.get(t.t, fake.n) == 3) {
410
+ var red = b.clone({ replace: { idx: ridx, tile: rt.clone({ n: 5 }) } });
391
411
  blocks.push(red);
392
412
  }
393
413
  return blocks;
@@ -404,14 +424,17 @@ var Controller = (function () {
404
424
  return false;
405
425
  if (hand.hands.length < 3)
406
426
  return false;
407
- var fake = t.clone();
408
- if (fake.n == 0)
409
- fake.n = 5;
427
+ var fake = t;
428
+ if ((0, parser_1.isNum0)(fake))
429
+ fake = t.clone({ n: 5 });
410
430
  var blocks = [];
411
431
  var left = fake.n - 2 >= 1 &&
412
432
  hand.get(t.t, fake.n - 2) > 0 &&
413
433
  hand.get(t.t, fake.n - 1) > 0;
414
- var cloned = t.clone().add(core_1.OPERATOR.HORIZONTAL).remove(core_1.OPERATOR.TSUMO);
434
+ var cloned = t.clone({
435
+ add: core_1.OPERATOR.HORIZONTAL,
436
+ remove: core_1.OPERATOR.TSUMO,
437
+ });
415
438
  if (left)
416
439
  blocks.push(new parser_1.BlockChi([
417
440
  cloned,
@@ -460,17 +483,17 @@ var Controller = (function () {
460
483
  return [];
461
484
  if (!hasRed)
462
485
  return [];
463
- var filtered = blocks.filter(function (b) { return b.tiles[1].n == 5 || b.tiles[2].n == 5; });
486
+ var filtered = blocks.filter(function (b) { return (0, parser_1.isNum5)(b.tiles[1]) || (0, parser_1.isNum5)(b.tiles[2]); });
464
487
  return filtered
465
488
  .map(function (b) {
466
- if (b.tiles[1].n == 5) {
467
- var n = b.clone();
468
- n.tiles[1].n = 0;
489
+ if ((0, parser_1.isNum5)(b.tiles[1])) {
490
+ var rt = b.tiles[1].clone({ n: 0 });
491
+ var n = b.clone({ replace: { idx: 1, tile: rt } });
469
492
  return n;
470
493
  }
471
- else if (b.tiles[2].n == 5) {
472
- var n = b.clone();
473
- n.tiles[2].n = 0;
494
+ else if ((0, parser_1.isNum5)(b.tiles[2])) {
495
+ var rt = b.tiles[2].clone({ n: 0 });
496
+ var n = b.clone({ replace: { idx: 2, tile: rt } });
474
497
  return n;
475
498
  }
476
499
  })
@@ -532,7 +555,7 @@ var Controller = (function () {
532
555
  new parser_1.Tile(t, n),
533
556
  ];
534
557
  if (t != core_1.TYPE.Z && n == 5)
535
- tiles[0].n = 0;
558
+ tiles[0] = tiles[0].clone({ n: 0 });
536
559
  blocks.push(new parser_1.BlockAnKan(tiles));
537
560
  }
538
561
  }
@@ -554,14 +577,15 @@ var Controller = (function () {
554
577
  return false;
555
578
  var blocks = [];
556
579
  for (var _i = 0, called_1 = called; _i < called_1.length; _i++) {
557
- var c = called_1[_i];
558
- var pick = c.tiles[0];
580
+ var cb = called_1[_i];
581
+ var pick = cb.tiles[0];
559
582
  if (hand.get(pick.t, pick.n) == 1) {
560
- var cb = c.clone();
561
- cb.tiles.push(new parser_1.Tile(pick.t, pick.n, [core_1.OPERATOR.HORIZONTAL]));
562
- if (pick.n == 5 && hand.get(pick.t, 0) == 1)
563
- cb.tiles[3].n == 0;
564
- blocks.push(new parser_1.BlockShoKan(cb.tiles));
583
+ var tiles = __spreadArray(__spreadArray([], cb.tiles, true), [
584
+ new parser_1.Tile(pick.t, pick.n, [core_1.OPERATOR.HORIZONTAL]),
585
+ ], false);
586
+ if ((0, parser_1.isNum5)(pick) && hand.get(pick.t, 0) == 1)
587
+ tiles[3].n == 0;
588
+ blocks.push(new parser_1.BlockShoKan(tiles));
565
589
  }
566
590
  }
567
591
  if (blocks.length == 0)
@@ -578,25 +602,25 @@ var Controller = (function () {
578
602
  return false;
579
603
  if (w == whoDiscarded)
580
604
  return false;
581
- var fake = t.clone().remove(core_1.OPERATOR.HORIZONTAL);
582
- if (fake.isNum() && fake.n == 0)
583
- fake.n = 5;
605
+ var fake = t.clone({ remove: core_1.OPERATOR.HORIZONTAL });
606
+ if ((0, parser_1.isNum0)(fake))
607
+ fake = fake.clone({ n: 5 });
584
608
  if (hand.get(fake.t, fake.n) != 3)
585
609
  return false;
586
- var b = new parser_1.BlockDaiKan([
587
- fake.clone(),
588
- fake.clone(),
589
- fake.clone(),
590
- fake.clone(),
591
- ]);
610
+ var base = new parser_1.BlockDaiKan([fake, fake, fake, fake]);
592
611
  var idx = Math.abs(Number(w[0]) - Number(whoDiscarded[0]));
593
612
  if (idx == 3)
594
613
  idx = 0;
595
614
  if (idx == 1)
596
615
  idx = 3;
597
- b.tiles[idx] = t.clone().add(core_1.OPERATOR.HORIZONTAL);
598
- if (fake.isNum() && fake.n == 5 && t.n == 5)
599
- b.tiles[(idx % 3) + 1].n = 0;
616
+ var b = base.clone({
617
+ replace: { idx: idx, tile: t.clone({ add: core_1.OPERATOR.HORIZONTAL }) },
618
+ });
619
+ if ((0, parser_1.isNum5)(fake) && (0, parser_1.isNum5)(t)) {
620
+ var ridx = (idx % 3) + 1;
621
+ var rt = b.tiles[ridx].clone({ n: 0 });
622
+ b = b.clone({ replace: { idx: ridx, tile: rt } });
623
+ }
600
624
  (0, assert_1.default)(b.tiles.filter(function (t) { return t.has(core_1.OPERATOR.HORIZONTAL); }).length == 1, "h op ".concat(b.toString()));
601
625
  return b;
602
626
  };
@@ -649,111 +673,120 @@ var BaseActor = (function () {
649
673
  };
650
674
  BaseActor.prototype.handleEvent = function (e) {
651
675
  var _a, _b, _c;
652
- switch (e.type) {
653
- case "CHOICE_AFTER_CALLED":
654
- case "CHOICE_AFTER_DISCARDED":
655
- case "CHOICE_AFTER_DRAWN":
656
- case "CHOICE_FOR_CHAN_KAN":
657
- break;
658
- case "DISTRIBUTE":
659
- this.counter.reset();
660
- this.setHands(e);
661
- this.placeManager = new _1.PlaceManager(structuredClone(e.places), {
662
- round: structuredClone(e.round),
663
- sticks: structuredClone(e.sticks),
664
- });
665
- this.scoreManager = new _1.ScoreManager(structuredClone(e.scores));
666
- this.doraMarkers = [e.doraMarker];
667
- this.counter.dec(e.doraMarker);
668
- for (var _i = 0, _d = Object.values(core_1.WIND); _i < _d.length; _i++) {
669
- var w = _d[_i];
670
- if (w != e.wind)
671
- continue;
672
- (_a = this.counter).dec.apply(_a, this.hand(w).hands);
673
- }
674
- break;
675
- case "DRAW":
676
- this.hands[e.iam].draw(e.tile);
677
- this.counter.dec(e.tile);
678
- break;
679
- case "DISCARD":
680
- this.river.discard(e.tile, e.iam);
681
- this.hands[e.iam].discard(e.tile);
682
- if (e.iam != e.wind) {
676
+ try {
677
+ switch (e.type) {
678
+ case "CHOICE_AFTER_CALLED":
679
+ case "CHOICE_AFTER_DISCARDED":
680
+ case "CHOICE_AFTER_DRAWN":
681
+ case "CHOICE_FOR_CHAN_KAN":
682
+ break;
683
+ case "DISTRIBUTE":
684
+ this.counter.reset();
685
+ this.setHands(e);
686
+ this.placeManager = new _1.PlaceManager(structuredClone(e.places), {
687
+ round: structuredClone(e.round),
688
+ sticks: structuredClone(e.sticks),
689
+ });
690
+ this.scoreManager = new _1.ScoreManager(structuredClone(e.scores));
691
+ this.doraMarkers = [e.doraMarker];
692
+ this.counter.dec(e.doraMarker);
693
+ for (var _i = 0, _d = Object.values(core_1.WIND); _i < _d.length; _i++) {
694
+ var w = _d[_i];
695
+ if (w != e.wind)
696
+ continue;
697
+ (_a = this.counter).dec.apply(_a, this.hand(w).hands);
698
+ }
699
+ break;
700
+ case "DRAW":
701
+ this.hands[e.iam].draw(e.tile);
683
702
  this.counter.dec(e.tile);
684
- this.counter.addTileToSafeMap(e.tile, e.iam);
685
- for (var _e = 0, _f = Object.values(core_1.WIND); _e < _f.length; _e++) {
686
- var w = _f[_e];
687
- if (this.hand(w).reached)
688
- this.counter.addTileToSafeMap(e.tile, w);
703
+ break;
704
+ case "DISCARD":
705
+ this.river.discard(e.tile, e.iam);
706
+ this.hands[e.iam].discard(e.tile);
707
+ if (e.iam != e.wind) {
708
+ this.counter.dec(e.tile);
709
+ this.counter.addTileToSafeMap(e.tile, e.iam);
710
+ for (var _e = 0, _f = Object.values(core_1.WIND); _e < _f.length; _e++) {
711
+ var w = _f[_e];
712
+ if (this.hand(w).reached)
713
+ this.counter.addTileToSafeMap(e.tile, w);
714
+ }
689
715
  }
690
- }
691
- break;
692
- case "PON":
693
- case "CHI":
694
- case "DAI_KAN":
695
- this.hands[e.iam].call(e.block);
696
- this.river.markCalled();
697
- if (e.iam != e.wind)
698
- (_b = this.counter).dec.apply(_b, e.block.tiles.filter(function (t) { return !t.has(core_1.OPERATOR.HORIZONTAL); }));
699
- break;
700
- case "SHO_KAN":
701
- case "AN_KAN":
702
- this.hands[e.iam].kan(e.block);
703
- if (e.iam != e.wind)
704
- (_c = this.counter).dec.apply(_c, e.block.tiles.filter(function (t) { return !t.has(core_1.OPERATOR.HORIZONTAL); }));
705
- break;
706
- case "REACH":
707
- var pid = this.placeManager.playerID(e.iam);
708
- this.hands[e.iam].reach();
709
- this.scoreManager.reach(pid);
710
- this.placeManager.incrementReachStick();
711
- break;
712
- case "NEW_DORA":
713
- this.doraMarkers.push(e.doraMarker);
714
- this.counter.dec(e.doraMarker);
715
- break;
716
- case "TSUMO":
717
- break;
718
- case "RON":
719
- if (e.pushBackReachStick) {
720
- var w = e.targetInfo.wind;
721
- var id = this.placeManager.playerID(w);
722
- this.scoreManager.restoreReachStick(id);
723
- this.placeManager.decrementReachStick();
724
- }
725
- break;
726
- case "END_GAME":
727
- switch (e.subType) {
728
- case "NINE_TILES":
729
- case "FOUR_KAN":
730
- case "FOUR_WIND":
731
- this.placeManager.incrementDeadStick();
732
- break;
733
- case "DRAWN_GAME": {
734
- var pm = this.placeManager.playerMap;
735
- this.scoreManager.update(e.deltas, pm);
736
- this.placeManager.incrementDeadStick();
737
- if (!e.shouldContinue)
738
- this.placeManager.nextRound();
739
- break;
716
+ break;
717
+ case "PON":
718
+ case "CHI":
719
+ case "DAI_KAN":
720
+ this.hands[e.iam].call(e.block);
721
+ this.river.markCalled();
722
+ if (e.iam != e.wind)
723
+ (_b = this.counter).dec.apply(_b, e.block.tiles.filter(function (t) { return !t.has(core_1.OPERATOR.HORIZONTAL); }));
724
+ break;
725
+ case "SHO_KAN":
726
+ this.hands[e.iam].kan(e.block);
727
+ if (e.iam != e.wind)
728
+ this.counter.dec(e.block.tiles.filter(function (t) { return t.has(core_1.OPERATOR.HORIZONTAL); })[0]);
729
+ break;
730
+ case "AN_KAN":
731
+ this.hands[e.iam].kan(e.block);
732
+ if (e.iam != e.wind)
733
+ (_c = this.counter).dec.apply(_c, e.block.tiles.filter(function (t) { return !t.has(core_1.OPERATOR.HORIZONTAL); }));
734
+ break;
735
+ case "REACH":
736
+ var pid = this.placeManager.playerID(e.iam);
737
+ this.hands[e.iam].reach();
738
+ this.scoreManager.reach(pid);
739
+ this.placeManager.incrementReachStick();
740
+ break;
741
+ case "NEW_DORA":
742
+ this.doraMarkers.push(e.doraMarker);
743
+ this.counter.dec(e.doraMarker);
744
+ break;
745
+ case "TSUMO":
746
+ break;
747
+ case "RON":
748
+ if (e.pushBackReachStick) {
749
+ var w = e.targetInfo.wind;
750
+ var id = this.placeManager.playerID(w);
751
+ this.scoreManager.restoreReachStick(id);
752
+ this.placeManager.decrementReachStick();
740
753
  }
741
- case "WIN_GAME": {
742
- var pm = this.placeManager.playerMap;
743
- this.scoreManager.update(e.deltas, pm);
744
- if (e.shouldContinue)
754
+ break;
755
+ case "END_GAME":
756
+ switch (e.subType) {
757
+ case "NINE_TILES":
758
+ case "FOUR_KAN":
759
+ case "FOUR_WIND":
760
+ this.placeManager.incrementDeadStick();
761
+ break;
762
+ case "DRAWN_GAME": {
763
+ var pm = this.placeManager.playerMap;
764
+ this.scoreManager.update(e.deltas, pm);
745
765
  this.placeManager.incrementDeadStick();
746
- else {
747
- this.placeManager.nextRound();
748
- this.placeManager.resetDeadStick();
766
+ if (!e.shouldContinue)
767
+ this.placeManager.nextRound();
768
+ break;
769
+ }
770
+ case "WIN_GAME": {
771
+ var pm = this.placeManager.playerMap;
772
+ this.scoreManager.update(e.deltas, pm);
773
+ if (e.shouldContinue)
774
+ this.placeManager.incrementDeadStick();
775
+ else {
776
+ this.placeManager.nextRound();
777
+ this.placeManager.resetDeadStick();
778
+ }
779
+ this.placeManager.resetReachStick();
780
+ break;
749
781
  }
750
- this.placeManager.resetReachStick();
751
- break;
752
782
  }
753
- }
754
- break;
755
- default:
756
- throw new Error("unexpected event ".concat(JSON.stringify(e, null, 2)));
783
+ break;
784
+ default:
785
+ throw new Error("unexpected event ".concat(JSON.stringify(e, null, 2)));
786
+ }
787
+ }
788
+ catch (error) {
789
+ throw new Error("".concat(this.id, " ").concat(e.type, " ").concat(error));
757
790
  }
758
791
  };
759
792
  return BaseActor;