@konoui/mjimage 0.0.22 → 0.0.24

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()));
@@ -74,10 +74,11 @@ var Hand = (function () {
74
74
  }
75
75
  }
76
76
  if (this.drawn != null) {
77
- var idx = tiles.findIndex(function (t) { return t.equals(t); });
77
+ var drawn_1 = this.drawn;
78
+ var idx = tiles.findIndex(function (t) { return t.equals(drawn_1); });
78
79
  if (idx < 0)
79
80
  throw new Error("[debug] hand has drawn: ".concat(this.drawn, " but no tile in hands"));
80
- tiles[idx].add(constants_1.OPERATOR.TSUMO);
81
+ tiles[idx] = tiles[idx].clone({ add: constants_1.OPERATOR.TSUMO });
81
82
  }
82
83
  if (tiles.length < 1)
83
84
  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 +94,7 @@ var Hand = (function () {
93
94
  c = "".concat(c, ",").concat(b_1.toString());
94
95
  }
95
96
  var tiles = this.hands;
96
- var b = new parser_1.Block(tiles, constants_1.BLOCK.HAND).toString();
97
+ var b = new parser_1.BlockHand(tiles).toString();
97
98
  return "".concat(b).concat(c);
98
99
  };
99
100
  Object.defineProperty(Hand.prototype, "called", {
@@ -147,20 +148,16 @@ var Hand = (function () {
147
148
  throw new Error("unable to increase ".concat(t, " in ").concat(this.toString()));
148
149
  }
149
150
  backup.push(t);
150
- if (!(t.t == constants_1.TYPE.Z || t.t == constants_1.TYPE.BACK) && t.n == 0) {
151
+ if ((0, parser_1.isNum0)(t)) {
151
152
  this.data[t.t][5] += 1;
152
153
  }
153
154
  if (t.t == constants_1.TYPE.BACK)
154
155
  this.data[t.t][1] += 1;
155
156
  else
156
157
  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) {
158
+ if ((0, parser_1.isNum5)(t) && this.get(t.t, 5) == 4 && this.get(t.t, 0) == 0) {
161
159
  this.data[t.t][0] = 1;
162
- var c = backup.pop().clone();
163
- c.n = 0;
160
+ var c = backup.pop().clone({ n: 0 });
164
161
  backup.push(c);
165
162
  }
166
163
  }
@@ -180,29 +177,25 @@ var Hand = (function () {
180
177
  throw new Error("unable to decrease ".concat(t.toString(), " in ").concat(this.toString()));
181
178
  }
182
179
  backup.push(t);
183
- if (!(t.t == constants_1.TYPE.Z || t.t == constants_1.TYPE.BACK) && t.n == 0) {
180
+ if ((0, parser_1.isNum0)(t)) {
184
181
  this.data[t.t][5] -= 1;
185
182
  }
186
183
  if (t.t == constants_1.TYPE.BACK)
187
184
  this.data[t.t][1] -= 1;
188
185
  else
189
186
  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) {
187
+ if ((0, parser_1.isNum5)(t) && this.get(t.t, 5) == 0 && this.get(t.t, 0) > 0) {
194
188
  this.data[t.t][0] = 0;
195
- var c = backup.pop().clone();
196
- c.n = 0;
189
+ var c = backup.pop().clone({ n: 0 });
197
190
  backup.push(c);
198
191
  }
199
192
  }
200
193
  return backup;
201
194
  };
202
195
  Hand.prototype.draw = function (t) {
203
- t.add(constants_1.OPERATOR.TSUMO);
204
- this.inc([t]);
205
- this.data.tsumo = t;
196
+ var ts = t.clone({ add: constants_1.OPERATOR.TSUMO });
197
+ this.inc([ts]);
198
+ this.data.tsumo = ts;
206
199
  return;
207
200
  };
208
201
  Hand.prototype.discard = function (t) {
@@ -242,8 +235,8 @@ var Hand = (function () {
242
235
  var idx = this.data.called.findIndex(function (v) { return v.is(constants_1.BLOCK.PON) && v.tiles[0].equals(b.tiles[0], true); });
243
236
  if (idx == -1)
244
237
  throw new Error("unable to find ".concat(b.tiles[0]));
245
- var t = b.tiles[0].clone();
246
- if (t.isNum() && t.n == 0) {
238
+ var t = b.tiles[0];
239
+ if ((0, parser_1.isNum0)(t)) {
247
240
  t = new parser_1.Tile(t.t, 5);
248
241
  }
249
242
  this.data.called.splice(idx, 1);
@@ -258,7 +251,7 @@ var Hand = (function () {
258
251
  var c = new Hand(this.toString());
259
252
  c.data.called = this.called.map(function (b) { return b.clone(); });
260
253
  c.data.reached = this.data.reached;
261
- c.data.tsumo = this.data.tsumo == null ? null : this.data.tsumo.clone();
254
+ c.data.tsumo = this.data.tsumo == null ? null : this.data.tsumo;
262
255
  return c;
263
256
  };
264
257
  return Hand;
@@ -504,7 +497,11 @@ var BlockCalculator = (function () {
504
497
  var _a = indexes_1[_i], hidx = _a[0], bidx = _a[1], tidx = _a[2];
505
498
  var hand = hands[hidx];
506
499
  var newHand = hand.map(function (block) { return block.clone(); });
507
- newHand[bidx].tiles[tidx].add(op);
500
+ var block = newHand[bidx];
501
+ var newTile = block.tiles[tidx].clone({ add: op });
502
+ newHand[bidx] = block.clone({
503
+ replace: { idx: tidx, tile: newTile },
504
+ });
508
505
  newHands.push(newHand);
509
506
  }
510
507
  return newHands;
@@ -571,7 +568,7 @@ var BlockCalculator = (function () {
571
568
  cond(t, 8, [1, 2]);
572
569
  var cond2 = this.hand.sum(t) == 14;
573
570
  if (cond1 && cond2) {
574
- return [[new parser_1.Block(this.hand.hands, constants_1.BLOCK.HAND)]];
571
+ return [[new parser_1.BlockHand(this.hand.hands)]];
575
572
  }
576
573
  }
577
574
  return [];
@@ -702,8 +699,8 @@ var DoubleCalculator = (function () {
702
699
  blindDoras: params.blindDoraMarkers == null
703
700
  ? []
704
701
  : 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],
702
+ roundWind: parser_1.Tile.from(params.round.substring(0, 2)),
703
+ myWind: parser_1.Tile.from(params.myWind),
707
704
  reached: (_a = params.reached) !== null && _a !== void 0 ? _a : 0,
708
705
  sticks: (_b = params.sticks) !== null && _b !== void 0 ? _b : { dead: 0, reach: 0 },
709
706
  replacementWin: (_c = params.replacementWin) !== null && _c !== void 0 ? _c : false,
@@ -950,7 +947,7 @@ var DoubleCalculator = (function () {
950
947
  if (t.equals(d, true))
951
948
  bcount++;
952
949
  }
953
- if (t.n == 0)
950
+ if ((0, parser_1.isNum0)(t))
954
951
  rcount++;
955
952
  }
956
953
  }
@@ -973,17 +970,17 @@ var DoubleCalculator = (function () {
973
970
  var _loop_2 = function (block) {
974
971
  if (!check(block))
975
972
  return "continue";
976
- var tile = block.minTile();
973
+ var tile = minTile(block);
977
974
  if (tile.t == constants_1.TYPE.Z)
978
975
  return "continue";
979
976
  var filteredTypes = [constants_1.TYPE.M, constants_1.TYPE.P, constants_1.TYPE.S].filter(function (v) { return v != tile.t; });
980
977
  var cond1 = h.some(function (b) {
981
978
  var newTile = new parser_1.Tile(filteredTypes[0], tile.n);
982
- return check(b) && newTile.equals(b.minTile(), true);
979
+ return check(b) && newTile.equals(minTile(b), true);
983
980
  });
984
981
  var cond2 = h.some(function (b) {
985
982
  var newTile = new parser_1.Tile(filteredTypes[1], tile.n);
986
- return check(b) && newTile.equals(b.minTile(), true);
983
+ return check(b) && newTile.equals(minTile(b), true);
987
984
  });
988
985
  if (cond1 && cond2)
989
986
  return { value: [{ name: "三色同順", double: 2 - this_2.minus() }] };
@@ -1038,17 +1035,17 @@ var DoubleCalculator = (function () {
1038
1035
  var _loop_3 = function (block) {
1039
1036
  if (!check(block))
1040
1037
  return "continue";
1041
- var tile = block.minTile();
1038
+ var tile = minTile(block);
1042
1039
  if (tile.t == constants_1.TYPE.Z)
1043
1040
  return "continue";
1044
1041
  var filteredTypes = [constants_1.TYPE.M, constants_1.TYPE.P, constants_1.TYPE.S].filter(function (v) { return v != tile.t; });
1045
1042
  var cond1 = h.some(function (b) {
1046
1043
  var newTile = new parser_1.Tile(filteredTypes[0], tile.n);
1047
- return check(b) && newTile.equals(b.minTile(), true);
1044
+ return check(b) && newTile.equals(minTile(b), true);
1048
1045
  });
1049
1046
  var cond2 = h.some(function (b) {
1050
1047
  var newTile = new parser_1.Tile(filteredTypes[1], tile.n);
1051
- return check(b) && newTile.equals(b.minTile(), true);
1048
+ return check(b) && newTile.equals(minTile(b), true);
1052
1049
  });
1053
1050
  if (cond1 && cond2)
1054
1051
  return { value: [{ name: "三色同刻", double: 2 }] };
@@ -1099,12 +1096,12 @@ var DoubleCalculator = (function () {
1099
1096
  _a);
1100
1097
  for (var _i = 0, h_4 = h; _i < h_4.length; _i++) {
1101
1098
  var block = h_4[_i];
1102
- var tile = block.minTile();
1099
+ var tile = minTile(block);
1103
1100
  if (tile.t == constants_1.TYPE.BACK)
1104
1101
  continue;
1105
1102
  if (tile.t == constants_1.TYPE.Z)
1106
1103
  continue;
1107
- if (!(block instanceof parser_1.BlockRun))
1104
+ if (!(block instanceof parser_1.BlockRun || block instanceof parser_1.BlockChi))
1108
1105
  continue;
1109
1106
  if (tile.n == 1)
1110
1107
  m[tile.t][0]++;
@@ -1377,6 +1374,9 @@ var countSameBlocks = function (h) {
1377
1374
  }
1378
1375
  return count;
1379
1376
  };
1377
+ var minTile = function (b) {
1378
+ return __spreadArray([], b.tiles, true).sort(parser_1.tileSortFunc)[0];
1379
+ };
1380
1380
  var toDora = function (doraMarker) {
1381
1381
  var n = doraMarker.isNum() && doraMarker.n == 0 ? 5 : doraMarker.n;
1382
1382
  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;