@konoui/mjimage 0.0.21 → 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.
- package/dist/mjs/lib/calculator/calc.js +37 -38
- package/dist/mjs/lib/controller/controller.js +178 -145
- package/dist/mjs/lib/controller/player.js +0 -3
- package/dist/mjs/lib/controller/state-machine.js +4 -4
- package/dist/mjs/lib/core/constants.d.ts +2 -1
- package/dist/mjs/lib/core/constants.js +2 -1
- package/dist/mjs/lib/core/parser.d.ts +44 -27
- package/dist/mjs/lib/core/parser.js +127 -58
- package/dist/mjs/lib/image/image.d.ts +4 -2
- package/dist/mjs/lib/image/image.js +18 -16
- package/dist/mjs/lib/table/table-parser.js +1 -1
- package/dist/mjs/lib/table/table.js +1 -1
- package/package.json +11 -5
- package/dist/mjs/lib/mjai/event.d.ts +0 -117
- package/dist/mjs/lib/mjai/event.js +0 -348
|
@@ -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
|
|
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.
|
|
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 (
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
204
|
-
this.inc([
|
|
205
|
-
this.data.tsumo =
|
|
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]
|
|
246
|
-
if (
|
|
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
|
|
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]
|
|
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.
|
|
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:
|
|
706
|
-
myWind:
|
|
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 (
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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
|
|
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(
|
|
371
|
-
if (
|
|
372
|
-
fake.n
|
|
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
|
|
384
|
-
b
|
|
385
|
-
|
|
386
|
-
|
|
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 (
|
|
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
|
|
408
|
-
if (
|
|
409
|
-
fake.n
|
|
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(
|
|
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]
|
|
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]
|
|
467
|
-
var
|
|
468
|
-
n.
|
|
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]
|
|
472
|
-
var
|
|
473
|
-
n.
|
|
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
|
|
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
|
|
558
|
-
var pick =
|
|
580
|
+
var cb = called_1[_i];
|
|
581
|
+
var pick = cb.tiles[0];
|
|
559
582
|
if (hand.get(pick.t, pick.n) == 1) {
|
|
560
|
-
var
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
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(
|
|
582
|
-
if (
|
|
583
|
-
fake.n
|
|
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
|
|
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
|
|
598
|
-
|
|
599
|
-
|
|
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
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
var
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
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
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
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
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
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
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
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
|
-
|
|
747
|
-
|
|
748
|
-
|
|
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
|
-
|
|
755
|
-
|
|
756
|
-
|
|
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;
|