@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.
- package/dist/mjs/lib/calculator/calc.js +39 -39
- 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.js +9 -8
- package/dist/mjs/lib/table/table-parser.js +1 -1
- package/dist/mjs/lib/table/table.js +1 -1
- package/package.json +1 -1
- 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()));
|
|
@@ -74,10 +74,11 @@ var Hand = (function () {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
if (this.drawn != null) {
|
|
77
|
-
var
|
|
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
|
|
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.
|
|
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 (
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
204
|
-
this.inc([
|
|
205
|
-
this.data.tsumo =
|
|
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]
|
|
246
|
-
if (
|
|
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
|
|
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]
|
|
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.
|
|
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:
|
|
706
|
-
myWind:
|
|
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 (
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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
|
|
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;
|