@m2c2kit/core 0.3.28 → 0.3.30
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/LICENSE +10 -18
- package/README.md +1 -1
- package/assets/{canvaskit-0.39.1.wasm → canvaskit-0.40.0.wasm} +0 -0
- package/dist/index.d.ts +182 -15
- package/dist/index.js +1181 -518
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +4 -3
- package/package.json +13 -13
package/dist/index.js
CHANGED
|
@@ -43,6 +43,17 @@ var ActionType = /* @__PURE__ */ ((ActionType2) => {
|
|
|
43
43
|
return ActionType2;
|
|
44
44
|
})(ActionType || {});
|
|
45
45
|
|
|
46
|
+
class M2Error extends Error {
|
|
47
|
+
constructor(...params) {
|
|
48
|
+
super(...params);
|
|
49
|
+
this.name = "M2Error";
|
|
50
|
+
Object.setPrototypeOf(this, M2Error.prototype);
|
|
51
|
+
if (Error.captureStackTrace) {
|
|
52
|
+
Error.captureStackTrace(this, M2Error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
46
57
|
const _Easings = class _Easings {
|
|
47
58
|
static toTypeAsString(easingFunction) {
|
|
48
59
|
switch (easingFunction) {
|
|
@@ -116,7 +127,7 @@ const _Easings = class _Easings {
|
|
|
116
127
|
return "CircularInOut";
|
|
117
128
|
}
|
|
118
129
|
default: {
|
|
119
|
-
throw new
|
|
130
|
+
throw new M2Error("Easings.toTypeAsString(): Unknown easing function");
|
|
120
131
|
}
|
|
121
132
|
}
|
|
122
133
|
}
|
|
@@ -192,7 +203,7 @@ const _Easings = class _Easings {
|
|
|
192
203
|
return _Easings.circularInOut;
|
|
193
204
|
}
|
|
194
205
|
default: {
|
|
195
|
-
throw new
|
|
206
|
+
throw new M2Error(
|
|
196
207
|
`Easings.fromTypeAsString(): Unknown easing function type ${easingType}`
|
|
197
208
|
);
|
|
198
209
|
}
|
|
@@ -394,12 +405,12 @@ const _Timer = class _Timer {
|
|
|
394
405
|
static start(name) {
|
|
395
406
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
396
407
|
if (timer === void 0) {
|
|
397
|
-
throw new
|
|
408
|
+
throw new M2Error(
|
|
398
409
|
`can't start timer. timer with name ${name} does not exist.`
|
|
399
410
|
);
|
|
400
411
|
} else {
|
|
401
412
|
if (timer.stopped === false) {
|
|
402
|
-
throw new
|
|
413
|
+
throw new M2Error(
|
|
403
414
|
`can't start timer. timer with name ${name} is already started.`
|
|
404
415
|
);
|
|
405
416
|
}
|
|
@@ -419,12 +430,12 @@ const _Timer = class _Timer {
|
|
|
419
430
|
static stop(name) {
|
|
420
431
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
421
432
|
if (timer === void 0) {
|
|
422
|
-
throw new
|
|
433
|
+
throw new M2Error(
|
|
423
434
|
`can't stop timer. timer with name ${name} does not exist.`
|
|
424
435
|
);
|
|
425
436
|
}
|
|
426
437
|
if (timer.stopped === true) {
|
|
427
|
-
throw new
|
|
438
|
+
throw new M2Error(
|
|
428
439
|
`can't stop timer. timer with name ${name} is already stopped.`
|
|
429
440
|
);
|
|
430
441
|
}
|
|
@@ -445,7 +456,7 @@ const _Timer = class _Timer {
|
|
|
445
456
|
static elapsed(name) {
|
|
446
457
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
447
458
|
if (timer === void 0) {
|
|
448
|
-
throw new
|
|
459
|
+
throw new M2Error(
|
|
449
460
|
`can't get elapsed time. timer with name ${name} does not exist.`
|
|
450
461
|
);
|
|
451
462
|
}
|
|
@@ -467,7 +478,7 @@ const _Timer = class _Timer {
|
|
|
467
478
|
static remove(name) {
|
|
468
479
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
469
480
|
if (timer === void 0) {
|
|
470
|
-
throw new
|
|
481
|
+
throw new M2Error(
|
|
471
482
|
`can't remove timer. timer with name ${name} does not exist.`
|
|
472
483
|
);
|
|
473
484
|
}
|
|
@@ -761,7 +772,7 @@ class M2c2KitHelpers {
|
|
|
761
772
|
if (typeof value2 === "boolean") {
|
|
762
773
|
return value2.toString();
|
|
763
774
|
}
|
|
764
|
-
throw new
|
|
775
|
+
throw new M2Error(`Error parsing "${value2}" as a string.`);
|
|
765
776
|
}
|
|
766
777
|
function canBeNumber(value2) {
|
|
767
778
|
if (typeof value2 === "number") {
|
|
@@ -781,11 +792,11 @@ class M2c2KitHelpers {
|
|
|
781
792
|
return value2;
|
|
782
793
|
}
|
|
783
794
|
if (typeof value2 !== "string") {
|
|
784
|
-
throw new
|
|
795
|
+
throw new M2Error(`Error parsing "${value2}" as a number.`);
|
|
785
796
|
}
|
|
786
797
|
const n = parseFloat(value2);
|
|
787
798
|
if (Number.isNaN(n)) {
|
|
788
|
-
throw new
|
|
799
|
+
throw new M2Error(`Error parsing "${value2}" as a number.`);
|
|
789
800
|
}
|
|
790
801
|
return n;
|
|
791
802
|
}
|
|
@@ -807,11 +818,11 @@ class M2c2KitHelpers {
|
|
|
807
818
|
return value2;
|
|
808
819
|
}
|
|
809
820
|
if (typeof value2 !== "string") {
|
|
810
|
-
throw new
|
|
821
|
+
throw new M2Error(`Error parsing "${value2}" as an integer.`);
|
|
811
822
|
}
|
|
812
823
|
const n = parseInt(value2);
|
|
813
824
|
if (Number.isNaN(n)) {
|
|
814
|
-
throw new
|
|
825
|
+
throw new M2Error(`Error parsing "${value2}" as an integer.`);
|
|
815
826
|
}
|
|
816
827
|
return n;
|
|
817
828
|
}
|
|
@@ -829,7 +840,7 @@ class M2c2KitHelpers {
|
|
|
829
840
|
return value2;
|
|
830
841
|
}
|
|
831
842
|
if (value2 !== "true" && value2 !== "false") {
|
|
832
|
-
throw new
|
|
843
|
+
throw new M2Error(`Error parsing "${value2}" as a boolean.`);
|
|
833
844
|
}
|
|
834
845
|
return value2 === "true";
|
|
835
846
|
}
|
|
@@ -858,7 +869,7 @@ class M2c2KitHelpers {
|
|
|
858
869
|
return value2;
|
|
859
870
|
}
|
|
860
871
|
if (typeof value2 !== "string") {
|
|
861
|
-
throw new
|
|
872
|
+
throw new M2Error(`Error parsing "${value2}" as an array.`);
|
|
862
873
|
}
|
|
863
874
|
try {
|
|
864
875
|
const a = JSON.parse(value2);
|
|
@@ -871,7 +882,7 @@ class M2c2KitHelpers {
|
|
|
871
882
|
return a;
|
|
872
883
|
}
|
|
873
884
|
}
|
|
874
|
-
throw new
|
|
885
|
+
throw new M2Error(`Error parsing "${value2}" as an array.`);
|
|
875
886
|
}
|
|
876
887
|
function canBeObject(value2) {
|
|
877
888
|
if (typeof value2 === "object" && !Array.isArray(value2) && value2 !== null) {
|
|
@@ -898,7 +909,7 @@ class M2c2KitHelpers {
|
|
|
898
909
|
return value2;
|
|
899
910
|
}
|
|
900
911
|
if (typeof value2 !== "string") {
|
|
901
|
-
throw new
|
|
912
|
+
throw new M2Error(`Error parsing "${value2}" as an object.`);
|
|
902
913
|
}
|
|
903
914
|
try {
|
|
904
915
|
const o = JSON.parse(value2);
|
|
@@ -911,7 +922,7 @@ class M2c2KitHelpers {
|
|
|
911
922
|
return o;
|
|
912
923
|
}
|
|
913
924
|
}
|
|
914
|
-
throw new
|
|
925
|
+
throw new M2Error(`Error parsing "${value2}" as an object.`);
|
|
915
926
|
}
|
|
916
927
|
function canBeNull(value2) {
|
|
917
928
|
if (value2 === null || value2 === "null") {
|
|
@@ -921,7 +932,7 @@ class M2c2KitHelpers {
|
|
|
921
932
|
}
|
|
922
933
|
function asNull(value2) {
|
|
923
934
|
if (value2 !== "null" && value2 !== null) {
|
|
924
|
-
throw new
|
|
935
|
+
throw new M2Error(`Error parsing "${value2}" as null.`);
|
|
925
936
|
}
|
|
926
937
|
return null;
|
|
927
938
|
}
|
|
@@ -944,20 +955,20 @@ class M2c2KitHelpers {
|
|
|
944
955
|
null: asNull
|
|
945
956
|
};
|
|
946
957
|
if (type === void 0) {
|
|
947
|
-
throw new
|
|
958
|
+
throw new M2Error(`Error with "${value}" as a target type.`);
|
|
948
959
|
}
|
|
949
960
|
if (!Array.isArray(type)) {
|
|
950
961
|
if (typeCheckers[type](value)) {
|
|
951
962
|
return typeConverters[type](value);
|
|
952
963
|
}
|
|
953
|
-
throw new
|
|
964
|
+
throw new M2Error(`Error parsing "${value}" as a ${type}.`);
|
|
954
965
|
}
|
|
955
966
|
for (const t of type) {
|
|
956
967
|
if (typeCheckers[t](value)) {
|
|
957
968
|
return typeConverters[t](value);
|
|
958
969
|
}
|
|
959
970
|
}
|
|
960
|
-
throw new
|
|
971
|
+
throw new M2Error(`Error parsing "${value}" as one of ${type}.`);
|
|
961
972
|
}
|
|
962
973
|
/**
|
|
963
974
|
* Load scripts from URLs.
|
|
@@ -1237,7 +1248,7 @@ class M2c2KitHelpers {
|
|
|
1237
1248
|
*/
|
|
1238
1249
|
static isPointInsideRectangle(point, rect) {
|
|
1239
1250
|
if (rect.length !== 4) {
|
|
1240
|
-
throw new
|
|
1251
|
+
throw new M2Error("Invalid input: expected an array of four points");
|
|
1241
1252
|
}
|
|
1242
1253
|
return M2c2KitHelpers.arePointsOnSameSideOfLine(
|
|
1243
1254
|
point,
|
|
@@ -1300,7 +1311,7 @@ class M2c2KitHelpers {
|
|
|
1300
1311
|
*/
|
|
1301
1312
|
static findCentroid(points) {
|
|
1302
1313
|
if (points.length !== 4) {
|
|
1303
|
-
throw new
|
|
1314
|
+
throw new M2Error("Invalid input: expected an array of four points");
|
|
1304
1315
|
}
|
|
1305
1316
|
let xSum = 0;
|
|
1306
1317
|
let ySum = 0;
|
|
@@ -1383,7 +1394,7 @@ function nodeNeedsRotation(node) {
|
|
|
1383
1394
|
}
|
|
1384
1395
|
function rotateRectangle(rect, radians, center) {
|
|
1385
1396
|
if (rect.length !== 4) {
|
|
1386
|
-
throw new
|
|
1397
|
+
throw new M2Error("Invalid input: expected an array of four points");
|
|
1387
1398
|
}
|
|
1388
1399
|
const rotated = [];
|
|
1389
1400
|
for (const p of rect) {
|
|
@@ -1421,7 +1432,7 @@ class Futurable {
|
|
|
1421
1432
|
*/
|
|
1422
1433
|
pushToExpression(value) {
|
|
1423
1434
|
if (value === this) {
|
|
1424
|
-
throw new
|
|
1435
|
+
throw new M2Error(
|
|
1425
1436
|
"Cannot add, subtract, or assign a Futurable with itself."
|
|
1426
1437
|
);
|
|
1427
1438
|
}
|
|
@@ -1760,7 +1771,7 @@ class Action {
|
|
|
1760
1771
|
Action.evaluateRotateAction(action, node, elapsed, dt);
|
|
1761
1772
|
break;
|
|
1762
1773
|
default:
|
|
1763
|
-
throw new
|
|
1774
|
+
throw new M2Error(`Action type not recognized: ${action.type}`);
|
|
1764
1775
|
}
|
|
1765
1776
|
}
|
|
1766
1777
|
static evaluateRepeatingActions(action, now) {
|
|
@@ -1778,7 +1789,7 @@ class Action {
|
|
|
1778
1789
|
action.restartAction(action, now);
|
|
1779
1790
|
} else {
|
|
1780
1791
|
if (action.type === ActionType.RepeatForever) {
|
|
1781
|
-
throw new
|
|
1792
|
+
throw new M2Error("RepeatForever action should never complete");
|
|
1782
1793
|
}
|
|
1783
1794
|
action.duration.assign(action.cumulativeDuration);
|
|
1784
1795
|
action.running = false;
|
|
@@ -1884,7 +1895,7 @@ class Action {
|
|
|
1884
1895
|
}
|
|
1885
1896
|
static evaluatePlayAction(node, action) {
|
|
1886
1897
|
if (node.type !== M2NodeType.SoundPlayer) {
|
|
1887
|
-
throw new
|
|
1898
|
+
throw new M2Error("Play action can only be used with a SoundPlayer");
|
|
1888
1899
|
}
|
|
1889
1900
|
const playAction = action;
|
|
1890
1901
|
const soundPlayer = node;
|
|
@@ -1907,7 +1918,7 @@ class Action {
|
|
|
1907
1918
|
playAction.started = true;
|
|
1908
1919
|
} else {
|
|
1909
1920
|
if (m2Sound.status === M2SoundStatus.Error) {
|
|
1910
|
-
throw new
|
|
1921
|
+
throw new M2Error(
|
|
1911
1922
|
`error loading sound ${m2Sound.soundName} (url ${m2Sound.url})`
|
|
1912
1923
|
);
|
|
1913
1924
|
}
|
|
@@ -2075,13 +2086,17 @@ class Action {
|
|
|
2075
2086
|
*/
|
|
2076
2087
|
static rotate(options) {
|
|
2077
2088
|
if (options.byAngle !== void 0 && options.toAngle !== void 0) {
|
|
2078
|
-
throw new
|
|
2089
|
+
throw new M2Error(
|
|
2090
|
+
"rotate Action: cannot specify both byAngle and toAngle"
|
|
2091
|
+
);
|
|
2079
2092
|
}
|
|
2080
2093
|
if (options.byAngle === void 0 && options.toAngle === void 0) {
|
|
2081
|
-
throw new
|
|
2094
|
+
throw new M2Error(
|
|
2095
|
+
"rotate Action: must specify either byAngle or toAngle"
|
|
2096
|
+
);
|
|
2082
2097
|
}
|
|
2083
2098
|
if (options.toAngle === void 0 && options.shortestUnitArc !== void 0) {
|
|
2084
|
-
throw new
|
|
2099
|
+
throw new M2Error(
|
|
2085
2100
|
"rotate Action: shortestUnitArc can only be specified when toAngle is provided"
|
|
2086
2101
|
);
|
|
2087
2102
|
}
|
|
@@ -2252,7 +2267,7 @@ class RepeatAction extends Action {
|
|
|
2252
2267
|
}
|
|
2253
2268
|
clone() {
|
|
2254
2269
|
if (this.children.length !== 1) {
|
|
2255
|
-
throw new
|
|
2270
|
+
throw new M2Error("Repeat action must have exactly one child");
|
|
2256
2271
|
}
|
|
2257
2272
|
const clonedAction = Action.repeat({
|
|
2258
2273
|
// RepeatAction always has exactly one child
|
|
@@ -2297,7 +2312,7 @@ class RepeatForeverAction extends RepeatAction {
|
|
|
2297
2312
|
}
|
|
2298
2313
|
clone() {
|
|
2299
2314
|
if (this.children.length !== 1) {
|
|
2300
|
-
throw new
|
|
2315
|
+
throw new M2Error("RepeatForever action must have exactly one child");
|
|
2301
2316
|
}
|
|
2302
2317
|
const clonedAction = Action.repeatForever({
|
|
2303
2318
|
// RepeatForeverAction always has exactly one child
|
|
@@ -2982,10 +2997,10 @@ class M2Node {
|
|
|
2982
2997
|
}
|
|
2983
2998
|
// we will override this in each derived class. This method will never be called.
|
|
2984
2999
|
initialize() {
|
|
2985
|
-
throw new
|
|
3000
|
+
throw new M2Error("initialize() called in abstract base class Node.");
|
|
2986
3001
|
}
|
|
2987
3002
|
get completeNodeOptions() {
|
|
2988
|
-
throw new
|
|
3003
|
+
throw new M2Error(
|
|
2989
3004
|
"get completeNodeOptions() called in abstract base class Node."
|
|
2990
3005
|
);
|
|
2991
3006
|
}
|
|
@@ -3055,7 +3070,7 @@ class M2Node {
|
|
|
3055
3070
|
get game() {
|
|
3056
3071
|
const findParentScene = (node) => {
|
|
3057
3072
|
if (!node.parent) {
|
|
3058
|
-
throw new
|
|
3073
|
+
throw new M2Error(`Node ${this} has not been added to a scene.`);
|
|
3059
3074
|
} else if (node.parent.type === M2NodeType.Scene) {
|
|
3060
3075
|
return node.parent;
|
|
3061
3076
|
} else {
|
|
@@ -3097,17 +3112,17 @@ class M2Node {
|
|
|
3097
3112
|
addChild(child) {
|
|
3098
3113
|
const suppressEvents = this.suppressEvents || child.suppressEvents;
|
|
3099
3114
|
if (child === this) {
|
|
3100
|
-
throw new
|
|
3115
|
+
throw new M2Error(
|
|
3101
3116
|
`Cannot add node ${child.toString()} as a child to itself.`
|
|
3102
3117
|
);
|
|
3103
3118
|
}
|
|
3104
3119
|
if (child.type == M2NodeType.Scene) {
|
|
3105
|
-
throw new
|
|
3120
|
+
throw new M2Error(
|
|
3106
3121
|
`Cannot add scene ${child.toString()} as a child to node ${this.toString()}. A scene cannot be the child of a node. A scene can only be added to a game object.`
|
|
3107
3122
|
);
|
|
3108
3123
|
}
|
|
3109
3124
|
if (this.children.filter((c) => c !== child).map((c) => c.name).includes(child.name)) {
|
|
3110
|
-
throw new
|
|
3125
|
+
throw new M2Error(
|
|
3111
3126
|
`Cannot add child node ${child.toString()} to parent node ${this.toString()}. A child with name "${child.name}" already exists on this parent.`
|
|
3112
3127
|
);
|
|
3113
3128
|
}
|
|
@@ -3138,11 +3153,11 @@ class M2Node {
|
|
|
3138
3153
|
}
|
|
3139
3154
|
const firstOtherParent = otherParents.find(Boolean);
|
|
3140
3155
|
if (firstOtherParent === this) {
|
|
3141
|
-
throw new
|
|
3156
|
+
throw new M2Error(
|
|
3142
3157
|
`Cannot add child node ${child.toString()} to parent node ${this.toString()}. This child already exists on this parent. The child cannot be added again.`
|
|
3143
3158
|
);
|
|
3144
3159
|
}
|
|
3145
|
-
throw new
|
|
3160
|
+
throw new M2Error(
|
|
3146
3161
|
`Cannot add child node ${child.toString()} to parent node ${this.toString()}. This child already exists on other parent node: ${firstOtherParent?.toString()}}. Remove the child from the other parent first.`
|
|
3147
3162
|
);
|
|
3148
3163
|
}
|
|
@@ -3181,7 +3196,7 @@ class M2Node {
|
|
|
3181
3196
|
child.parent = void 0;
|
|
3182
3197
|
this.children = this.children.filter((c) => c !== child);
|
|
3183
3198
|
} else {
|
|
3184
|
-
throw new
|
|
3199
|
+
throw new M2Error(
|
|
3185
3200
|
`cannot remove node ${child} from parent ${this} because the node is not currently a child of the parent`
|
|
3186
3201
|
);
|
|
3187
3202
|
}
|
|
@@ -3205,7 +3220,7 @@ class M2Node {
|
|
|
3205
3220
|
removeChildren(children) {
|
|
3206
3221
|
children.forEach((child) => {
|
|
3207
3222
|
if (!this.children.includes(child)) {
|
|
3208
|
-
throw new
|
|
3223
|
+
throw new M2Error(
|
|
3209
3224
|
`cannot remove node ${child} from parent ${this} because the node is not currently a child of the parent`
|
|
3210
3225
|
);
|
|
3211
3226
|
}
|
|
@@ -3224,7 +3239,7 @@ class M2Node {
|
|
|
3224
3239
|
descendant(name) {
|
|
3225
3240
|
const descendant = this.descendants.filter((child) => child.name === name).find(Boolean);
|
|
3226
3241
|
if (descendant === void 0) {
|
|
3227
|
-
throw new
|
|
3242
|
+
throw new M2Error(
|
|
3228
3243
|
`descendant with name ${name} not found on parent ${this.toString()}`
|
|
3229
3244
|
);
|
|
3230
3245
|
}
|
|
@@ -3449,7 +3464,7 @@ class M2Node {
|
|
|
3449
3464
|
additionalExceptionMessage = `. sibling node named "${nodeName}" has not been added to the game object`;
|
|
3450
3465
|
}
|
|
3451
3466
|
if (node === void 0) {
|
|
3452
|
-
throw new
|
|
3467
|
+
throw new M2Error(
|
|
3453
3468
|
"could not find sibling node for constraint" + additionalExceptionMessage
|
|
3454
3469
|
);
|
|
3455
3470
|
}
|
|
@@ -3612,7 +3627,7 @@ class M2Node {
|
|
|
3612
3627
|
}
|
|
3613
3628
|
}
|
|
3614
3629
|
if (siblingConstraint === void 0) {
|
|
3615
|
-
throw new
|
|
3630
|
+
throw new M2Error(
|
|
3616
3631
|
"error getting uuid of sibling constraint" + additionalExceptionMessage
|
|
3617
3632
|
);
|
|
3618
3633
|
}
|
|
@@ -3637,7 +3652,7 @@ class M2Node {
|
|
|
3637
3652
|
uuidsInUpdateOrder.forEach((uuid) => {
|
|
3638
3653
|
const child = this.children.filter((c) => c.uuid === uuid).find(Boolean);
|
|
3639
3654
|
if (child === void 0) {
|
|
3640
|
-
throw new
|
|
3655
|
+
throw new M2Error("error in dag topological sort");
|
|
3641
3656
|
}
|
|
3642
3657
|
childrenInUpdateOrder.push(child);
|
|
3643
3658
|
});
|
|
@@ -3705,7 +3720,7 @@ class M2Node {
|
|
|
3705
3720
|
}
|
|
3706
3721
|
getDrawableOptions() {
|
|
3707
3722
|
if (!this.isDrawable) {
|
|
3708
|
-
throw new
|
|
3723
|
+
throw new M2Error(
|
|
3709
3724
|
"getDrawableOptions() called object that is not IDrawable"
|
|
3710
3725
|
);
|
|
3711
3726
|
}
|
|
@@ -3717,7 +3732,7 @@ class M2Node {
|
|
|
3717
3732
|
}
|
|
3718
3733
|
getTextOptions() {
|
|
3719
3734
|
if (!this.isText) {
|
|
3720
|
-
throw new
|
|
3735
|
+
throw new M2Error("getTextOptions() called object that is not IText");
|
|
3721
3736
|
}
|
|
3722
3737
|
const textOptions = {
|
|
3723
3738
|
text: this.text,
|
|
@@ -3734,7 +3749,7 @@ class M2Node {
|
|
|
3734
3749
|
*/
|
|
3735
3750
|
// get parentScene(): Scene {
|
|
3736
3751
|
// if (this.type === M2NodeType.scene) {
|
|
3737
|
-
// throw new
|
|
3752
|
+
// throw new M2Error(
|
|
3738
3753
|
// `Node ${this} is a scene and cannot have a parent scene`
|
|
3739
3754
|
// );
|
|
3740
3755
|
// }
|
|
@@ -3743,21 +3758,23 @@ class M2Node {
|
|
|
3743
3758
|
// } else if (this.parent) {
|
|
3744
3759
|
// return this.parent.parentScene;
|
|
3745
3760
|
// }
|
|
3746
|
-
// throw new
|
|
3761
|
+
// throw new M2Error(`Node ${this} has not been added to a scene`);
|
|
3747
3762
|
// }
|
|
3748
3763
|
get canvasKit() {
|
|
3749
3764
|
return this.game.canvasKit;
|
|
3750
3765
|
}
|
|
3751
3766
|
get parentSceneAsNode() {
|
|
3752
3767
|
if (this.type === M2NodeType.Scene) {
|
|
3753
|
-
throw new
|
|
3768
|
+
throw new M2Error(
|
|
3769
|
+
`Node ${this} is a scene and cannot have a parent scene`
|
|
3770
|
+
);
|
|
3754
3771
|
}
|
|
3755
3772
|
if (this.parent && this.parent.type === M2NodeType.Scene) {
|
|
3756
3773
|
return this.parent;
|
|
3757
3774
|
} else if (this.parent) {
|
|
3758
3775
|
return this.parent.parentSceneAsNode;
|
|
3759
3776
|
}
|
|
3760
|
-
throw new
|
|
3777
|
+
throw new M2Error(`Node ${this} has not been added to a scene`);
|
|
3761
3778
|
}
|
|
3762
3779
|
get size() {
|
|
3763
3780
|
const node = this;
|
|
@@ -3908,7 +3925,7 @@ class M2Node {
|
|
|
3908
3925
|
if (inDegree.has(edge)) {
|
|
3909
3926
|
const inDegreeCount = inDegree.get(edge);
|
|
3910
3927
|
if (inDegreeCount === void 0) {
|
|
3911
|
-
throw new
|
|
3928
|
+
throw new M2Error(`Could not find inDegree for edge ${edge}`);
|
|
3912
3929
|
}
|
|
3913
3930
|
inDegree.set(edge, inDegreeCount + 1);
|
|
3914
3931
|
} else {
|
|
@@ -3932,7 +3949,7 @@ class M2Node {
|
|
|
3932
3949
|
adjList.get(current)?.forEach((edge) => {
|
|
3933
3950
|
const inDegreeCount = inDegree.get(edge);
|
|
3934
3951
|
if (inDegreeCount === void 0) {
|
|
3935
|
-
throw new
|
|
3952
|
+
throw new M2Error(`Could not find inDegree for edge ${edge}`);
|
|
3936
3953
|
}
|
|
3937
3954
|
if (inDegree.has(edge) && inDegreeCount > 0) {
|
|
3938
3955
|
const newDegree = inDegreeCount - 1;
|
|
@@ -4173,7 +4190,7 @@ class ImageManager {
|
|
|
4173
4190
|
localizeImageUrl(url, locale) {
|
|
4174
4191
|
const extensionIndex = url.lastIndexOf(".");
|
|
4175
4192
|
if (extensionIndex === -1) {
|
|
4176
|
-
throw new
|
|
4193
|
+
throw new M2Error("URL does not have an extension");
|
|
4177
4194
|
}
|
|
4178
4195
|
const localizedUrl = url.slice(0, extensionIndex) + `.${locale}` + url.slice(extensionIndex);
|
|
4179
4196
|
return localizedUrl;
|
|
@@ -4201,7 +4218,7 @@ class ImageManager {
|
|
|
4201
4218
|
browserImages.map((i) => i.imageName)
|
|
4202
4219
|
);
|
|
4203
4220
|
if (duplicateImageNames.length > 0) {
|
|
4204
|
-
throw new
|
|
4221
|
+
throw new M2Error(
|
|
4205
4222
|
`image names must be unique. these image names are duplicated within a game ${this.game.id}: ` + duplicateImageNames.join(", ")
|
|
4206
4223
|
);
|
|
4207
4224
|
}
|
|
@@ -4229,7 +4246,7 @@ class ImageManager {
|
|
|
4229
4246
|
if (error instanceof Error) {
|
|
4230
4247
|
throw error;
|
|
4231
4248
|
} else {
|
|
4232
|
-
throw new
|
|
4249
|
+
throw new M2Error(
|
|
4233
4250
|
`prepareDeferredImage(): unable to render image named ${image.imageName}. image source was ${image.svgString ? "svgString" : `url: ${image.url}`}`
|
|
4234
4251
|
);
|
|
4235
4252
|
}
|
|
@@ -4256,7 +4273,7 @@ class ImageManager {
|
|
|
4256
4273
|
const imgElement = document.createElement("img");
|
|
4257
4274
|
const renderAfterBrowserLoad = (resolve) => {
|
|
4258
4275
|
if (!this.scratchCanvas || !this.ctx || !this.scale) {
|
|
4259
|
-
throw new
|
|
4276
|
+
throw new M2Error("image manager not set up");
|
|
4260
4277
|
}
|
|
4261
4278
|
this.scratchCanvas.width = image.width * this.scale;
|
|
4262
4279
|
this.scratchCanvas.height = image.height * this.scale;
|
|
@@ -4265,14 +4282,14 @@ class ImageManager {
|
|
|
4265
4282
|
this.ctx.drawImage(imgElement, 0, 0, image.width, image.height);
|
|
4266
4283
|
this.scratchCanvas.toBlob((blob) => {
|
|
4267
4284
|
if (!blob) {
|
|
4268
|
-
throw new
|
|
4285
|
+
throw new M2Error(
|
|
4269
4286
|
`renderM2Image(): blob is undefined for ${image.imageName}`
|
|
4270
4287
|
);
|
|
4271
4288
|
}
|
|
4272
4289
|
blob.arrayBuffer().then((buffer) => {
|
|
4273
4290
|
const canvaskitImage = this.canvasKit.MakeImageFromEncoded(buffer);
|
|
4274
4291
|
if (!canvaskitImage) {
|
|
4275
|
-
throw new
|
|
4292
|
+
throw new M2Error(
|
|
4276
4293
|
`could not create image with name "${image.imageName}."`
|
|
4277
4294
|
);
|
|
4278
4295
|
}
|
|
@@ -4308,12 +4325,12 @@ class ImageManager {
|
|
|
4308
4325
|
renderAfterBrowserLoad(resolve);
|
|
4309
4326
|
};
|
|
4310
4327
|
if (!image.svgString && !image.url) {
|
|
4311
|
-
throw new
|
|
4328
|
+
throw new M2Error(
|
|
4312
4329
|
`no svgString or url provided for image named ${image.imageName}`
|
|
4313
4330
|
);
|
|
4314
4331
|
}
|
|
4315
4332
|
if (image.svgString && image.url) {
|
|
4316
|
-
throw new
|
|
4333
|
+
throw new M2Error(
|
|
4317
4334
|
`provide svgString or url. both were provided for image named ${image.imageName}`
|
|
4318
4335
|
);
|
|
4319
4336
|
}
|
|
@@ -4419,7 +4436,9 @@ class ImageManager {
|
|
|
4419
4436
|
document.body.appendChild(this._scratchCanvas);
|
|
4420
4437
|
const context2d = this._scratchCanvas.getContext("2d");
|
|
4421
4438
|
if (context2d === null) {
|
|
4422
|
-
throw new
|
|
4439
|
+
throw new M2Error(
|
|
4440
|
+
"could not get 2d canvas context from scratch canvas"
|
|
4441
|
+
);
|
|
4423
4442
|
}
|
|
4424
4443
|
this.ctx = context2d;
|
|
4425
4444
|
this.scale = window.devicePixelRatio;
|
|
@@ -4432,6 +4451,8 @@ class ImageManager {
|
|
|
4432
4451
|
}
|
|
4433
4452
|
}
|
|
4434
4453
|
|
|
4454
|
+
const STRING_INTERPOLATION_CHARACTERS = "{{}}";
|
|
4455
|
+
const TRANSLATION_INTERPOLATION_CHARACTERS = "[[]]";
|
|
4435
4456
|
class I18n {
|
|
4436
4457
|
/**
|
|
4437
4458
|
* The I18n class localizes text and images.
|
|
@@ -4539,39 +4560,198 @@ class I18n {
|
|
|
4539
4560
|
}
|
|
4540
4561
|
}
|
|
4541
4562
|
/**
|
|
4563
|
+
* Returns the localized text and font information for the given key in the
|
|
4564
|
+
* current locale.
|
|
4542
4565
|
*
|
|
4543
4566
|
* @param key - Translation key
|
|
4544
4567
|
* @param interpolation - Interpolation keys and values to replace
|
|
4545
|
-
* placeholders in the translated text
|
|
4546
|
-
* @returns
|
|
4547
|
-
*
|
|
4568
|
+
* string interpolation placeholders in the translated text
|
|
4569
|
+
* @returns object with the localized text, font information, and whether the
|
|
4570
|
+
* translation is a fallback.
|
|
4548
4571
|
*/
|
|
4549
4572
|
getTextLocalization(key, interpolation) {
|
|
4550
|
-
|
|
4551
|
-
|
|
4573
|
+
const primaryResult = this.attemptTranslation(key, interpolation);
|
|
4574
|
+
if (primaryResult.isFallbackOrMissingTranslation) {
|
|
4575
|
+
const placeholdersResult = this.handleTranslationPlaceholders(
|
|
4576
|
+
key,
|
|
4577
|
+
primaryResult,
|
|
4578
|
+
interpolation
|
|
4579
|
+
);
|
|
4580
|
+
if (placeholdersResult) {
|
|
4581
|
+
if (interpolation !== void 0) {
|
|
4582
|
+
placeholdersResult.text = this.insertInterpolations(
|
|
4583
|
+
STRING_INTERPOLATION_CHARACTERS,
|
|
4584
|
+
placeholdersResult.text,
|
|
4585
|
+
interpolation
|
|
4586
|
+
);
|
|
4587
|
+
}
|
|
4588
|
+
return placeholdersResult;
|
|
4589
|
+
}
|
|
4590
|
+
}
|
|
4591
|
+
return primaryResult;
|
|
4592
|
+
}
|
|
4593
|
+
/**
|
|
4594
|
+
*
|
|
4595
|
+
* @param key - Translation key to be translated
|
|
4596
|
+
* @param interpolation - String interpolation keys and values to replace
|
|
4597
|
+
* @returns result object with the localized text, font
|
|
4598
|
+
*/
|
|
4599
|
+
attemptTranslation(key, interpolation) {
|
|
4552
4600
|
let tf = this.tf(key, interpolation);
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
} else {
|
|
4601
|
+
let isFallbackOrMissingTranslation = false;
|
|
4602
|
+
if (tf?.text === void 0) {
|
|
4556
4603
|
tf = this.tf(key, {
|
|
4557
4604
|
useFallbackLocale: true,
|
|
4558
4605
|
...interpolation
|
|
4559
4606
|
});
|
|
4560
|
-
if (tf === void 0 || tf.text === void 0) {
|
|
4561
|
-
localizedText = key;
|
|
4562
|
-
} else {
|
|
4563
|
-
localizedText = tf.text;
|
|
4564
|
-
}
|
|
4565
4607
|
isFallbackOrMissingTranslation = true;
|
|
4566
4608
|
}
|
|
4609
|
+
const text = tf?.text ?? key;
|
|
4567
4610
|
return {
|
|
4568
|
-
text
|
|
4611
|
+
text,
|
|
4569
4612
|
fontSize: tf?.fontSize,
|
|
4570
4613
|
fontName: tf?.fontName,
|
|
4571
4614
|
fontNames: tf?.fontNames,
|
|
4572
4615
|
isFallbackOrMissingTranslation
|
|
4573
4616
|
};
|
|
4574
4617
|
}
|
|
4618
|
+
/**
|
|
4619
|
+
* Handles translation placeholders in a string.
|
|
4620
|
+
*
|
|
4621
|
+
* @remarks The value of a translation placeholder (text within `[[]]`)
|
|
4622
|
+
* may also contain string interpolation placeholders (`{{}}`), so we need
|
|
4623
|
+
* to handle that as well.
|
|
4624
|
+
*
|
|
4625
|
+
* @param key - Translation key for the string to be localized
|
|
4626
|
+
* @param initialResult - Initial translation result for the string
|
|
4627
|
+
* @param interpolation - Interpolation keys and values to replace
|
|
4628
|
+
* interpolation placeholders in the translated text
|
|
4629
|
+
* @returns result object with the localized text,
|
|
4630
|
+
*/
|
|
4631
|
+
handleTranslationPlaceholders(key, initialResult, interpolation) {
|
|
4632
|
+
const placeholders = this.getTranslationPlaceholders(key);
|
|
4633
|
+
if (placeholders.length === 0) {
|
|
4634
|
+
return null;
|
|
4635
|
+
}
|
|
4636
|
+
const fontProps = {
|
|
4637
|
+
size: /* @__PURE__ */ new Set(),
|
|
4638
|
+
name: /* @__PURE__ */ new Set(),
|
|
4639
|
+
names: /* @__PURE__ */ new Set()
|
|
4640
|
+
};
|
|
4641
|
+
const interpolationMap = {};
|
|
4642
|
+
let isFallbackOrMissingTranslation = false;
|
|
4643
|
+
placeholders.forEach((placeholderKey) => {
|
|
4644
|
+
const placeholderResult = this.translatePlaceholder(
|
|
4645
|
+
placeholderKey,
|
|
4646
|
+
fontProps,
|
|
4647
|
+
interpolation
|
|
4648
|
+
);
|
|
4649
|
+
interpolationMap[placeholderKey] = placeholderResult.text;
|
|
4650
|
+
isFallbackOrMissingTranslation = isFallbackOrMissingTranslation || placeholderResult.isFallback;
|
|
4651
|
+
});
|
|
4652
|
+
this.warnConflictingFontProperties(key, fontProps);
|
|
4653
|
+
const text = this.insertInterpolations(
|
|
4654
|
+
TRANSLATION_INTERPOLATION_CHARACTERS,
|
|
4655
|
+
key,
|
|
4656
|
+
interpolationMap
|
|
4657
|
+
);
|
|
4658
|
+
const fontSize = initialResult.fontSize || (fontProps.size.size > 0 ? [...fontProps.size][0] : void 0);
|
|
4659
|
+
const fontName = initialResult.fontName || (fontProps.name.size > 0 ? [...fontProps.name][0] : void 0);
|
|
4660
|
+
const fontNames = initialResult.fontNames || (fontProps.names.size > 0 ? [...fontProps.names][0].split(",") : void 0);
|
|
4661
|
+
return {
|
|
4662
|
+
text,
|
|
4663
|
+
fontSize,
|
|
4664
|
+
fontName,
|
|
4665
|
+
fontNames,
|
|
4666
|
+
isFallbackOrMissingTranslation
|
|
4667
|
+
};
|
|
4668
|
+
}
|
|
4669
|
+
/**
|
|
4670
|
+
* Translates a translation placeholder key to its text and collects font properties.
|
|
4671
|
+
*
|
|
4672
|
+
* @param placeholderKey - Translation key for the placeholder
|
|
4673
|
+
* @param fontProps - Font properties sets to collect font information
|
|
4674
|
+
* @param interpolation - Interpolation keys and values to replace
|
|
4675
|
+
* string interpolation placeholders in the translated text
|
|
4676
|
+
* @returns result object with the translated text and whether it is a fallback translation
|
|
4677
|
+
*/
|
|
4678
|
+
translatePlaceholder(placeholderKey, fontProps, interpolation) {
|
|
4679
|
+
let tf = this.tf(placeholderKey, interpolation);
|
|
4680
|
+
let isFallback = false;
|
|
4681
|
+
if (tf?.text === void 0) {
|
|
4682
|
+
tf = this.tf(placeholderKey, {
|
|
4683
|
+
useFallbackLocale: true,
|
|
4684
|
+
...interpolation
|
|
4685
|
+
});
|
|
4686
|
+
isFallback = true;
|
|
4687
|
+
}
|
|
4688
|
+
if (tf?.fontSize !== void 0) {
|
|
4689
|
+
fontProps.size.add(tf.fontSize);
|
|
4690
|
+
}
|
|
4691
|
+
if (tf?.fontName !== void 0) {
|
|
4692
|
+
fontProps.name.add(tf.fontName);
|
|
4693
|
+
}
|
|
4694
|
+
if (tf?.fontNames !== void 0) {
|
|
4695
|
+
fontProps.names.add(tf.fontNames.sort().join(","));
|
|
4696
|
+
}
|
|
4697
|
+
return {
|
|
4698
|
+
text: tf?.text ?? placeholderKey,
|
|
4699
|
+
isFallback
|
|
4700
|
+
};
|
|
4701
|
+
}
|
|
4702
|
+
/**
|
|
4703
|
+
* Extracts translation key placeholders from a string.
|
|
4704
|
+
*
|
|
4705
|
+
* @remarks Translation key placeholders are denoted by double square brackets,
|
|
4706
|
+
* e.g., "The translated word is [[RED]]", and RED is a key for translation.
|
|
4707
|
+
*
|
|
4708
|
+
* @param s - string to search for placeholders
|
|
4709
|
+
* @returns an array of placeholders found in the string, without the square
|
|
4710
|
+
* brackets
|
|
4711
|
+
*/
|
|
4712
|
+
getTranslationPlaceholders(s) {
|
|
4713
|
+
const [open, close] = [
|
|
4714
|
+
TRANSLATION_INTERPOLATION_CHARACTERS.slice(0, 2),
|
|
4715
|
+
TRANSLATION_INTERPOLATION_CHARACTERS.slice(2)
|
|
4716
|
+
];
|
|
4717
|
+
const escapedOpen = open.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
4718
|
+
const escapedClose = close.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
4719
|
+
const regex = new RegExp(`${escapedOpen}(.*?)${escapedClose}`, "g");
|
|
4720
|
+
const matches = s.match(regex);
|
|
4721
|
+
if (!matches) {
|
|
4722
|
+
return [];
|
|
4723
|
+
}
|
|
4724
|
+
return matches.map(
|
|
4725
|
+
(placeholder) => placeholder.slice(open.length, -close.length).trim()
|
|
4726
|
+
);
|
|
4727
|
+
}
|
|
4728
|
+
/**
|
|
4729
|
+
* Logs warnings if the string to be localized has conflicting font
|
|
4730
|
+
* properties.
|
|
4731
|
+
*
|
|
4732
|
+
* @remarks This can happen due to multiple placeholders in the string
|
|
4733
|
+
* that specify different font sizes, font names, or font names arrays.
|
|
4734
|
+
*
|
|
4735
|
+
* @param key - Translation key for which the string is being localized
|
|
4736
|
+
* @param fontProps - font properties sets collected from the placeholders
|
|
4737
|
+
*/
|
|
4738
|
+
warnConflictingFontProperties(key, fontProps) {
|
|
4739
|
+
if (fontProps.size.size > 1) {
|
|
4740
|
+
console.warn(
|
|
4741
|
+
`i18n: placeholders set multiple different font sizes in string to be localized. Only one will be used. String: ${key}`
|
|
4742
|
+
);
|
|
4743
|
+
}
|
|
4744
|
+
if (fontProps.name.size > 1) {
|
|
4745
|
+
console.warn(
|
|
4746
|
+
`i18n: placeholders set multiple different font names within string to be localized. Only one will be used. String: ${key}`
|
|
4747
|
+
);
|
|
4748
|
+
}
|
|
4749
|
+
if (fontProps.names.size > 1) {
|
|
4750
|
+
console.warn(
|
|
4751
|
+
`i18n: placeholders set multiple different font names arrays within string to be localized. Only one will be used. String: ${key}`
|
|
4752
|
+
);
|
|
4753
|
+
}
|
|
4754
|
+
}
|
|
4575
4755
|
/**
|
|
4576
4756
|
* Returns the translation text for the given key in the current locale.
|
|
4577
4757
|
*
|
|
@@ -4604,6 +4784,7 @@ class I18n {
|
|
|
4604
4784
|
const t = this.translation[this.locale]?.[key];
|
|
4605
4785
|
if (this.isStringOrTextWithFontCustomization(t)) {
|
|
4606
4786
|
return this.insertInterpolations(
|
|
4787
|
+
STRING_INTERPOLATION_CHARACTERS,
|
|
4607
4788
|
this.getKeyText(t),
|
|
4608
4789
|
interpolationMap
|
|
4609
4790
|
);
|
|
@@ -4613,6 +4794,7 @@ class I18n {
|
|
|
4613
4794
|
const fallbackT = this.translation[this.fallbackLocale]?.[key];
|
|
4614
4795
|
if (this.isStringOrTextWithFontCustomization(fallbackT)) {
|
|
4615
4796
|
return this.insertInterpolations(
|
|
4797
|
+
STRING_INTERPOLATION_CHARACTERS,
|
|
4616
4798
|
this.getKeyText(fallbackT),
|
|
4617
4799
|
interpolationMap
|
|
4618
4800
|
);
|
|
@@ -4641,6 +4823,7 @@ class I18n {
|
|
|
4641
4823
|
const tf = this.getKeyTextAndFont(t, this.locale);
|
|
4642
4824
|
if (tf.text) {
|
|
4643
4825
|
tf.text = this.insertInterpolations(
|
|
4826
|
+
STRING_INTERPOLATION_CHARACTERS,
|
|
4644
4827
|
tf.text,
|
|
4645
4828
|
interpolationMap
|
|
4646
4829
|
);
|
|
@@ -4657,6 +4840,7 @@ class I18n {
|
|
|
4657
4840
|
);
|
|
4658
4841
|
if (tf.text) {
|
|
4659
4842
|
tf.text = this.insertInterpolations(
|
|
4843
|
+
STRING_INTERPOLATION_CHARACTERS,
|
|
4660
4844
|
tf.text,
|
|
4661
4845
|
interpolationMap
|
|
4662
4846
|
);
|
|
@@ -4713,15 +4897,19 @@ class I18n {
|
|
|
4713
4897
|
return { text, fontSize, fontNames };
|
|
4714
4898
|
}
|
|
4715
4899
|
}
|
|
4716
|
-
insertInterpolations(text, options) {
|
|
4900
|
+
insertInterpolations(specialChars, text, options) {
|
|
4717
4901
|
if (!options) {
|
|
4718
4902
|
return text;
|
|
4719
4903
|
}
|
|
4720
|
-
|
|
4904
|
+
const [open, close] = [specialChars.slice(0, 2), specialChars.slice(2)];
|
|
4905
|
+
const escapedOpen = open.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
4906
|
+
const escapedClose = close.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
4907
|
+
const regex = new RegExp(`${escapedOpen}(.*?)${escapedClose}`, "g");
|
|
4908
|
+
return text.replace(regex, (_match, key) => {
|
|
4721
4909
|
if (Object.prototype.hasOwnProperty.call(options, key)) {
|
|
4722
4910
|
return options[key];
|
|
4723
4911
|
} else {
|
|
4724
|
-
throw new
|
|
4912
|
+
throw new M2Error(
|
|
4725
4913
|
`insertInterpolations(): placeholder "${key}" not found. Text was ${text}, provided interpolation was ${JSON.stringify(options)}`
|
|
4726
4914
|
);
|
|
4727
4915
|
}
|
|
@@ -4931,7 +5119,7 @@ class EventStore {
|
|
|
4931
5119
|
while (this.events.length > 0 && this.events[0].timestamp <= replayTimestamp) {
|
|
4932
5120
|
const event = this.events.shift();
|
|
4933
5121
|
if (!event) {
|
|
4934
|
-
throw new
|
|
5122
|
+
throw new M2Error("EventStore.dequeueEvents(): undefined event");
|
|
4935
5123
|
}
|
|
4936
5124
|
if (event.sequence !== void 0 && event.sequence > this.replayThoughSequence) {
|
|
4937
5125
|
continue;
|
|
@@ -4951,7 +5139,7 @@ class EventStore {
|
|
|
4951
5139
|
sortEventStore(events) {
|
|
4952
5140
|
events.sort((a, b) => {
|
|
4953
5141
|
if (a.sequence === void 0 || b.sequence === void 0) {
|
|
4954
|
-
throw new
|
|
5142
|
+
throw new M2Error("EventStore.sortEventStore(): undefined sequence");
|
|
4955
5143
|
}
|
|
4956
5144
|
if (a.sequence !== b.sequence) {
|
|
4957
5145
|
return a.sequence - b.sequence;
|
|
@@ -4976,11 +5164,19 @@ const M2FontStatus = {
|
|
|
4976
5164
|
/** Font has fully finished loading and is ready to use. */
|
|
4977
5165
|
Ready: "Ready"};
|
|
4978
5166
|
|
|
5167
|
+
const TAG_NAME = {
|
|
5168
|
+
UNDERLINE: "u",
|
|
5169
|
+
ITALIC: "i",
|
|
5170
|
+
BOLD: "b",
|
|
5171
|
+
STRIKETHROUGH: "s",
|
|
5172
|
+
OVERLINE: "o"
|
|
5173
|
+
};
|
|
4979
5174
|
class Label extends M2Node {
|
|
4980
5175
|
/**
|
|
4981
5176
|
* Single or multi-line text formatted and rendered on the screen.
|
|
4982
5177
|
*
|
|
4983
|
-
* @remarks Label (in contrast to TextLine) has enhanced text support for
|
|
5178
|
+
* @remarks Label (in contrast to TextLine) has enhanced text support for
|
|
5179
|
+
* line wrapping, centering/alignment, and background colors.
|
|
4984
5180
|
*
|
|
4985
5181
|
* @param options - {@link LabelOptions}
|
|
4986
5182
|
*/
|
|
@@ -5005,6 +5201,9 @@ class Label extends M2Node {
|
|
|
5005
5201
|
// public getter/setter is below
|
|
5006
5202
|
this._localize = true;
|
|
5007
5203
|
this.localizedFontNames = [];
|
|
5204
|
+
this.textAfterLocalization = "";
|
|
5205
|
+
this.plainText = "";
|
|
5206
|
+
this.styleSegments = [];
|
|
5008
5207
|
handleInterfaceOptions(this, options);
|
|
5009
5208
|
if (options.horizontalAlignmentMode) {
|
|
5010
5209
|
this.horizontalAlignmentMode = options.horizontalAlignmentMode;
|
|
@@ -5045,7 +5244,7 @@ class Label extends M2Node {
|
|
|
5045
5244
|
ckTextAlign = this.canvasKit.TextAlign.Right;
|
|
5046
5245
|
break;
|
|
5047
5246
|
default:
|
|
5048
|
-
throw new
|
|
5247
|
+
throw new M2Error("unknown horizontalAlignmentMode");
|
|
5049
5248
|
}
|
|
5050
5249
|
if (!this.text) {
|
|
5051
5250
|
this.text = "";
|
|
@@ -5056,14 +5255,13 @@ class Label extends M2Node {
|
|
|
5056
5255
|
this.fontColor[2],
|
|
5057
5256
|
this.fontColor[3]
|
|
5058
5257
|
);
|
|
5059
|
-
let textForParagraph;
|
|
5060
5258
|
const i18n = this.game.i18n;
|
|
5061
5259
|
if (i18n && this.localize !== false) {
|
|
5062
5260
|
const textLocalization = i18n.getTextLocalization(
|
|
5063
5261
|
this.text,
|
|
5064
5262
|
this.interpolation
|
|
5065
5263
|
);
|
|
5066
|
-
|
|
5264
|
+
this.textAfterLocalization = textLocalization.text;
|
|
5067
5265
|
this.localizedFontSize = textLocalization.fontSize;
|
|
5068
5266
|
this.localizedFontName = textLocalization.fontName;
|
|
5069
5267
|
this.localizedFontNames = textLocalization.fontNames ?? [];
|
|
@@ -5076,10 +5274,13 @@ class Label extends M2Node {
|
|
|
5076
5274
|
);
|
|
5077
5275
|
}
|
|
5078
5276
|
} else {
|
|
5079
|
-
|
|
5277
|
+
this.textAfterLocalization = this.text;
|
|
5080
5278
|
}
|
|
5279
|
+
const parsedText = this.parseFormattedText(this.textAfterLocalization);
|
|
5280
|
+
this.plainText = parsedText.plainText;
|
|
5281
|
+
this.styleSegments = parsedText.styleSegments;
|
|
5081
5282
|
if (this.fontName && this.fontNames) {
|
|
5082
|
-
throw new
|
|
5283
|
+
throw new M2Error("cannot specify both fontName and fontNames");
|
|
5083
5284
|
}
|
|
5084
5285
|
const fontManager = this.game.fontManager;
|
|
5085
5286
|
const requiredFonts = this.getRequiredLabelFonts(fontManager);
|
|
@@ -5117,36 +5318,36 @@ class Label extends M2Node {
|
|
|
5117
5318
|
} else {
|
|
5118
5319
|
this.backgroundPaint.setColor(this.canvasKit.Color(0, 0, 0, 0));
|
|
5119
5320
|
}
|
|
5120
|
-
|
|
5121
|
-
|
|
5122
|
-
|
|
5123
|
-
|
|
5124
|
-
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
width: this.canvasKit.FontWidth.Normal,
|
|
5128
|
-
slant: this.canvasKit.FontSlant.Oblique
|
|
5129
|
-
},
|
|
5130
|
-
// Normal font style
|
|
5131
|
-
decoration: 0,
|
|
5132
|
-
// No decoration
|
|
5133
|
-
decorationThickness: 1,
|
|
5134
|
-
// Default decoration thickness
|
|
5135
|
-
decorationStyle: this.canvasKit.DecorationStyle.Solid,
|
|
5136
|
-
// Solid decoration style
|
|
5137
|
-
heightMultiplier: -1,
|
|
5138
|
-
// Providing -1, rather than 1.0, gives default height multiplier
|
|
5139
|
-
halfLeading: false,
|
|
5140
|
-
// Default half leading
|
|
5141
|
-
letterSpacing: 0,
|
|
5142
|
-
// Default letter spacing
|
|
5143
|
-
wordSpacing: 0
|
|
5144
|
-
// Default word spacing
|
|
5321
|
+
const defaultStyle = {
|
|
5322
|
+
fontFamilies: requiredFonts.map((font) => font.fontName),
|
|
5323
|
+
fontSize: (this.localizedFontSize ?? this.fontSize) * m2c2Globals.canvasScale,
|
|
5324
|
+
fontStyle: {
|
|
5325
|
+
weight: this.canvasKit.FontWeight.Normal,
|
|
5326
|
+
width: this.canvasKit.FontWidth.Normal,
|
|
5327
|
+
slant: this.canvasKit.FontSlant.Upright
|
|
5145
5328
|
},
|
|
5329
|
+
// Normal font style
|
|
5330
|
+
decoration: 0,
|
|
5331
|
+
// No decoration
|
|
5332
|
+
decorationThickness: 1,
|
|
5333
|
+
// Default decoration thickness
|
|
5334
|
+
decorationStyle: this.canvasKit.DecorationStyle.Solid,
|
|
5335
|
+
heightMultiplier: -1,
|
|
5336
|
+
// Providing -1, rather than 1.0, gives default height multiplier
|
|
5337
|
+
halfLeading: false,
|
|
5338
|
+
letterSpacing: 0,
|
|
5339
|
+
wordSpacing: 0
|
|
5340
|
+
};
|
|
5341
|
+
this.builder.pushPaintStyle(
|
|
5342
|
+
defaultStyle,
|
|
5146
5343
|
this.fontPaint,
|
|
5147
5344
|
this.backgroundPaint
|
|
5148
5345
|
);
|
|
5149
|
-
this.
|
|
5346
|
+
this.addStyleSegmentsToParagraphBuilder(
|
|
5347
|
+
this.builder,
|
|
5348
|
+
this.styleSegments,
|
|
5349
|
+
defaultStyle
|
|
5350
|
+
);
|
|
5150
5351
|
if (this.paragraph) {
|
|
5151
5352
|
this.paragraph.delete();
|
|
5152
5353
|
}
|
|
@@ -5158,7 +5359,9 @@ class Label extends M2Node {
|
|
|
5158
5359
|
let calculatedWidth = preferredWidth;
|
|
5159
5360
|
if (preferredWidth === 0 || this.layout.width === 0) {
|
|
5160
5361
|
if (this.parent === void 0) {
|
|
5161
|
-
throw new
|
|
5362
|
+
throw new M2Error(
|
|
5363
|
+
"width is set to match parent, but node has no parent"
|
|
5364
|
+
);
|
|
5162
5365
|
}
|
|
5163
5366
|
const marginStart = this.layout.marginStart ?? 0;
|
|
5164
5367
|
const marginEnd = this.layout.marginEnd ?? 0;
|
|
@@ -5174,6 +5377,216 @@ class Label extends M2Node {
|
|
|
5174
5377
|
this.size.height = this.paragraph.getHeight() / m2c2Globals.canvasScale;
|
|
5175
5378
|
this.needsInitialization = false;
|
|
5176
5379
|
}
|
|
5380
|
+
/**
|
|
5381
|
+
* Parses text with formatting tags and returns plain text and style segments.
|
|
5382
|
+
* Supports <b> for bold, <i> for italics, and <u> for underline.
|
|
5383
|
+
* Properly handles nested tags like <b><u>bold and underlined</u></b>.
|
|
5384
|
+
* Throws errors for malformed tags, but treats unknown tags as plain text.
|
|
5385
|
+
*
|
|
5386
|
+
* @param text - The text with formatting tags
|
|
5387
|
+
* @returns The parsed text result
|
|
5388
|
+
* @throws Error if tags are improperly nested or unclosed
|
|
5389
|
+
*/
|
|
5390
|
+
parseFormattedText(text) {
|
|
5391
|
+
let plainText = "";
|
|
5392
|
+
const styleChanges = [];
|
|
5393
|
+
const tagStack = [];
|
|
5394
|
+
const validTags = /* @__PURE__ */ new Set([
|
|
5395
|
+
TAG_NAME.UNDERLINE,
|
|
5396
|
+
TAG_NAME.BOLD,
|
|
5397
|
+
TAG_NAME.ITALIC,
|
|
5398
|
+
TAG_NAME.STRIKETHROUGH,
|
|
5399
|
+
TAG_NAME.OVERLINE
|
|
5400
|
+
]);
|
|
5401
|
+
const tagPattern = /<\/?([^>]+)>/g;
|
|
5402
|
+
let lastIndex = 0;
|
|
5403
|
+
let plainIndex = 0;
|
|
5404
|
+
let match = null;
|
|
5405
|
+
const getPosition = (index) => {
|
|
5406
|
+
let line = 1;
|
|
5407
|
+
let column = 1;
|
|
5408
|
+
for (let i = 0; i < index; i++) {
|
|
5409
|
+
if (text[i] === "\n") {
|
|
5410
|
+
line++;
|
|
5411
|
+
column = 1;
|
|
5412
|
+
} else {
|
|
5413
|
+
column++;
|
|
5414
|
+
}
|
|
5415
|
+
}
|
|
5416
|
+
return `line ${line}, column ${column}`;
|
|
5417
|
+
};
|
|
5418
|
+
while ((match = tagPattern.exec(text)) !== null) {
|
|
5419
|
+
const fullTag = match[0];
|
|
5420
|
+
const tagName = match[1];
|
|
5421
|
+
const isClosing = fullTag.charAt(1) === "/";
|
|
5422
|
+
const position = getPosition(match.index);
|
|
5423
|
+
if (!validTags.has(tagName)) {
|
|
5424
|
+
const beforeTag2 = text.substring(lastIndex, match.index);
|
|
5425
|
+
plainText += beforeTag2;
|
|
5426
|
+
plainIndex += beforeTag2.length;
|
|
5427
|
+
plainText += fullTag;
|
|
5428
|
+
plainIndex += fullTag.length;
|
|
5429
|
+
lastIndex = match.index + fullTag.length;
|
|
5430
|
+
continue;
|
|
5431
|
+
}
|
|
5432
|
+
const beforeTag = text.substring(lastIndex, match.index);
|
|
5433
|
+
plainText += beforeTag;
|
|
5434
|
+
plainIndex += beforeTag.length;
|
|
5435
|
+
if (isClosing) {
|
|
5436
|
+
if (tagStack.length === 0) {
|
|
5437
|
+
throw new M2Error(
|
|
5438
|
+
`Label has closing tag </${tagName}> at ${position} without matching opening tag. Text is: ${text}`
|
|
5439
|
+
);
|
|
5440
|
+
}
|
|
5441
|
+
const lastOpenTag = tagStack.pop();
|
|
5442
|
+
if (lastOpenTag !== tagName) {
|
|
5443
|
+
throw new M2Error(
|
|
5444
|
+
`Label has improperly nested tags at ${position}. Expected </${lastOpenTag}> but found </${tagName}>. Tags must be properly nested. Text is: ${text}`
|
|
5445
|
+
);
|
|
5446
|
+
}
|
|
5447
|
+
styleChanges.push({
|
|
5448
|
+
position: plainIndex,
|
|
5449
|
+
style: tagName,
|
|
5450
|
+
isStart: false
|
|
5451
|
+
});
|
|
5452
|
+
} else {
|
|
5453
|
+
tagStack.push(tagName);
|
|
5454
|
+
styleChanges.push({
|
|
5455
|
+
position: plainIndex,
|
|
5456
|
+
style: tagName,
|
|
5457
|
+
isStart: true
|
|
5458
|
+
});
|
|
5459
|
+
}
|
|
5460
|
+
lastIndex = match.index + fullTag.length;
|
|
5461
|
+
}
|
|
5462
|
+
plainText += text.substring(lastIndex);
|
|
5463
|
+
if (tagStack.length > 0) {
|
|
5464
|
+
throw new M2Error(
|
|
5465
|
+
`Label has unclosed format tags: <${tagStack.join(">, <")}>. All tags must be closed. Text is: ${text}`
|
|
5466
|
+
);
|
|
5467
|
+
}
|
|
5468
|
+
const activeStyles = /* @__PURE__ */ new Set();
|
|
5469
|
+
const segments = [];
|
|
5470
|
+
let lastPosition = 0;
|
|
5471
|
+
styleChanges.sort((a, b) => a.position - b.position);
|
|
5472
|
+
for (const change of styleChanges) {
|
|
5473
|
+
if (change.position > lastPosition && activeStyles.size > 0) {
|
|
5474
|
+
segments.push({
|
|
5475
|
+
start: lastPosition,
|
|
5476
|
+
end: change.position,
|
|
5477
|
+
styles: new Set(activeStyles)
|
|
5478
|
+
// Create a copy of the current styles
|
|
5479
|
+
});
|
|
5480
|
+
}
|
|
5481
|
+
if (change.isStart) {
|
|
5482
|
+
activeStyles.add(change.style);
|
|
5483
|
+
} else {
|
|
5484
|
+
activeStyles.delete(change.style);
|
|
5485
|
+
}
|
|
5486
|
+
lastPosition = change.position;
|
|
5487
|
+
}
|
|
5488
|
+
return {
|
|
5489
|
+
plainText,
|
|
5490
|
+
styleSegments: segments
|
|
5491
|
+
};
|
|
5492
|
+
}
|
|
5493
|
+
/**
|
|
5494
|
+
* Adds text segments with consistent styling to the paragraph builder.
|
|
5495
|
+
*
|
|
5496
|
+
* @param builder - {@link ParagraphBuilder}
|
|
5497
|
+
* @param styleSegments - Segments of text with consistent styling
|
|
5498
|
+
* @param defaultStyle - Default style to apply
|
|
5499
|
+
*/
|
|
5500
|
+
addStyleSegmentsToParagraphBuilder(builder, styleSegments, defaultStyle) {
|
|
5501
|
+
if (styleSegments.length === 0) {
|
|
5502
|
+
builder.addText(this.plainText);
|
|
5503
|
+
} else {
|
|
5504
|
+
let lastIndex = 0;
|
|
5505
|
+
for (const segment of styleSegments) {
|
|
5506
|
+
if (segment.start > lastIndex) {
|
|
5507
|
+
this.addTextWithStyle(
|
|
5508
|
+
builder,
|
|
5509
|
+
this.plainText.substring(lastIndex, segment.start),
|
|
5510
|
+
defaultStyle
|
|
5511
|
+
);
|
|
5512
|
+
}
|
|
5513
|
+
const styleModifiers = {};
|
|
5514
|
+
if (segment.styles.has(TAG_NAME.BOLD)) {
|
|
5515
|
+
styleModifiers.fontStyle = {
|
|
5516
|
+
...styleModifiers.fontStyle || defaultStyle.fontStyle,
|
|
5517
|
+
weight: this.canvasKit.FontWeight.Black
|
|
5518
|
+
};
|
|
5519
|
+
}
|
|
5520
|
+
if (segment.styles.has(TAG_NAME.ITALIC)) {
|
|
5521
|
+
styleModifiers.fontStyle = {
|
|
5522
|
+
...styleModifiers.fontStyle || defaultStyle.fontStyle,
|
|
5523
|
+
slant: this.canvasKit.FontSlant.Italic
|
|
5524
|
+
};
|
|
5525
|
+
}
|
|
5526
|
+
if (segment.styles.has(TAG_NAME.UNDERLINE)) {
|
|
5527
|
+
styleModifiers.decoration = this.canvasKit.UnderlineDecoration;
|
|
5528
|
+
styleModifiers.decorationThickness = 1;
|
|
5529
|
+
styleModifiers.decorationStyle = this.canvasKit.DecorationStyle.Solid;
|
|
5530
|
+
styleModifiers.decorationColor = this.fontColor;
|
|
5531
|
+
}
|
|
5532
|
+
if (segment.styles.has(TAG_NAME.STRIKETHROUGH)) {
|
|
5533
|
+
styleModifiers.decoration = this.canvasKit.LineThroughDecoration;
|
|
5534
|
+
styleModifiers.decorationThickness = 1;
|
|
5535
|
+
styleModifiers.decorationStyle = this.canvasKit.DecorationStyle.Solid;
|
|
5536
|
+
styleModifiers.decorationColor = this.fontColor;
|
|
5537
|
+
}
|
|
5538
|
+
if (segment.styles.has(TAG_NAME.OVERLINE)) {
|
|
5539
|
+
styleModifiers.decoration = this.canvasKit.OverlineDecoration;
|
|
5540
|
+
styleModifiers.decorationThickness = 1;
|
|
5541
|
+
styleModifiers.decorationStyle = this.canvasKit.DecorationStyle.Solid;
|
|
5542
|
+
styleModifiers.decorationColor = this.fontColor;
|
|
5543
|
+
}
|
|
5544
|
+
const numberOfDecorations = [
|
|
5545
|
+
TAG_NAME.UNDERLINE,
|
|
5546
|
+
TAG_NAME.STRIKETHROUGH,
|
|
5547
|
+
TAG_NAME.OVERLINE
|
|
5548
|
+
].filter((tag) => segment.styles.has(tag)).length;
|
|
5549
|
+
if (numberOfDecorations > 1) {
|
|
5550
|
+
throw new M2Error(
|
|
5551
|
+
`Label does not support multiple text decorations (underline, overline, or strikethrough) on a single text segment. Text is: ${this.textAfterLocalization}`
|
|
5552
|
+
);
|
|
5553
|
+
}
|
|
5554
|
+
this.addTextWithStyle(
|
|
5555
|
+
builder,
|
|
5556
|
+
this.plainText.substring(segment.start, segment.end),
|
|
5557
|
+
defaultStyle,
|
|
5558
|
+
styleModifiers
|
|
5559
|
+
);
|
|
5560
|
+
lastIndex = segment.end;
|
|
5561
|
+
}
|
|
5562
|
+
if (lastIndex < this.plainText.length) {
|
|
5563
|
+
this.addTextWithStyle(
|
|
5564
|
+
builder,
|
|
5565
|
+
this.plainText.substring(lastIndex),
|
|
5566
|
+
defaultStyle
|
|
5567
|
+
);
|
|
5568
|
+
}
|
|
5569
|
+
}
|
|
5570
|
+
}
|
|
5571
|
+
/**
|
|
5572
|
+
* Helper that adds text to the paragraph builder with the specified style.
|
|
5573
|
+
*
|
|
5574
|
+
* @param builder - {@link ParagraphBuilder}
|
|
5575
|
+
* @param text - The text to add
|
|
5576
|
+
* @param defaultStyle - The default style to apply
|
|
5577
|
+
* @param styleModifiers - Additional style modifications
|
|
5578
|
+
* @returns void
|
|
5579
|
+
*/
|
|
5580
|
+
addTextWithStyle(builder, text, defaultStyle, styleModifiers = {}) {
|
|
5581
|
+
if (!text) return;
|
|
5582
|
+
const style = {
|
|
5583
|
+
...defaultStyle,
|
|
5584
|
+
...styleModifiers
|
|
5585
|
+
};
|
|
5586
|
+
builder.pushPaintStyle(style, this.fontPaint, this.backgroundPaint);
|
|
5587
|
+
builder.addText(text);
|
|
5588
|
+
builder.pop();
|
|
5589
|
+
}
|
|
5177
5590
|
/**
|
|
5178
5591
|
* Determines the M2Font objects that need to be ready in order to draw
|
|
5179
5592
|
* the Label.
|
|
@@ -5204,7 +5617,7 @@ class Label extends M2Node {
|
|
|
5204
5617
|
} else if (this.fontNames !== void 0 && this.fontNames.length > 0) {
|
|
5205
5618
|
requiredFonts = this.fontNames.map((font) => fontManager.fonts[font]);
|
|
5206
5619
|
} else {
|
|
5207
|
-
throw new
|
|
5620
|
+
throw new M2Error("cannot determine required fonts");
|
|
5208
5621
|
}
|
|
5209
5622
|
return requiredFonts;
|
|
5210
5623
|
}
|
|
@@ -5379,7 +5792,7 @@ class Label extends M2Node {
|
|
|
5379
5792
|
}
|
|
5380
5793
|
get backgroundPaint() {
|
|
5381
5794
|
if (!this._backgroundPaint) {
|
|
5382
|
-
throw new
|
|
5795
|
+
throw new M2Error("backgroundPaint cannot be undefined");
|
|
5383
5796
|
}
|
|
5384
5797
|
return this._backgroundPaint;
|
|
5385
5798
|
}
|
|
@@ -5388,7 +5801,7 @@ class Label extends M2Node {
|
|
|
5388
5801
|
}
|
|
5389
5802
|
get fontPaint() {
|
|
5390
5803
|
if (!this._fontPaint) {
|
|
5391
|
-
throw new
|
|
5804
|
+
throw new M2Error("fontPaint cannot be undefined");
|
|
5392
5805
|
}
|
|
5393
5806
|
return this._fontPaint;
|
|
5394
5807
|
}
|
|
@@ -5439,7 +5852,7 @@ class Label extends M2Node {
|
|
|
5439
5852
|
const x = (this.absolutePosition.x - this.size.width * this.anchorPoint.x * this.absoluteScale) * drawScale;
|
|
5440
5853
|
const y = (this.absolutePosition.y - this.size.height * this.anchorPoint.y * this.absoluteScale) * drawScale;
|
|
5441
5854
|
if (this.paragraph === void 0) {
|
|
5442
|
-
throw new
|
|
5855
|
+
throw new M2Error("no paragraph");
|
|
5443
5856
|
}
|
|
5444
5857
|
canvas.drawParagraph(this.paragraph, x, y);
|
|
5445
5858
|
canvas.restore();
|
|
@@ -5465,7 +5878,7 @@ class Label extends M2Node {
|
|
|
5465
5878
|
}
|
|
5466
5879
|
this.initialize();
|
|
5467
5880
|
if (!this.paragraph) {
|
|
5468
|
-
throw new
|
|
5881
|
+
throw new M2Error(
|
|
5469
5882
|
`warmup Label node ${this.toString()}: paragraph is undefined`
|
|
5470
5883
|
);
|
|
5471
5884
|
}
|
|
@@ -5534,7 +5947,7 @@ class Scene extends M2Node {
|
|
|
5534
5947
|
*/
|
|
5535
5948
|
get game() {
|
|
5536
5949
|
if (this._game === void 0) {
|
|
5537
|
-
throw new
|
|
5950
|
+
throw new M2Error(`Scene ${this} has not been added to a game.`);
|
|
5538
5951
|
}
|
|
5539
5952
|
return this._game;
|
|
5540
5953
|
}
|
|
@@ -5686,7 +6099,7 @@ class Scene extends M2Node {
|
|
|
5686
6099
|
canvas.scale(1 / drawScale, 1 / drawScale);
|
|
5687
6100
|
M2c2KitHelpers.rotateCanvasForDrawableNode(canvas, this);
|
|
5688
6101
|
if (!this.backgroundPaint) {
|
|
5689
|
-
throw new
|
|
6102
|
+
throw new M2Error(`in Scene ${this}, background paint is undefined.`);
|
|
5690
6103
|
}
|
|
5691
6104
|
if (this.absoluteAlphaChange !== 0) {
|
|
5692
6105
|
this.backgroundPaint.setAlphaf(this.absoluteAlpha);
|
|
@@ -5709,7 +6122,7 @@ class Scene extends M2Node {
|
|
|
5709
6122
|
const drawScale = m2c2Globals.canvasScale / this.absoluteScale;
|
|
5710
6123
|
canvas.scale(1 / drawScale, 1 / drawScale);
|
|
5711
6124
|
if (!this.backgroundPaint) {
|
|
5712
|
-
throw new
|
|
6125
|
+
throw new M2Error(`in Scene ${this}, background paint is undefined.`);
|
|
5713
6126
|
}
|
|
5714
6127
|
canvas.drawRect(
|
|
5715
6128
|
[
|
|
@@ -5768,7 +6181,7 @@ class Shape extends M2Node {
|
|
|
5768
6181
|
}
|
|
5769
6182
|
if (this.shapeIsSvgStringPath()) {
|
|
5770
6183
|
if (options.size !== void 0) {
|
|
5771
|
-
throw new
|
|
6184
|
+
throw new M2Error(
|
|
5772
6185
|
"Size cannot be specified when path is SVG string path"
|
|
5773
6186
|
);
|
|
5774
6187
|
}
|
|
@@ -5776,7 +6189,7 @@ class Shape extends M2Node {
|
|
|
5776
6189
|
this.svgPathRequestedWidth = options.path.width;
|
|
5777
6190
|
this.svgPathRequestedHeight = options.path.height;
|
|
5778
6191
|
if (this.svgPathRequestedHeight !== void 0 && this.svgPathRequestedWidth !== void 0) {
|
|
5779
|
-
throw new
|
|
6192
|
+
throw new M2Error(
|
|
5780
6193
|
"Cannot specify both width and height for SVG string path."
|
|
5781
6194
|
);
|
|
5782
6195
|
}
|
|
@@ -5787,7 +6200,7 @@ class Shape extends M2Node {
|
|
|
5787
6200
|
this.lineWidth = Constants.DEFAULT_PATH_LINE_WIDTH;
|
|
5788
6201
|
}
|
|
5789
6202
|
if (options.circleOfRadius || options.rect) {
|
|
5790
|
-
throw new
|
|
6203
|
+
throw new M2Error(
|
|
5791
6204
|
"Shape must specify only one of: path, circleOfRadius, or rect"
|
|
5792
6205
|
);
|
|
5793
6206
|
}
|
|
@@ -5796,10 +6209,10 @@ class Shape extends M2Node {
|
|
|
5796
6209
|
this.circleOfRadius = options.circleOfRadius;
|
|
5797
6210
|
this.shapeType = ShapeType.Circle;
|
|
5798
6211
|
if (options.size !== void 0) {
|
|
5799
|
-
throw new
|
|
6212
|
+
throw new M2Error("Size cannot be specified for circle shape");
|
|
5800
6213
|
}
|
|
5801
6214
|
if (options.path || options.rect) {
|
|
5802
|
-
throw new
|
|
6215
|
+
throw new M2Error(
|
|
5803
6216
|
"Shape must specify only one of: path, circleOfRadius, or rect"
|
|
5804
6217
|
);
|
|
5805
6218
|
}
|
|
@@ -5822,7 +6235,7 @@ class Shape extends M2Node {
|
|
|
5822
6235
|
}
|
|
5823
6236
|
this.shapeType = ShapeType.Rectangle;
|
|
5824
6237
|
if (options.size !== void 0) {
|
|
5825
|
-
throw new
|
|
6238
|
+
throw new M2Error("Size cannot be specified for rectangle shape");
|
|
5826
6239
|
}
|
|
5827
6240
|
}
|
|
5828
6241
|
if (options.cornerRadius !== void 0) {
|
|
@@ -5877,7 +6290,7 @@ class Shape extends M2Node {
|
|
|
5877
6290
|
if (this.shapeIsSvgStringPath()) {
|
|
5878
6291
|
const pathString = this.path.pathString ?? this.path.svgPathString;
|
|
5879
6292
|
if (!pathString) {
|
|
5880
|
-
throw new
|
|
6293
|
+
throw new M2Error("SVG Path string is null/undefined");
|
|
5881
6294
|
}
|
|
5882
6295
|
if (this.path.svgPathString !== void 0) {
|
|
5883
6296
|
console.warn(
|
|
@@ -5886,7 +6299,7 @@ class Shape extends M2Node {
|
|
|
5886
6299
|
}
|
|
5887
6300
|
this.ckPath = this.canvasKit.Path.MakeFromSVGString(pathString);
|
|
5888
6301
|
if (!this.ckPath) {
|
|
5889
|
-
throw new
|
|
6302
|
+
throw new M2Error("could not make CanvasKit Path from SVG string");
|
|
5890
6303
|
}
|
|
5891
6304
|
const bounds = this.ckPath.getBounds();
|
|
5892
6305
|
this.svgPathWidth = bounds[2] + (bounds[0] < 0 ? Math.abs(bounds[0]) : 0);
|
|
@@ -5904,7 +6317,7 @@ class Shape extends M2Node {
|
|
|
5904
6317
|
}
|
|
5905
6318
|
if (this.shapeIsM2Path()) {
|
|
5906
6319
|
if (this.size.width === 0 || this.size.height === 0 || this.size.width === void 0 || this.size.height === void 0) {
|
|
5907
|
-
throw new
|
|
6320
|
+
throw new M2Error(
|
|
5908
6321
|
"Size of shape must have non-zero height and width when path is M2Path"
|
|
5909
6322
|
);
|
|
5910
6323
|
}
|
|
@@ -6096,7 +6509,7 @@ class Shape extends M2Node {
|
|
|
6096
6509
|
}
|
|
6097
6510
|
}
|
|
6098
6511
|
if (paint === void 0) {
|
|
6099
|
-
throw new
|
|
6512
|
+
throw new M2Error("paint is undefined");
|
|
6100
6513
|
}
|
|
6101
6514
|
canvas.drawLine(
|
|
6102
6515
|
pathOriginX + points[i].x * m2c2Globals.canvasScale,
|
|
@@ -6409,7 +6822,7 @@ class Shape extends M2Node {
|
|
|
6409
6822
|
}
|
|
6410
6823
|
get fillColorPaintAntialiased() {
|
|
6411
6824
|
if (!this._fillColorPaintAntialiased) {
|
|
6412
|
-
throw new
|
|
6825
|
+
throw new M2Error("fillColorPaintAntiAliased is undefined");
|
|
6413
6826
|
}
|
|
6414
6827
|
return this._fillColorPaintAntialiased;
|
|
6415
6828
|
}
|
|
@@ -6418,7 +6831,7 @@ class Shape extends M2Node {
|
|
|
6418
6831
|
}
|
|
6419
6832
|
get strokeColorPaintAntialiased() {
|
|
6420
6833
|
if (!this._strokeColorPaintAntialiased) {
|
|
6421
|
-
throw new
|
|
6834
|
+
throw new M2Error("strokeColorPaintAntiAliased is undefined");
|
|
6422
6835
|
}
|
|
6423
6836
|
return this._strokeColorPaintAntialiased;
|
|
6424
6837
|
}
|
|
@@ -6427,7 +6840,7 @@ class Shape extends M2Node {
|
|
|
6427
6840
|
}
|
|
6428
6841
|
get fillColorPaintNotAntialiased() {
|
|
6429
6842
|
if (!this._fillColorPaintNotAntialiased) {
|
|
6430
|
-
throw new
|
|
6843
|
+
throw new M2Error("fillColorPaintNotAntiAliased is undefined");
|
|
6431
6844
|
}
|
|
6432
6845
|
return this._fillColorPaintNotAntialiased;
|
|
6433
6846
|
}
|
|
@@ -6436,7 +6849,7 @@ class Shape extends M2Node {
|
|
|
6436
6849
|
}
|
|
6437
6850
|
get strokeColorPaintNotAntialiased() {
|
|
6438
6851
|
if (!this._strokeColorPaintNotAntialiased) {
|
|
6439
|
-
throw new
|
|
6852
|
+
throw new M2Error("strokeColorPaintNotAntiAliased is undefined");
|
|
6440
6853
|
}
|
|
6441
6854
|
return this._strokeColorPaintNotAntialiased;
|
|
6442
6855
|
}
|
|
@@ -6534,7 +6947,7 @@ class TextLine extends M2Node {
|
|
|
6534
6947
|
getRequiredTextLineFont(fontManager) {
|
|
6535
6948
|
if (this.game.i18n) {
|
|
6536
6949
|
if (this.localizedFontName !== void 0 && this.localizedFontNames.length !== 0 || this.localizedFontNames.length > 1) {
|
|
6537
|
-
throw new
|
|
6950
|
+
throw new M2Error(
|
|
6538
6951
|
`TextLine supports only one font, but multiple fonts are specified in translation.`
|
|
6539
6952
|
);
|
|
6540
6953
|
}
|
|
@@ -6746,7 +7159,7 @@ class TextLine extends M2Node {
|
|
|
6746
7159
|
const x = this.absolutePosition.x * drawScale;
|
|
6747
7160
|
const y = (this.absolutePosition.y + this.size.height * this.anchorPoint.y * this.absoluteScale) * drawScale;
|
|
6748
7161
|
if (this.paint === void 0 || this.font === void 0) {
|
|
6749
|
-
throw new
|
|
7162
|
+
throw new M2Error(
|
|
6750
7163
|
`in TextLine node ${this}, Paint or Font is undefined.`
|
|
6751
7164
|
);
|
|
6752
7165
|
}
|
|
@@ -6774,7 +7187,7 @@ class TextLine extends M2Node {
|
|
|
6774
7187
|
}
|
|
6775
7188
|
this.initialize();
|
|
6776
7189
|
if (this.paint === void 0 || this.font === void 0) {
|
|
6777
|
-
throw new
|
|
7190
|
+
throw new M2Error(
|
|
6778
7191
|
`warmup TextLine node ${this.toString()}: Paint or Font is undefined.`
|
|
6779
7192
|
);
|
|
6780
7193
|
}
|
|
@@ -6816,7 +7229,7 @@ class Sprite extends M2Node {
|
|
|
6816
7229
|
initialize() {
|
|
6817
7230
|
this.m2Image = this.game.imageManager.getImage(this._imageName);
|
|
6818
7231
|
if (!this.m2Image) {
|
|
6819
|
-
throw new
|
|
7232
|
+
throw new M2Error(
|
|
6820
7233
|
`could not create sprite. the image named ${this._imageName} has not been loaded`
|
|
6821
7234
|
);
|
|
6822
7235
|
}
|
|
@@ -6887,7 +7300,7 @@ class Sprite extends M2Node {
|
|
|
6887
7300
|
}
|
|
6888
7301
|
get paint() {
|
|
6889
7302
|
if (!this._paint) {
|
|
6890
|
-
throw new
|
|
7303
|
+
throw new M2Error(
|
|
6891
7304
|
`in paint getter: Sprite node ${this.toString()} paint is undefined.`
|
|
6892
7305
|
);
|
|
6893
7306
|
}
|
|
@@ -6947,7 +7360,7 @@ class Sprite extends M2Node {
|
|
|
6947
7360
|
this.game.imageManager.prepareDeferredImage(this.m2Image);
|
|
6948
7361
|
}
|
|
6949
7362
|
if (this.m2Image.status === M2ImageStatus.Error) {
|
|
6950
|
-
throw new
|
|
7363
|
+
throw new M2Error(
|
|
6951
7364
|
`error status on image ${this.m2Image.imageName} for Sprite node ${this.toString()}`
|
|
6952
7365
|
);
|
|
6953
7366
|
}
|
|
@@ -6961,12 +7374,12 @@ class Sprite extends M2Node {
|
|
|
6961
7374
|
if (this.m2Image?.status === M2ImageStatus.Ready) {
|
|
6962
7375
|
this.initialize();
|
|
6963
7376
|
if (!this.m2Image) {
|
|
6964
|
-
throw new
|
|
7377
|
+
throw new M2Error(
|
|
6965
7378
|
`in Sprite.warmup(): Sprite node ${this.toString()}: image not loaded.`
|
|
6966
7379
|
);
|
|
6967
7380
|
}
|
|
6968
7381
|
if (!this.m2Image.canvaskitImage) {
|
|
6969
|
-
throw new
|
|
7382
|
+
throw new M2Error(
|
|
6970
7383
|
`in Sprite.warmup(): Sprite node ${this.toString()} image ${this.m2Image.imageName} is undefined.`
|
|
6971
7384
|
);
|
|
6972
7385
|
}
|
|
@@ -7028,10 +7441,10 @@ class M2NodeFactory {
|
|
|
7028
7441
|
createNode(type, compositeType, options) {
|
|
7029
7442
|
const classNameToCreate = compositeType ? compositeType : type;
|
|
7030
7443
|
if (!this.hasClassRegistration(classNameToCreate)) {
|
|
7031
|
-
throw new
|
|
7444
|
+
throw new M2Error(`Unknown node type: ${classNameToCreate}`);
|
|
7032
7445
|
}
|
|
7033
7446
|
if (!m2c2Globals.m2NodeClassRegistry) {
|
|
7034
|
-
throw new
|
|
7447
|
+
throw new M2Error("Node class registry is not initialized.");
|
|
7035
7448
|
}
|
|
7036
7449
|
const classToInstantiate = m2c2Globals.m2NodeClassRegistry[classNameToCreate];
|
|
7037
7450
|
const node = new classToInstantiate(options);
|
|
@@ -7150,7 +7563,7 @@ class FontManager {
|
|
|
7150
7563
|
async fetchFontAsArrayBuffer(font) {
|
|
7151
7564
|
const response = await fetch(font.url);
|
|
7152
7565
|
if (!response.ok) {
|
|
7153
|
-
throw new
|
|
7566
|
+
throw new M2Error(
|
|
7154
7567
|
`cannot fetch font ${font.fontName} at url ${font.url}: ${response.statusText}`
|
|
7155
7568
|
);
|
|
7156
7569
|
}
|
|
@@ -7161,7 +7574,7 @@ class FontManager {
|
|
|
7161
7574
|
this.provider.registerFont(arrayBuffer, font.fontName);
|
|
7162
7575
|
const typeface = this.canvasKit.Typeface.MakeFreeTypeFaceFromData(arrayBuffer);
|
|
7163
7576
|
if (!typeface) {
|
|
7164
|
-
throw new
|
|
7577
|
+
throw new M2Error(
|
|
7165
7578
|
`cannot make typeface for font ${font.fontName} at url ${font.url}`
|
|
7166
7579
|
);
|
|
7167
7580
|
}
|
|
@@ -7198,7 +7611,7 @@ class FontManager {
|
|
|
7198
7611
|
getDefaultFont() {
|
|
7199
7612
|
const defaultFont = Object.values(this.fonts).find((font) => font.default);
|
|
7200
7613
|
if (!defaultFont) {
|
|
7201
|
-
throw new
|
|
7614
|
+
throw new M2Error(
|
|
7202
7615
|
`no default font found; please make sure at least one font is loaded`
|
|
7203
7616
|
);
|
|
7204
7617
|
}
|
|
@@ -7230,7 +7643,7 @@ class FontManager {
|
|
|
7230
7643
|
getTypeface(fontName) {
|
|
7231
7644
|
const typeface = this.fonts[fontName]?.typeface;
|
|
7232
7645
|
if (!typeface) {
|
|
7233
|
-
throw new
|
|
7646
|
+
throw new M2Error(`font ${fontName} not found`);
|
|
7234
7647
|
}
|
|
7235
7648
|
return typeface;
|
|
7236
7649
|
}
|
|
@@ -7253,7 +7666,7 @@ function getDefaultExportFromCjs (x) {
|
|
|
7253
7666
|
}
|
|
7254
7667
|
|
|
7255
7668
|
function getAugmentedNamespace(n) {
|
|
7256
|
-
if (n
|
|
7669
|
+
if (Object.prototype.hasOwnProperty.call(n, '__esModule')) return n;
|
|
7257
7670
|
var f = n.default;
|
|
7258
7671
|
if (typeof f == "function") {
|
|
7259
7672
|
var a = function a () {
|
|
@@ -7550,272 +7963,276 @@ function requireCanvaskit () {
|
|
|
7550
7963
|
return (
|
|
7551
7964
|
function(moduleArg = {}) {
|
|
7552
7965
|
|
|
7553
|
-
var w=moduleArg,
|
|
7554
|
-
(function(a){a.
|
|
7555
|
-
alphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB},h=b*c*4,m=a._malloc(h);if(f=a.Surface._makeRasterDirect(f,m,4*b))f.
|
|
7556
|
-
0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.
|
|
7557
|
-
(function(a){a.
|
|
7966
|
+
var w=moduleArg,aa,ca;w.ready=new Promise((a,b)=>{aa=a;ca=b;});
|
|
7967
|
+
(function(a){a.ke=a.ke||[];a.ke.push(function(){a.MakeSWCanvasSurface=function(b){var c=b,f="undefined"!==typeof OffscreenCanvas&&c instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&c instanceof HTMLCanvasElement||f||(c=document.getElementById(b),c)))throw "Canvas with id "+b+" was not found";if(b=a.MakeSurface(c.width,c.height))b.ce=c;return b};a.MakeCanvasSurface||(a.MakeCanvasSurface=a.MakeSWCanvasSurface);a.MakeSurface=function(b,c){var f={width:b,height:c,colorType:a.ColorType.RGBA_8888,
|
|
7968
|
+
alphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB},h=b*c*4,m=a._malloc(h);if(f=a.Surface._makeRasterDirect(f,m,4*b))f.ce=null,f.Xf=b,f.Tf=c,f.Vf=h,f.wf=m,f.getCanvas().clear(a.TRANSPARENT);return f};a.MakeRasterDirectSurface=function(b,c,f){return a.Surface._makeRasterDirect(b,c.byteOffset,f)};a.Surface.prototype.flush=function(b){a.de(this.be);this._flush();if(this.ce){var c=new Uint8ClampedArray(a.HEAPU8.buffer,this.wf,this.Vf);c=new ImageData(c,this.Xf,this.Tf);b?this.ce.getContext("2d").putImageData(c,
|
|
7969
|
+
0,0,b[0],b[1],b[2]-b[0],b[3]-b[1]):this.ce.getContext("2d").putImageData(c,0,0);}};a.Surface.prototype.dispose=function(){this.wf&&a._free(this.wf);this.delete();};a.de=a.de||function(){};a.mf=a.mf||function(){return null};});})(w);
|
|
7970
|
+
(function(a){a.ke=a.ke||[];a.ke.push(function(){function b(n,p,v){return n&&n.hasOwnProperty(p)?n[p]:v}function c(n){var p=da(ha);ha[p]=n;return p}function f(n){return n.naturalHeight||n.videoHeight||n.displayHeight||n.height}function h(n){return n.naturalWidth||n.videoWidth||n.displayWidth||n.width}function m(n,p,v,E){n.bindTexture(n.TEXTURE_2D,p);E||v.alphaType!==a.AlphaType.Premul||n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,true);return p}function u(n,p,v){v||p.alphaType!==a.AlphaType.Premul||
|
|
7558
7971
|
n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,false);n.bindTexture(n.TEXTURE_2D,null);}a.GetWebGLContext=function(n,p){if(!n)throw "null canvas passed into makeWebGLContext";var v={alpha:b(p,"alpha",1),depth:b(p,"depth",1),stencil:b(p,"stencil",8),antialias:b(p,"antialias",0),premultipliedAlpha:b(p,"premultipliedAlpha",1),preserveDrawingBuffer:b(p,"preserveDrawingBuffer",0),preferLowPowerToHighPerformance:b(p,"preferLowPowerToHighPerformance",0),failIfMajorPerformanceCaveat:b(p,"failIfMajorPerformanceCaveat",
|
|
7559
|
-
0),enableExtensionsByDefault:b(p,"enableExtensionsByDefault",1),explicitSwapControl:b(p,"explicitSwapControl",0),renderViaOffscreenBackBuffer:b(p,"renderViaOffscreenBackBuffer",0)};v.majorVersion=p&&p.majorVersion?p.majorVersion:"undefined"!==typeof WebGL2RenderingContext?2:1;if(v.explicitSwapControl)throw "explicitSwapControl is not supported";n=
|
|
7560
|
-
JSEvents.
|
|
7561
|
-
this._getResourceCacheLimitBytes();};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.
|
|
7562
|
-
this._MakeOnScreenGLSurface(n,p,v,E):this._MakeOnScreenGLSurface(n,p,v,E,
|
|
7563
|
-
typeof OffscreenCanvas&&E instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&E instanceof HTMLCanvasElement||
|
|
7564
|
-
a.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(n,p){a.
|
|
7565
|
-
0,E.RGBA,E.UNSIGNED_BYTE,n):E.texImage2D(E.TEXTURE_2D,0,E.RGBA,E.RGBA,E.UNSIGNED_BYTE,n);u(E,p);this._resetContext();return this.makeImageFromTexture(v,p)};a.Surface.prototype.updateTextureFromSource=function(n,p,v){if(n.
|
|
7566
|
-
n.getColorSpace();p=this._makeImageFromTexture(this.
|
|
7567
|
-
p.width,p.height,0,L.RGBA,L.UNSIGNED_BYTE,n):L.texImage2D(L.TEXTURE_2D,0,L.RGBA,L.RGBA,L.UNSIGNED_BYTE,n);u(L,p,v);return c(y)},freeSrc:function(){}};"VideoFrame"===n.constructor.name&&(E.freeSrc=function(){n.close();});return a.Image._makeFromGenerator(p,E)};a.
|
|
7972
|
+
0),enableExtensionsByDefault:b(p,"enableExtensionsByDefault",1),explicitSwapControl:b(p,"explicitSwapControl",0),renderViaOffscreenBackBuffer:b(p,"renderViaOffscreenBackBuffer",0)};v.majorVersion=p&&p.majorVersion?p.majorVersion:"undefined"!==typeof WebGL2RenderingContext?2:1;if(v.explicitSwapControl)throw "explicitSwapControl is not supported";n=ia(n,v);if(!n)return 0;ja(n);B.xe.getExtension("WEBGL_debug_renderer_info");return n};a.deleteContext=function(n){B===ma[n]&&(B=null);"object"==typeof JSEvents&&
|
|
7973
|
+
JSEvents.Mg(ma[n].xe.canvas);ma[n]&&ma[n].xe.canvas&&(ma[n].xe.canvas.Rf=void 0);ma[n]=null;};a._setTextureCleanup({deleteTexture:function(n,p){var v=ha[p];v&&ma[n].xe.deleteTexture(v);ha[p]=null;}});a.MakeWebGLContext=function(n){if(!this.de(n))return null;var p=this._MakeGrContext();if(!p)return null;p.be=n;var v=p.delete.bind(p);p["delete"]=function(){a.de(this.be);v();}.bind(p);return B.Af=p};a.MakeGrContext=a.MakeWebGLContext;a.GrDirectContext.prototype.getResourceCacheLimitBytes=function(){a.de(this.be);
|
|
7974
|
+
this._getResourceCacheLimitBytes();};a.GrDirectContext.prototype.getResourceCacheUsageBytes=function(){a.de(this.be);this._getResourceCacheUsageBytes();};a.GrDirectContext.prototype.releaseResourcesAndAbandonContext=function(){a.de(this.be);this._releaseResourcesAndAbandonContext();};a.GrDirectContext.prototype.setResourceCacheLimitBytes=function(n){a.de(this.be);this._setResourceCacheLimitBytes(n);};a.MakeOnScreenGLSurface=function(n,p,v,E,G,L){if(!this.de(n.be))return null;p=void 0===G||void 0===L?
|
|
7975
|
+
this._MakeOnScreenGLSurface(n,p,v,E):this._MakeOnScreenGLSurface(n,p,v,E,G,L);if(!p)return null;p.be=n.be;return p};a.MakeRenderTarget=function(){var n=arguments[0];if(!this.de(n.be))return null;if(3===arguments.length){var p=this._MakeRenderTargetWH(n,arguments[1],arguments[2]);if(!p)return null}else if(2===arguments.length){if(p=this._MakeRenderTargetII(n,arguments[1]),!p)return null}else return null;p.be=n.be;return p};a.MakeWebGLCanvasSurface=function(n,p,v){p=p||null;var E=n,G="undefined"!==
|
|
7976
|
+
typeof OffscreenCanvas&&E instanceof OffscreenCanvas;if(!("undefined"!==typeof HTMLCanvasElement&&E instanceof HTMLCanvasElement||G||(E=document.getElementById(n),E)))throw "Canvas with id "+n+" was not found";n=this.GetWebGLContext(E,v);if(!n||0>n)throw "failed to create webgl context: err "+n;n=this.MakeWebGLContext(n);p=this.MakeOnScreenGLSurface(n,E.width,E.height,p);return p?p:(p=E.cloneNode(true),E.parentNode.replaceChild(p,E),p.classList.add("ck-replaced"),a.MakeSWCanvasSurface(p))};a.MakeCanvasSurface=
|
|
7977
|
+
a.MakeWebGLCanvasSurface;a.Surface.prototype.makeImageFromTexture=function(n,p){a.de(this.be);n=c(n);if(p=this._makeImageFromTexture(this.be,n,p))p.cf=n;return p};a.Surface.prototype.makeImageFromTextureSource=function(n,p,v){p||(p={height:f(n),width:h(n),colorType:a.ColorType.RGBA_8888,alphaType:v?a.AlphaType.Premul:a.AlphaType.Unpremul});p.colorSpace||(p.colorSpace=a.ColorSpace.SRGB);a.de(this.be);var E=B.xe;v=m(E,E.createTexture(),p,v);2===B.version?E.texImage2D(E.TEXTURE_2D,0,E.RGBA,p.width,p.height,
|
|
7978
|
+
0,E.RGBA,E.UNSIGNED_BYTE,n):E.texImage2D(E.TEXTURE_2D,0,E.RGBA,E.RGBA,E.UNSIGNED_BYTE,n);u(E,p);this._resetContext();return this.makeImageFromTexture(v,p)};a.Surface.prototype.updateTextureFromSource=function(n,p,v){if(n.cf){a.de(this.be);var E=n.getImageInfo(),G=B.xe,L=m(G,ha[n.cf],E,v);2===B.version?G.texImage2D(G.TEXTURE_2D,0,G.RGBA,h(p),f(p),0,G.RGBA,G.UNSIGNED_BYTE,p):G.texImage2D(G.TEXTURE_2D,0,G.RGBA,G.RGBA,G.UNSIGNED_BYTE,p);u(G,E,v);this._resetContext();ha[n.cf]=null;n.cf=c(L);E.colorSpace=
|
|
7979
|
+
n.getColorSpace();p=this._makeImageFromTexture(this.be,n.cf,E);v=n.ae.ie;G=n.ae.pe;n.ae.ie=p.ae.ie;n.ae.pe=p.ae.pe;p.ae.ie=v;p.ae.pe=G;p.delete();E.colorSpace.delete();}};a.MakeLazyImageFromTextureSource=function(n,p,v){p||(p={height:f(n),width:h(n),colorType:a.ColorType.RGBA_8888,alphaType:v?a.AlphaType.Premul:a.AlphaType.Unpremul});p.colorSpace||(p.colorSpace=a.ColorSpace.SRGB);var E={makeTexture:function(){var G=B,L=G.xe,y=m(L,L.createTexture(),p,v);2===G.version?L.texImage2D(L.TEXTURE_2D,0,L.RGBA,
|
|
7980
|
+
p.width,p.height,0,L.RGBA,L.UNSIGNED_BYTE,n):L.texImage2D(L.TEXTURE_2D,0,L.RGBA,L.RGBA,L.UNSIGNED_BYTE,n);u(L,p,v);return c(y)},freeSrc:function(){}};"VideoFrame"===n.constructor.name&&(E.freeSrc=function(){n.close();});return a.Image._makeFromGenerator(p,E)};a.de=function(n){return n?ja(n):false};a.mf=function(){return B&&B.Af&&!B.Af.isDeleted()?B.Af:null};});})(w);
|
|
7568
7981
|
(function(a){function b(e,d,g,l,t){for(var x=0;x<e.length;x++)d[x*g+(x*t+l+g)%g]=e[x];return d}function c(e){for(var d=e*e,g=Array(d);d--;)g[d]=0===d%(e+1)?1:0;return g}function f(e){return e?e.constructor===Float32Array&&4===e.length:false}function h(e){return (n(255*e[3])<<24|n(255*e[0])<<16|n(255*e[1])<<8|n(255*e[2])<<0)>>>0}function m(e){if(e&&e._ck)return e;if(e instanceof Float32Array){for(var d=Math.floor(e.length/4),g=new Uint32Array(d),l=0;l<d;l++)g[l]=h(e.slice(4*l,4*(l+1)));return g}if(e instanceof
|
|
7569
|
-
Uint32Array)return e;if(e instanceof Array&&e[0]instanceof Float32Array)return e.map(h)}function u(e){if(void 0===e)return 1;var d=parseFloat(e);return e&&-1!==e.indexOf("%")?d/100:d}function n(e){return Math.round(Math.max(0,Math.min(e||0,255)))}function p(e,d){d&&d._ck||a._free(e);}function v(e,d,g){if(!e||!e.length)return
|
|
7570
|
-
if(e instanceof Float32Array)d.
|
|
7571
|
-
9===e.length)return v(e,"HEAPF32",
|
|
7572
|
-
if(16===e.length)return v(e,"HEAPF32"
|
|
7573
|
-
d,g,l){var t=
|
|
7574
|
-
|
|
7982
|
+
Uint32Array)return e;if(e instanceof Array&&e[0]instanceof Float32Array)return e.map(h)}function u(e){if(void 0===e)return 1;var d=parseFloat(e);return e&&-1!==e.indexOf("%")?d/100:d}function n(e){return Math.round(Math.max(0,Math.min(e||0,255)))}function p(e,d){d&&d._ck||a._free(e);}function v(e,d,g){if(!e||!e.length)return X;if(e&&e._ck)return e.byteOffset;var l=a[d].BYTES_PER_ELEMENT;g||(g=a._malloc(e.length*l));a[d].set(e,g/l);return g}function E(e){var d={te:X,count:e.length,colorType:a.ColorType.RGBA_F32};
|
|
7983
|
+
if(e instanceof Float32Array)d.te=v(e,"HEAPF32"),d.count=e.length/4;else if(e instanceof Uint32Array)d.te=v(e,"HEAPU32"),d.colorType=a.ColorType.RGBA_8888;else if(e instanceof Array){if(e&&e.length){for(var g=a._malloc(16*e.length),l=0,t=g/4,x=0;x<e.length;x++)for(var C=0;4>C;C++)a.HEAPF32[t+l]=e[x][C],l++;e=g;}else e=X;d.te=e;}else throw "Invalid argument to copyFlexibleColorArray, Not a color array "+typeof e;return d}function G(e){if(!e)return X;var d=Xb.toTypedArray();if(e.length){if(6===e.length||
|
|
7984
|
+
9===e.length)return v(e,"HEAPF32",Oa),6===e.length&&a.HEAPF32.set(Hd,6+Oa/4),Oa;if(16===e.length)return d[0]=e[0],d[1]=e[1],d[2]=e[3],d[3]=e[4],d[4]=e[5],d[5]=e[7],d[6]=e[12],d[7]=e[13],d[8]=e[15],Oa;throw "invalid matrix size";}if(void 0===e.m11)throw "invalid matrix argument";d[0]=e.m11;d[1]=e.m21;d[2]=e.m41;d[3]=e.m12;d[4]=e.m22;d[5]=e.m42;d[6]=e.m14;d[7]=e.m24;d[8]=e.m44;return Oa}function L(e){if(!e)return X;var d=Yb.toTypedArray();if(e.length){if(16!==e.length&&6!==e.length&&9!==e.length)throw "invalid matrix size";
|
|
7985
|
+
if(16===e.length)return v(e,"HEAPF32",bb);d.fill(0);d[0]=e[0];d[1]=e[1];d[3]=e[2];d[4]=e[3];d[5]=e[4];d[7]=e[5];d[10]=1;d[12]=e[6];d[13]=e[7];d[15]=e[8];6===e.length&&(d[12]=0,d[13]=0,d[15]=1);return bb}if(void 0===e.m11)throw "invalid matrix argument";d[0]=e.m11;d[1]=e.m21;d[2]=e.m31;d[3]=e.m41;d[4]=e.m12;d[5]=e.m22;d[6]=e.m32;d[7]=e.m42;d[8]=e.m13;d[9]=e.m23;d[10]=e.m33;d[11]=e.m43;d[12]=e.m14;d[13]=e.m24;d[14]=e.m34;d[15]=e.m44;return bb}function y(e,d){return v(e,"HEAPF32",d||Va)}function M(e,
|
|
7986
|
+
d,g,l){var t=Zb.toTypedArray();t[0]=e;t[1]=d;t[2]=g;t[3]=l;return Va}function T(e){for(var d=new Float32Array(4),g=0;4>g;g++)d[g]=a.HEAPF32[e/4+g];return d}function S(e,d){return v(e,"HEAPF32",d||ka)}function sa(e,d){return v(e,"HEAPF32",d||$b)}function pa(){for(var e=0,d=0;d<arguments.length-1;d+=2)e+=arguments[d]*arguments[d+1];return e}function ib(e,d,g){for(var l=Array(e.length),t=0;t<g;t++)for(var x=0;x<g;x++){for(var C=0,K=0;K<g;K++)C+=e[g*t+K]*d[g*K+x];l[t*g+x]=C;}return l}function jb(e,d){for(var g=
|
|
7987
|
+
ib(d[0],d[1],e),l=2;l<d.length;)g=ib(g,d[l],e),l++;return g}a.Color=function(e,d,g,l){ void 0===l&&(l=1);return a.Color4f(n(e)/255,n(d)/255,n(g)/255,l)};a.ColorAsInt=function(e,d,g,l){ void 0===l&&(l=255);return (n(l)<<24|n(e)<<16|n(d)<<8|n(g)<<0&268435455)>>>0};a.Color4f=function(e,d,g,l){ void 0===l&&(l=1);return Float32Array.of(e,d,g,l)};Object.defineProperty(a,"TRANSPARENT",{get:function(){return a.Color4f(0,0,0,0)}});Object.defineProperty(a,"BLACK",{get:function(){return a.Color4f(0,0,0,1)}});Object.defineProperty(a,
|
|
7575
7988
|
"WHITE",{get:function(){return a.Color4f(1,1,1,1)}});Object.defineProperty(a,"RED",{get:function(){return a.Color4f(1,0,0,1)}});Object.defineProperty(a,"GREEN",{get:function(){return a.Color4f(0,1,0,1)}});Object.defineProperty(a,"BLUE",{get:function(){return a.Color4f(0,0,1,1)}});Object.defineProperty(a,"YELLOW",{get:function(){return a.Color4f(1,1,0,1)}});Object.defineProperty(a,"CYAN",{get:function(){return a.Color4f(0,1,1,1)}});Object.defineProperty(a,"MAGENTA",{get:function(){return a.Color4f(1,
|
|
7576
7989
|
0,1,1)}});a.getColorComponents=function(e){return [Math.floor(255*e[0]),Math.floor(255*e[1]),Math.floor(255*e[2]),e[3]]};a.parseColorString=function(e,d){e=e.toLowerCase();if(e.startsWith("#")){d=255;switch(e.length){case 9:d=parseInt(e.slice(7,9),16);case 7:var g=parseInt(e.slice(1,3),16);var l=parseInt(e.slice(3,5),16);var t=parseInt(e.slice(5,7),16);break;case 5:d=17*parseInt(e.slice(4,5),16);case 4:g=17*parseInt(e.slice(1,2),16),l=17*parseInt(e.slice(2,3),16),t=17*parseInt(e.slice(3,4),16);}return a.Color(g,
|
|
7577
|
-
l,t,d/255)}return e.startsWith("rgba")?(e=e.slice(5,-1),e=e.split(","),a.Color(+e[0],+e[1],+e[2],u(e[3]))):e.startsWith("rgb")?(e=e.slice(4,-1),e=e.split(","),a.Color(+e[0],+e[1],+e[2],u(e[3]))):e.startsWith("gray(")||e.startsWith("hsl")||!d||(e=d[e],void 0===e)?a.BLACK:e};a.multiplyByAlpha=function(e,d){e=e.slice();e[3]=Math.max(0,Math.min(e[3]*d,1));return e};a.Malloc=function(e,d){var g=a._malloc(d*e.BYTES_PER_ELEMENT);return {_ck:true,length:d,byteOffset:g,
|
|
7578
|
-
t);l._ck=true;return l},toTypedArray:function(){if(this.
|
|
7579
|
-
(C*=4));var
|
|
7580
|
-
|
|
7581
|
-
a.GlyphRunFlags={IsWhiteSpace:a._GlyphRunFlags_isWhiteSpace};a.Path.MakeFromCmds=function(d){var g=v(d,"HEAPF32"),l=a.Path._MakeFromCmds(g,d.length);p(g,d);return l};a.Path.MakeFromVerbsPointsWeights=function(d,g,l){var t=v(d,"HEAPU8"),x=v(g,"HEAPF32"),C=v(l,"HEAPF32"),
|
|
7990
|
+
l,t,d/255)}return e.startsWith("rgba")?(e=e.slice(5,-1),e=e.split(","),a.Color(+e[0],+e[1],+e[2],u(e[3]))):e.startsWith("rgb")?(e=e.slice(4,-1),e=e.split(","),a.Color(+e[0],+e[1],+e[2],u(e[3]))):e.startsWith("gray(")||e.startsWith("hsl")||!d||(e=d[e],void 0===e)?a.BLACK:e};a.multiplyByAlpha=function(e,d){e=e.slice();e[3]=Math.max(0,Math.min(e[3]*d,1));return e};a.Malloc=function(e,d){var g=a._malloc(d*e.BYTES_PER_ELEMENT);return {_ck:true,length:d,byteOffset:g,Je:null,subarray:function(l,t){l=this.toTypedArray().subarray(l,
|
|
7991
|
+
t);l._ck=true;return l},toTypedArray:function(){if(this.Je&&this.Je.length)return this.Je;this.Je=new e(a.HEAPU8.buffer,g,d);this.Je._ck=true;return this.Je}}};a.Free=function(e){a._free(e.byteOffset);e.byteOffset=X;e.toTypedArray=null;e.Je=null;};var Oa=X,Xb,bb=X,Yb,Va=X,Zb,Ca,ka=X,zc,Pa=X,Ac,ac=X,Bc,bc=X,Ab,kb=X,Cc,$b=X,Dc,Ec=X,Hd=Float32Array.of(0,0,1),X=0;a.onRuntimeInitialized=function(){function e(d,g,l,t,x,C,K){C||(C=4*t.width,t.colorType===a.ColorType.RGBA_F16?C*=2:t.colorType===a.ColorType.RGBA_F32&&
|
|
7992
|
+
(C*=4));var O=C*t.height;var P=x?x.byteOffset:a._malloc(O);if(K?!d._readPixels(t,P,C,g,l,K):!d._readPixels(t,P,C,g,l))return x||a._free(P),null;if(x)return x.toTypedArray();switch(t.colorType){case a.ColorType.RGBA_8888:case a.ColorType.RGBA_F16:d=(new Uint8Array(a.HEAPU8.buffer,P,O)).slice();break;case a.ColorType.RGBA_F32:d=(new Float32Array(a.HEAPU8.buffer,P,O)).slice();break;default:return null}a._free(P);return d}Zb=a.Malloc(Float32Array,4);Va=Zb.byteOffset;Yb=a.Malloc(Float32Array,16);bb=Yb.byteOffset;
|
|
7993
|
+
Xb=a.Malloc(Float32Array,9);Oa=Xb.byteOffset;Cc=a.Malloc(Float32Array,12);$b=Cc.byteOffset;Dc=a.Malloc(Float32Array,12);Ec=Dc.byteOffset;Ca=a.Malloc(Float32Array,4);ka=Ca.byteOffset;zc=a.Malloc(Float32Array,4);Pa=zc.byteOffset;Ac=a.Malloc(Float32Array,3);ac=Ac.byteOffset;Bc=a.Malloc(Float32Array,3);bc=Bc.byteOffset;Ab=a.Malloc(Int32Array,4);kb=Ab.byteOffset;a.ColorSpace.SRGB=a.ColorSpace._MakeSRGB();a.ColorSpace.DISPLAY_P3=a.ColorSpace._MakeDisplayP3();a.ColorSpace.ADOBE_RGB=a.ColorSpace._MakeAdobeRGB();
|
|
7994
|
+
a.GlyphRunFlags={IsWhiteSpace:a._GlyphRunFlags_isWhiteSpace};a.Path.MakeFromCmds=function(d){var g=v(d,"HEAPF32"),l=a.Path._MakeFromCmds(g,d.length);p(g,d);return l};a.Path.MakeFromVerbsPointsWeights=function(d,g,l){var t=v(d,"HEAPU8"),x=v(g,"HEAPF32"),C=v(l,"HEAPF32"),K=a.Path._MakeFromVerbsPointsWeights(t,d.length,x,g.length,C,l&&l.length||0);p(t,d);p(x,g);p(C,l);return K};a.Path.prototype.addArc=function(d,g,l){d=S(d);this._addArc(d,g,l);return this};a.Path.prototype.addCircle=function(d,g,l,t){this._addCircle(d,
|
|
7582
7995
|
g,l,!!t);return this};a.Path.prototype.addOval=function(d,g,l){ void 0===l&&(l=1);d=S(d);this._addOval(d,!!g,l);return this};a.Path.prototype.addPath=function(){var d=Array.prototype.slice.call(arguments),g=d[0],l=false;"boolean"===typeof d[d.length-1]&&(l=d.pop());if(1===d.length)this._addPath(g,1,0,0,0,1,0,0,0,1,l);else if(2===d.length)d=d[1],this._addPath(g,d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1,l);else if(7===d.length||10===d.length)this._addPath(g,d[1],d[2],d[3],d[4],d[5],d[6],d[7]||
|
|
7583
7996
|
0,d[8]||0,d[9]||1,l);else return null;return this};a.Path.prototype.addPoly=function(d,g){var l=v(d,"HEAPF32");this._addPoly(l,d.length/2,g);p(l,d);return this};a.Path.prototype.addRect=function(d,g){d=S(d);this._addRect(d,!!g);return this};a.Path.prototype.addRRect=function(d,g){d=sa(d);this._addRRect(d,!!g);return this};a.Path.prototype.addVerbsPointsWeights=function(d,g,l){var t=v(d,"HEAPU8"),x=v(g,"HEAPF32"),C=v(l,"HEAPF32");this._addVerbsPointsWeights(t,d.length,x,g.length,C,l&&l.length||0);
|
|
7584
|
-
p(t,d);p(x,g);p(C,l);};a.Path.prototype.arc=function(d,g,l,t,x,C){d=a.LTRBRect(d-l,g-l,d+l,g+l);x=(x-t)/Math.PI*180-360*!!C;C=new a.Path;C.addArc(d,t/Math.PI*180,x);this.addPath(C,true);C.delete();return this};a.Path.prototype.arcToOval=function(d,g,l,t){d=S(d);this._arcToOval(d,g,l,t);return this};a.Path.prototype.arcToRotated=function(d,g,l,t,x,C,
|
|
7585
|
-
function(){this._close();return this};a.Path.prototype.conicTo=function(d,g,l,t,x){this._conicTo(d,g,l,t,x);return this};a.Path.prototype.computeTightBounds=function(d){this._computeTightBounds(
|
|
7586
|
-
(d.set(g),d):g.slice()};a.Path.prototype.lineTo=function(d,g){this._lineTo(d,g);return this};a.Path.prototype.moveTo=function(d,g){this._moveTo(d,g);return this};a.Path.prototype.offset=function(d,g){this._transform(1,0,d,0,1,g,0,0,1);return this};a.Path.prototype.quadTo=function(d,g,l,t){this._quadTo(d,g,l,t);return this};a.Path.prototype.rArcTo=function(d,g,l,t,x,C,
|
|
7997
|
+
p(t,d);p(x,g);p(C,l);};a.Path.prototype.arc=function(d,g,l,t,x,C){d=a.LTRBRect(d-l,g-l,d+l,g+l);x=(x-t)/Math.PI*180-360*!!C;C=new a.Path;C.addArc(d,t/Math.PI*180,x);this.addPath(C,true);C.delete();return this};a.Path.prototype.arcToOval=function(d,g,l,t){d=S(d);this._arcToOval(d,g,l,t);return this};a.Path.prototype.arcToRotated=function(d,g,l,t,x,C,K){this._arcToRotated(d,g,l,!!t,!!x,C,K);return this};a.Path.prototype.arcToTangent=function(d,g,l,t,x){this._arcToTangent(d,g,l,t,x);return this};a.Path.prototype.close=
|
|
7998
|
+
function(){this._close();return this};a.Path.prototype.conicTo=function(d,g,l,t,x){this._conicTo(d,g,l,t,x);return this};a.Path.prototype.computeTightBounds=function(d){this._computeTightBounds(ka);var g=Ca.toTypedArray();return d?(d.set(g),d):g.slice()};a.Path.prototype.cubicTo=function(d,g,l,t,x,C){this._cubicTo(d,g,l,t,x,C);return this};a.Path.prototype.dash=function(d,g,l){return this._dash(d,g,l)?this:null};a.Path.prototype.getBounds=function(d){this._getBounds(ka);var g=Ca.toTypedArray();return d?
|
|
7999
|
+
(d.set(g),d):g.slice()};a.Path.prototype.lineTo=function(d,g){this._lineTo(d,g);return this};a.Path.prototype.moveTo=function(d,g){this._moveTo(d,g);return this};a.Path.prototype.offset=function(d,g){this._transform(1,0,d,0,1,g,0,0,1);return this};a.Path.prototype.quadTo=function(d,g,l,t){this._quadTo(d,g,l,t);return this};a.Path.prototype.rArcTo=function(d,g,l,t,x,C,K){this._rArcTo(d,g,l,t,x,C,K);return this};a.Path.prototype.rConicTo=function(d,g,l,t,x){this._rConicTo(d,g,l,t,x);return this};a.Path.prototype.rCubicTo=
|
|
7587
8000
|
function(d,g,l,t,x,C){this._rCubicTo(d,g,l,t,x,C);return this};a.Path.prototype.rLineTo=function(d,g){this._rLineTo(d,g);return this};a.Path.prototype.rMoveTo=function(d,g){this._rMoveTo(d,g);return this};a.Path.prototype.rQuadTo=function(d,g,l,t){this._rQuadTo(d,g,l,t);return this};a.Path.prototype.stroke=function(d){d=d||{};d.width=d.width||1;d.miter_limit=d.miter_limit||4;d.cap=d.cap||a.StrokeCap.Butt;d.join=d.join||a.StrokeJoin.Miter;d.precision=d.precision||1;return this._stroke(d)?this:null};
|
|
7588
8001
|
a.Path.prototype.transform=function(){if(1===arguments.length){var d=arguments[0];this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1);}else if(6===arguments.length||9===arguments.length)d=arguments,this._transform(d[0],d[1],d[2],d[3],d[4],d[5],d[6]||0,d[7]||0,d[8]||1);else throw "transform expected to take 1 or 9 arguments. Got "+arguments.length;return this};a.Path.prototype.trim=function(d,g,l){return this._trim(d,g,!!l)?this:null};a.Image.prototype.encodeToBytes=function(d,g){var l=
|
|
7589
|
-
a.
|
|
7590
|
-
function(d,g,l){a.
|
|
7591
|
-
|
|
7592
|
-
this._drawColorInt(d,g||a.BlendMode.SrcOver);};a.Canvas.prototype.drawColorComponents=function(d,g,l,t,x){a.
|
|
7593
|
-
function(d,g,l,t,x,C){a.
|
|
7594
|
-
function(d,g,l,t,x,C){a.
|
|
7595
|
-
if(g&&4>g.length)throw "Need 4 colors";if(l&&8>l.length)throw "Need 4 shader coordinates";a.
|
|
7596
|
-
t,g.length/2,l);p(t,g);};a.Canvas.prototype.drawRRect=function(d,g){a.
|
|
7597
|
-
function(d,g,l,t,x,C,
|
|
7598
|
-
a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(
|
|
7599
|
-
t){g=S(g);return this._saveLayer(d||null,g,l||null,t||0)};a.Canvas.prototype.writePixels=function(d,g,l,t,x,C,
|
|
7600
|
-
return a.ColorFilter._MakeBlend(d,g,l)};a.ColorFilter.MakeMatrix=function(d){if(!d||20!==d.length)throw "invalid color matrix";var g=v(d,"HEAPF32"),l=a.ColorFilter._makeMatrix(g);p(g,d);return l};a.ContourMeasure.prototype.getPosTan=function(d,g){this._getPosTan(d,
|
|
7601
|
-
function(d,g,l,t,x,C){x=y(x,
|
|
7602
|
-
g,l){d=
|
|
7603
|
-
g){this._getPoint(d,
|
|
7604
|
-
function(d){a.
|
|
7605
|
-
(this.
|
|
7606
|
-
function(d,g){d=
|
|
7607
|
-
g,l,t,x,C,
|
|
7608
|
-
v(C,"HEAPF32");
|
|
7609
|
-
p(g,e.spot);return l};a.LTRBRect=function(e,d,g,l){return Float32Array.of(e,d,g,l)};a.XYWHRect=function(e,d,g,l){return Float32Array.of(e,d,e+g,d+l)};a.LTRBiRect=function(e,d,g,l){return Int32Array.of(e,d,g,l)};a.XYWHiRect=function(e,d,g,l){return Int32Array.of(e,d,e+g,d+l)};a.RRectXY=function(e,d,g){return Float32Array.of(e[0],e[1],e[2],e[3],d,g,d,g,d,g,d,g)};a.MakeAnimatedImageFromEncoded=function(e){e=new Uint8Array(e);var d=a._malloc(e.byteLength);
|
|
7610
|
-
e.byteLength))?e:null};a.MakeImageFromEncoded=function(e){e=new Uint8Array(e);var d=a._malloc(e.byteLength);a.HEAPU8.set(e,d);return (e=a._decodeImage(d,e.byteLength))?e:null};var
|
|
7611
|
-
colorSpace:a.ColorSpace.SRGB},e.data,4*d)};a.MakeImage=function(e,d,g){var l=a._malloc(d.length);a.HEAPU8.set(d,l);return a._MakeImage(e,l,d.length,g)};a.MakeVertices=function(e,d,g,l,t,x){var C=t&&t.length||0,
|
|
7612
|
-
{};a.Matrix.identity=function(){return c(3)};a.Matrix.invert=function(e){var d=e[0]*e[4]*e[8]+e[1]*e[5]*e[6]+e[2]*e[3]*e[7]-e[2]*e[4]*e[6]-e[1]*e[3]*e[8]-e[0]*e[5]*e[7];return d?[(e[4]*e[8]-e[5]*e[7])/d,(e[2]*e[7]-e[1]*e[8])/d,(e[1]*e[5]-e[2]*e[4])/d,(e[5]*e[6]-e[3]*e[8])/d,(e[0]*e[8]-e[2]*e[6])/d,(e[2]*e[3]-e[0]*e[5])/d,(e[3]*e[7]-e[4]*e[6])/d,(e[1]*e[6]-e[0]*e[7])/d,(e[0]*e[4]-e[1]*e[3])/d]:null};a.Matrix.mapPoints=function(e,d){for(var g=0;g<
|
|
7613
|
-
C=e[3]*l+e[4]*t+e[5];d[g]=(e[0]*l+e[1]*t+e[2])/x;d[g+1]=C/x;}return d};a.Matrix.multiply=function(){return
|
|
7614
|
-
c(3),3,2,0)};a.Vector={};a.Vector.dot=function(e,d){return e.map(function(g,l){return g*d[l]}).reduce(function(g,l){return g+l})};a.Vector.lengthSquared=function(e){return a.Vector.dot(e,e)};a.Vector.length=function(e){return Math.sqrt(a.Vector.lengthSquared(e))};a.Vector.mulScalar=function(e,d){return e.map(function(g){return g*d})};a.Vector.add=function(e,d){return e.map(function(g,l){return g+d[l]})};a.Vector.sub=function(e,
|
|
7615
|
-
d){return a.Vector.length(a.Vector.sub(e,d))};a.Vector.normalize=function(e){return a.Vector.mulScalar(e,1/a.Vector.length(e))};a.Vector.cross=function(e,d){return [e[1]*d[2]-e[2]*d[1],e[2]*d[0]-e[0]*d[2],e[0]*d[1]-e[1]*d[0]]};a.M44={};a.M44.identity=function(){return c(4)};a.M44.translated=function(e){return b(e,c(4),4,3,0)};a.M44.scaled=function(e){return b(e,c(4),4,0,1)};a.M44.rotated=function(e,d){return a.M44.rotatedUnitSinCos(a.Vector.normalize(e),
|
|
7616
|
-
function(e,d,g){var l=e[0],t=e[1];e=e[2];var x=1-g;return [x*l*l+g,x*l*t-d*e,x*l*e+d*t,0,x*l*t+d*e,x*t*t+g,x*t*e-d*l,0,x*l*e-d*t,x*t*e+d*l,x*e*e+g,0,0,0,0,1]};a.M44.lookat=function(e,d,g){d=a.Vector.normalize(a.Vector.sub(d,e));g=a.Vector.normalize(g);g=a.Vector.normalize(a.Vector.cross(d,g));var l=a.M44.identity();b(g,l,4,0,0);b(a.Vector.cross(g,d),l,4,1,0);b(a.Vector.mulScalar(d,-1),l,4,2,0);b(e,l,4,3,0);e=a.M44.invert(l);return null===e?a.M44.identity():
|
|
7617
|
-
1/(d-e);g/=2;g=Math.cos(g)/Math.sin(g);return [g,0,0,0,0,g,0,0,0,0,(d+e)*l,2*d*e*l,0,0,-1,1]};a.M44.rc=function(e,d,g){return e[4*d+g]};a.M44.multiply=function(){return
|
|
7618
|
-
1/
|
|
7619
|
-
e[6],e[10],e[14],e[3],e[7],e[11],e[15]]};a.M44.mustInvert=function(e){e=a.M44.invert(e);if(null===e)throw "Matrix not invertible";return e};a.M44.setupCamera=function(e,d,g){var l=a.M44.lookat(g.eye,g.coa,g.up);g=a.M44.perspective(g.near,g.far,g.angle);d=[(e[2]-e[0])/2,(e[3]-e[1])/2,d];e=a.M44.multiply(a.M44.translated([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),a.M44.scaled(d));return a.M44.multiply(e,g,l,a.M44.mustInvert(e))};a.ColorMatrix={};a.ColorMatrix.identity=function(){var e=
|
|
7620
|
-
1;e[6]=1;e[12]=1;e[18]=1;return e};a.ColorMatrix.scaled=function(e,d,g,l){var t=new Float32Array(20);t[0]=e;t[6]=d;t[12]=g;t[18]=l;return t};var
|
|
7621
|
-
x;x++)g[l++]=e[t]*d[x]+e[t+1]*d[x+5]+e[t+2]*d[x+10]+e[t+3]*d[x+15];g[l++]=e[t]*d[4]+e[t+1]*d[9]+e[t+2]*d[14]+e[t+3]*d[19]+e[t+4];}return g};(function(e){e.
|
|
7622
|
-
function l(r){r=r||{};void 0===r.weight&&(r.weight=e.FontWeight.Normal);r.width=r.width||e.FontWidth.Normal;r.slant=r.slant||e.FontSlant.Upright;return r}function t(r){if(!r||!r.length)return
|
|
7623
|
-
y(r.foregroundColor,
|
|
7624
|
-
D.map(function(
|
|
7625
|
-
|
|
7626
|
-
|
|
7627
|
-
e.Paragraph.prototype.getGlyphInfoAt=function(r){return d(this._getGlyphInfoAt(r))};e.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(r,D){return d(this._getClosestGlyphInfoAtCoordinate(r,D))};e.TypefaceFontProvider.prototype.registerFont=function(r,D){r=e.Typeface.
|
|
7628
|
-
|
|
7629
|
-
|
|
7630
|
-
r.decorationStyle||e.DecorationStyle.Solid;r.textBaseline=r.textBaseline||e.TextBaseline.Alphabetic;null==r.fontSize&&(r.fontSize=-1);r.letterSpacing=r.letterSpacing||0;r.wordSpacing=r.wordSpacing||0;null==r.heightMultiplier&&(r.heightMultiplier=-1);r.halfLeading=r.halfLeading||false;r.fontStyle=l(r.fontStyle);return r};var
|
|
7631
|
-
function(r,D){C(r.textStyle);D=e.ParagraphBuilder._MakeFromFontProvider(r,D);
|
|
7632
|
-
this._pushStyle(r);
|
|
7633
|
-
r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setGraphemeBreaksUtf8=function(r){var D=v(r,"HEAPU32");this._setGraphemeBreaksUtf8(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setGraphemeBreaksUtf16=function(r){var D=v(r,"HEAPU32");this._setGraphemeBreaksUtf16(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setLineBreaksUtf8=function(r){var D=v(r,"HEAPU32");this._setLineBreaksUtf8(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setLineBreaksUtf16=
|
|
7634
|
-
"HEAPU32");this._setLineBreaksUtf16(D,r&&r.length||0);p(D,r);};});})(w);a.
|
|
7635
|
-
a.
|
|
7636
|
-
d);d=this._getGlyphIDs(t,l-1,d,e);a._free(t);if(0>d)return a._free(e),null;t=new Uint16Array(a.HEAPU8.buffer,e,d);if(g)return g.set(t),a._free(e),g;g=Uint16Array.from(t);a._free(e);return g};a.Font.prototype.getGlyphIntercepts=function(e,d,g,l){var t=v(e,"HEAPU16"),x=v(d,"HEAPF32");return this._getGlyphIntercepts(t,e.length,!(e&&e._ck),x,d.length,!(d&&d._ck),g,l)};a.Font.prototype.getGlyphWidths=function(e,d,g){var l=v(e,"HEAPU16"),t=a._malloc(4*
|
|
7637
|
-
d||null);d=new Float32Array(a.HEAPU8.buffer,t,e.length);p(l,e);if(g)return g.set(d),a._free(t),g;e=Float32Array.from(d);a._free(t);return e};a.FontMgr.FromData=function(){if(!arguments.length)return null;var e=arguments;1===e.length&&Array.isArray(e[0])&&(e=arguments[0]);if(!e.length)return null;for(var d=[],g=[],l=0;l<e.length;l++){var t=new Uint8Array(e[l]),x=v(t,"HEAPU8");d.push(x);g.push(t.byteLength);}d=v(d,"HEAPU32");g=v(g,"HEAPU32");e=a.FontMgr._fromData(d,
|
|
7638
|
-
return e};a.Typeface.
|
|
7639
|
-
function(e,d,g,l){if(e&&e.length&&d&&d.countPoints()){if(1===d.countPoints())return this.MakeFromText(e,g);l||(l=0);var t=g.getGlyphIDs(e);t=g.getGlyphWidths(t);var x=[];d=new a.ContourMeasureIter(d,false,1);for(var C=d.next(),
|
|
7640
|
-
a.TextBlob.MakeFromRSXform=function(e,d,g){var l=
|
|
7641
|
-
|
|
7642
|
-
g);}})};a.RuntimeEffect.MakeForBlender=function(e,d){return a.RuntimeEffect._MakeForBlender(e,{onError:d||function(g){console.log("RuntimeEffect error",g);}})};a.RuntimeEffect.prototype.makeShader=function(e,d){var g=!e._ck,l=v(e,"HEAPF32");d=
|
|
7643
|
-
l,d,x.length,g)};a.RuntimeEffect.prototype.makeBlender=function(e){var d=!e._ck,g=v(e,"HEAPF32");return this._makeBlender(g,4*e.length,d)};});(function(){function e(
|
|
7644
|
-
z:z,"#"+
|
|
7645
|
-
function t(
|
|
7646
|
-
this.
|
|
7647
|
-
this.
|
|
7648
|
-
"globalCompositeOperation",{enumerable:true,get:function(){switch(this.
|
|
7649
|
-
case a.BlendMode.
|
|
7650
|
-
case a.BlendMode.Difference:return "difference";case a.BlendMode.Exclusion:return "exclusion";case a.BlendMode.Hue:return "hue";case a.BlendMode.Saturation:return "saturation";case a.BlendMode.Color:return "color";case a.BlendMode.Luminosity:return "luminosity"}},set:function(k){switch(k){case "source-over":this.
|
|
7651
|
-
a.BlendMode.
|
|
7652
|
-
|
|
7653
|
-
break;case "exclusion":this.
|
|
7654
|
-
set:function(){}});Object.defineProperty(this,"lineCap",{enumerable:true,get:function(){switch(this.
|
|
7655
|
-
set:function(k){isFinite(k)&&(this
|
|
7656
|
-
|
|
7657
|
-
set:function(k){this.
|
|
7658
|
-
q,z,z,0,
|
|
7659
|
-
k&&k.
|
|
7660
|
-
arguments.length;};this.createLinearGradient=function(k,q,z,
|
|
7661
|
-
arguments[4]||k.height()),
|
|
7662
|
-
if(f(this.
|
|
7663
|
-
z),this.
|
|
7664
|
-
k.delete();
|
|
7665
|
-
|
|
7666
|
-
z=this.
|
|
7667
|
-
q,z,
|
|
7668
|
-
this.
|
|
7669
|
-
this.
|
|
7670
|
-
if(this.
|
|
7671
|
-
k.length%2&&Array.prototype.push.apply(k,k);this.
|
|
7672
|
-
this.
|
|
7673
|
-
k?k.
|
|
7674
|
-
this.
|
|
7675
|
-
function(){};this.removeHitRegion=function(){};this.scrollPathIntoView=function(){};Object.defineProperty(this,"canvas",{value:null,writable:false});}function
|
|
7676
|
-
q=q.family;
|
|
7677
|
-
"",
|
|
7678
|
-
|
|
7679
|
-
this.
|
|
7680
|
-
|
|
7681
|
-
F?(
|
|
7682
|
-
z,0,
|
|
7683
|
-
F.quadTo(k,q,z,
|
|
7684
|
-
k;}this.setTransform=function(q){q=[q.a,q.c,q.e,q.b,q.d,q.f,0,0,1];e(q)&&(this._transform=q);};this.
|
|
7685
|
-
|
|
7686
|
-
|
|
7687
|
-
.
|
|
7688
|
-
|
|
7689
|
-
.
|
|
7690
|
-
.
|
|
7691
|
-
|
|
7692
|
-
|
|
7693
|
-
.
|
|
7694
|
-
1),midnightblue:Float32Array.of(.098,.098,.439,1),mintcream:Float32Array.of(.961,1,.98,1),mistyrose:Float32Array.of(1,.894,.882,1),moccasin:Float32Array.of(1,.894,.71,1),navajowhite:Float32Array.of(1,.871,.678,1),navy:Float32Array.of(0,0,.502,1),oldlace:Float32Array.of(.992,.961,.902,1),olive:Float32Array.of(.502,.502,0,1),olivedrab:Float32Array.of(.42
|
|
7695
|
-
.
|
|
7696
|
-
|
|
7697
|
-
.565,1),slategrey:Float32Array.of(.439,.502,.565,1),snow:Float32Array.of(1,.98,.98,1),springgreen:Float32Array.of(0,1,.498,1),steelblue:Float32Array.of(.275,.51,.706,1),tan:Float32Array.of(.824,.706,.549,1),teal:Float32Array.of(0,.502,.502,1),thistle:Float32Array.of(.847,.749,.847,1),tomato:Float32Array.of(1,.388,.278,1),transparent:Float32Array.of(0,
|
|
7698
|
-
1,1,1),whitesmoke:Float32Array.of(.961,.961,.961,1),yellow:Float32Array.of(1,1,0,1),yellowgreen:Float32Array.of(.604,.804,.196,1)};a._testing.parseColor=g;a._testing.colorToString=d;var
|
|
7699
|
-
function(){if(2===arguments.length){var
|
|
7700
|
-
arguments.length;};})();})(w);var
|
|
7701
|
-
if(
|
|
7702
|
-
a;throw b;};w.inspect=()=>"[Emscripten Module object]";}else if(ya
|
|
7703
|
-
Ea=(a,b,c)=>{var f=new XMLHttpRequest;f.open("GET",a,true);f.responseType="arraybuffer";f.onload=()=>{200==f.status||0==f.status&&f.response?b(f.response):c();};f.onerror=c;f.send(null);};var Ha=w.print||console.log.bind(console),
|
|
7704
|
-
var Ma,
|
|
7705
|
-
function
|
|
7706
|
-
function
|
|
7707
|
-
function
|
|
7708
|
-
var
|
|
7709
|
-
String.fromCharCode(h);}return f},
|
|
7710
|
-
function
|
|
7711
|
-
function
|
|
7712
|
-
function
|
|
7713
|
-
function
|
|
7714
|
-
function
|
|
7715
|
-
function
|
|
7716
|
-
function
|
|
7717
|
-
function
|
|
7718
|
-
function
|
|
7719
|
-
function
|
|
7720
|
-
this.
|
|
7721
|
-
function
|
|
7722
|
-
function
|
|
7723
|
-
var
|
|
7724
|
-
function
|
|
7725
|
-
function
|
|
7726
|
-
b[
|
|
7727
|
-
var
|
|
7728
|
-
function
|
|
7729
|
-
function
|
|
7730
|
-
var
|
|
7731
|
-
f?b+=2:55296<=f&&57343>=f?(b+=4,++c):b+=3;}return b},
|
|
7732
|
-
|
|
7733
|
-
55296<=f&&57343>=f&&++c;b+=4;}return b},
|
|
7734
|
-
function
|
|
7735
|
-
}function
|
|
7736
|
-
function
|
|
7737
|
-
function
|
|
7738
|
-
var
|
|
7739
|
-
function
|
|
7740
|
-
function yd(a){a||(a=
|
|
7741
|
-
var
|
|
7742
|
-
function
|
|
7743
|
-
function
|
|
7744
|
-
h)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:f=0;break;default:
|
|
7745
|
-
0;}catch(m){
|
|
7746
|
-
function
|
|
7747
|
-
function
|
|
7748
|
-
|
|
7749
|
-
|
|
7750
|
-
|
|
7751
|
-
|
|
7752
|
-
|
|
7753
|
-
2)
|
|
7754
|
-
|
|
7755
|
-
|
|
7756
|
-
|
|
7757
|
-
|
|
7758
|
-
|
|
7759
|
-
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
7771
|
-
|
|
7772
|
-
|
|
7773
|
-
|
|
7774
|
-
|
|
7775
|
-
|
|
7776
|
-
|
|
7777
|
-
|
|
7778
|
-
"
|
|
7779
|
-
|
|
7780
|
-
|
|
7781
|
-
|
|
7782
|
-
b)
|
|
7783
|
-
|
|
7784
|
-
b,c,
|
|
7785
|
-
|
|
7786
|
-
|
|
7787
|
-
|
|
7788
|
-
|
|
7789
|
-
|
|
7790
|
-
|
|
7791
|
-
|
|
7792
|
-
(a
|
|
7793
|
-
b
|
|
7794
|
-
c=
|
|
7795
|
-
b)
|
|
7796
|
-
|
|
7797
|
-
b,c,f);},
|
|
7798
|
-
b,c,f);},
|
|
7799
|
-
b,c){Z.
|
|
7800
|
-
b);},
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
b,c,f,
|
|
7804
|
-
f[h+2]=R[c+(4*h+
|
|
7805
|
-
|
|
7806
|
-
|
|
7807
|
-
2],
|
|
7808
|
-
|
|
7809
|
-
|
|
7810
|
-
|
|
7811
|
-
|
|
7812
|
-
|
|
7813
|
-
w.
|
|
7814
|
-
|
|
7815
|
-
|
|
7816
|
-
|
|
7817
|
-
function
|
|
7818
|
-
|
|
8002
|
+
a.mf();d=d||a.ImageFormat.PNG;g=g||100;return l?this._encodeToBytes(d,g,l):this._encodeToBytes(d,g)};a.Image.prototype.makeShaderCubic=function(d,g,l,t,x){x=G(x);return this._makeShaderCubic(d,g,l,t,x)};a.Image.prototype.makeShaderOptions=function(d,g,l,t,x){x=G(x);return this._makeShaderOptions(d,g,l,t,x)};a.Image.prototype.readPixels=function(d,g,l,t,x){var C=a.mf();return e(this,d,g,l,t,x,C)};a.Canvas.prototype.clear=function(d){a.de(this.be);d=y(d);this._clear(d);};a.Canvas.prototype.clipRRect=
|
|
8003
|
+
function(d,g,l){a.de(this.be);d=sa(d);this._clipRRect(d,g,l);};a.Canvas.prototype.clipRect=function(d,g,l){a.de(this.be);d=S(d);this._clipRect(d,g,l);};a.Canvas.prototype.concat=function(d){a.de(this.be);d=L(d);this._concat(d);};a.Canvas.prototype.drawArc=function(d,g,l,t,x){a.de(this.be);d=S(d);this._drawArc(d,g,l,t,x);};a.Canvas.prototype.drawAtlas=function(d,g,l,t,x,C,K){if(d&&t&&g&&l&&g.length===l.length){a.de(this.be);x||(x=a.BlendMode.SrcOver);var O=v(g,"HEAPF32"),P=v(l,"HEAPF32"),Y=l.length/4,
|
|
8004
|
+
ba=v(m(C),"HEAPU32");if(K&&"B"in K&&"C"in K)this._drawAtlasCubic(d,P,O,ba,Y,x,K.B,K.C,t);else {let r=a.FilterMode.Linear,D=a.MipmapMode.None;K&&(r=K.filter,"mipmap"in K&&(D=K.mipmap));this._drawAtlasOptions(d,P,O,ba,Y,x,r,D,t);}p(O,g);p(P,l);p(ba,C);}};a.Canvas.prototype.drawCircle=function(d,g,l,t){a.de(this.be);this._drawCircle(d,g,l,t);};a.Canvas.prototype.drawColor=function(d,g){a.de(this.be);d=y(d);void 0!==g?this._drawColor(d,g):this._drawColor(d);};a.Canvas.prototype.drawColorInt=function(d,g){a.de(this.be);
|
|
8005
|
+
this._drawColorInt(d,g||a.BlendMode.SrcOver);};a.Canvas.prototype.drawColorComponents=function(d,g,l,t,x){a.de(this.be);d=M(d,g,l,t);void 0!==x?this._drawColor(d,x):this._drawColor(d);};a.Canvas.prototype.drawDRRect=function(d,g,l){a.de(this.be);d=sa(d,$b);g=sa(g,Ec);this._drawDRRect(d,g,l);};a.Canvas.prototype.drawImage=function(d,g,l,t){a.de(this.be);this._drawImage(d,g,l,t||null);};a.Canvas.prototype.drawImageCubic=function(d,g,l,t,x,C){a.de(this.be);this._drawImageCubic(d,g,l,t,x,C||null);};a.Canvas.prototype.drawImageOptions=
|
|
8006
|
+
function(d,g,l,t,x,C){a.de(this.be);this._drawImageOptions(d,g,l,t,x,C||null);};a.Canvas.prototype.drawImageNine=function(d,g,l,t,x){a.de(this.be);g=v(g,"HEAP32",kb);l=S(l);this._drawImageNine(d,g,l,t,x||null);};a.Canvas.prototype.drawImageRect=function(d,g,l,t,x){a.de(this.be);S(g,ka);S(l,Pa);this._drawImageRect(d,ka,Pa,t,!!x);};a.Canvas.prototype.drawImageRectCubic=function(d,g,l,t,x,C){a.de(this.be);S(g,ka);S(l,Pa);this._drawImageRectCubic(d,ka,Pa,t,x,C||null);};a.Canvas.prototype.drawImageRectOptions=
|
|
8007
|
+
function(d,g,l,t,x,C){a.de(this.be);S(g,ka);S(l,Pa);this._drawImageRectOptions(d,ka,Pa,t,x,C||null);};a.Canvas.prototype.drawLine=function(d,g,l,t,x){a.de(this.be);this._drawLine(d,g,l,t,x);};a.Canvas.prototype.drawOval=function(d,g){a.de(this.be);d=S(d);this._drawOval(d,g);};a.Canvas.prototype.drawPaint=function(d){a.de(this.be);this._drawPaint(d);};a.Canvas.prototype.drawParagraph=function(d,g,l){a.de(this.be);this._drawParagraph(d,g,l);};a.Canvas.prototype.drawPatch=function(d,g,l,t,x){if(24>d.length)throw "Need 12 cubic points";
|
|
8008
|
+
if(g&&4>g.length)throw "Need 4 colors";if(l&&8>l.length)throw "Need 4 shader coordinates";a.de(this.be);const C=v(d,"HEAPF32"),K=g?v(m(g),"HEAPU32"):X,O=l?v(l,"HEAPF32"):X;t||(t=a.BlendMode.Modulate);this._drawPatch(C,K,O,t,x);p(O,l);p(K,g);p(C,d);};a.Canvas.prototype.drawPath=function(d,g){a.de(this.be);this._drawPath(d,g);};a.Canvas.prototype.drawPicture=function(d){a.de(this.be);this._drawPicture(d);};a.Canvas.prototype.drawPoints=function(d,g,l){a.de(this.be);var t=v(g,"HEAPF32");this._drawPoints(d,
|
|
8009
|
+
t,g.length/2,l);p(t,g);};a.Canvas.prototype.drawRRect=function(d,g){a.de(this.be);d=sa(d);this._drawRRect(d,g);};a.Canvas.prototype.drawRect=function(d,g){a.de(this.be);d=S(d);this._drawRect(d,g);};a.Canvas.prototype.drawRect4f=function(d,g,l,t,x){a.de(this.be);this._drawRect4f(d,g,l,t,x);};a.Canvas.prototype.drawShadow=function(d,g,l,t,x,C,K){a.de(this.be);var O=v(x,"HEAPF32"),P=v(C,"HEAPF32");g=v(g,"HEAPF32",ac);l=v(l,"HEAPF32",bc);this._drawShadow(d,g,l,t,O,P,K);p(O,x);p(P,C);};a.getShadowLocalBounds=
|
|
8010
|
+
function(d,g,l,t,x,C,K){d=G(d);l=v(l,"HEAPF32",ac);t=v(t,"HEAPF32",bc);if(!this._getShadowLocalBounds(d,g,l,t,x,C,ka))return null;g=Ca.toTypedArray();return K?(K.set(g),K):g.slice()};a.Canvas.prototype.drawTextBlob=function(d,g,l,t){a.de(this.be);this._drawTextBlob(d,g,l,t);};a.Canvas.prototype.drawVertices=function(d,g,l){a.de(this.be);this._drawVertices(d,g,l);};a.Canvas.prototype.getDeviceClipBounds=function(d){this._getDeviceClipBounds(kb);var g=Ab.toTypedArray();d?d.set(g):d=g.slice();return d};
|
|
8011
|
+
a.Canvas.prototype.quickReject=function(d){d=S(d);return this._quickReject(d)};a.Canvas.prototype.getLocalToDevice=function(){this._getLocalToDevice(bb);for(var d=bb,g=Array(16),l=0;16>l;l++)g[l]=a.HEAPF32[d/4+l];return g};a.Canvas.prototype.getTotalMatrix=function(){this._getTotalMatrix(Oa);for(var d=Array(9),g=0;9>g;g++)d[g]=a.HEAPF32[Oa/4+g];return d};a.Canvas.prototype.makeSurface=function(d){d=this._makeSurface(d);d.be=this.be;return d};a.Canvas.prototype.readPixels=function(d,g,l,t,x){a.de(this.be);
|
|
8012
|
+
return e(this,d,g,l,t,x)};a.Canvas.prototype.saveLayer=function(d,g,l,t,x){g=S(g);return this._saveLayer(d||null,g,l||null,t||0,x||a.TileMode.Clamp)};a.Canvas.prototype.writePixels=function(d,g,l,t,x,C,K,O){if(d.byteLength%(g*l))throw "pixels length must be a multiple of the srcWidth * srcHeight";a.de(this.be);var P=d.byteLength/(g*l);C=C||a.AlphaType.Unpremul;K=K||a.ColorType.RGBA_8888;O=O||a.ColorSpace.SRGB;var Y=P*g;P=v(d,"HEAPU8");g=this._writePixels({width:g,height:l,colorType:K,alphaType:C,colorSpace:O},
|
|
8013
|
+
P,Y,t,x);p(P,d);return g};a.ColorFilter.MakeBlend=function(d,g,l){d=y(d);l=l||a.ColorSpace.SRGB;return a.ColorFilter._MakeBlend(d,g,l)};a.ColorFilter.MakeMatrix=function(d){if(!d||20!==d.length)throw "invalid color matrix";var g=v(d,"HEAPF32"),l=a.ColorFilter._makeMatrix(g);p(g,d);return l};a.ContourMeasure.prototype.getPosTan=function(d,g){this._getPosTan(d,ka);d=Ca.toTypedArray();return g?(g.set(d),g):d.slice()};a.ImageFilter.prototype.getOutputBounds=function(d,g,l){d=S(d,ka);g=G(g);this._getOutputBounds(d,
|
|
8014
|
+
g,kb);g=Ab.toTypedArray();return l?(l.set(g),l):g.slice()};a.ImageFilter.MakeDropShadow=function(d,g,l,t,x,C){x=y(x,Va);return a.ImageFilter._MakeDropShadow(d,g,l,t,x,C)};a.ImageFilter.MakeDropShadowOnly=function(d,g,l,t,x,C){x=y(x,Va);return a.ImageFilter._MakeDropShadowOnly(d,g,l,t,x,C)};a.ImageFilter.MakeImage=function(d,g,l,t){l=S(l,ka);t=S(t,Pa);if("B"in g&&"C"in g)return a.ImageFilter._MakeImageCubic(d,g.B,g.C,l,t);const x=g.filter;let C=a.MipmapMode.None;"mipmap"in g&&(C=g.mipmap);return a.ImageFilter._MakeImageOptions(d,
|
|
8015
|
+
x,C,l,t)};a.ImageFilter.MakeMatrixTransform=function(d,g,l){d=G(d);if("B"in g&&"C"in g)return a.ImageFilter._MakeMatrixTransformCubic(d,g.B,g.C,l);const t=g.filter;let x=a.MipmapMode.None;"mipmap"in g&&(x=g.mipmap);return a.ImageFilter._MakeMatrixTransformOptions(d,t,x,l)};a.Paint.prototype.getColor=function(){this._getColor(Va);return T(Va)};a.Paint.prototype.setColor=function(d,g){g=g||null;d=y(d);this._setColor(d,g);};a.Paint.prototype.setColorComponents=function(d,g,l,t,x){x=x||null;d=M(d,g,l,
|
|
8016
|
+
t);this._setColor(d,x);};a.Path.prototype.getPoint=function(d,g){this._getPoint(d,ka);d=Ca.toTypedArray();return g?(g[0]=d[0],g[1]=d[1],g):d.slice(0,2)};a.Picture.prototype.makeShader=function(d,g,l,t,x){t=G(t);x=S(x);return this._makeShader(d,g,l,t,x)};a.Picture.prototype.cullRect=function(d){this._cullRect(ka);var g=Ca.toTypedArray();return d?(d.set(g),d):g.slice()};a.PictureRecorder.prototype.beginRecording=function(d,g){d=S(d);return this._beginRecording(d,!!g)};a.Surface.prototype.getCanvas=function(){var d=
|
|
8017
|
+
this._getCanvas();d.be=this.be;return d};a.Surface.prototype.makeImageSnapshot=function(d){a.de(this.be);d=v(d,"HEAP32",kb);return this._makeImageSnapshot(d)};a.Surface.prototype.makeSurface=function(d){a.de(this.be);d=this._makeSurface(d);d.be=this.be;return d};a.Surface.prototype.Wf=function(d,g){this.Ze||(this.Ze=this.getCanvas());return requestAnimationFrame(function(){a.de(this.be);d(this.Ze);this.flush(g);}.bind(this))};a.Surface.prototype.requestAnimationFrame||(a.Surface.prototype.requestAnimationFrame=
|
|
8018
|
+
a.Surface.prototype.Wf);a.Surface.prototype.Sf=function(d,g){this.Ze||(this.Ze=this.getCanvas());requestAnimationFrame(function(){a.de(this.be);d(this.Ze);this.flush(g);this.dispose();}.bind(this));};a.Surface.prototype.drawOnce||(a.Surface.prototype.drawOnce=a.Surface.prototype.Sf);a.PathEffect.MakeDash=function(d,g){g||(g=0);if(!d.length||1===d.length%2)throw "Intervals array must have even length";var l=v(d,"HEAPF32");g=a.PathEffect._MakeDash(l,d.length,g);p(l,d);return g};a.PathEffect.MakeLine2D=
|
|
8019
|
+
function(d,g){g=G(g);return a.PathEffect._MakeLine2D(d,g)};a.PathEffect.MakePath2D=function(d,g){d=G(d);return a.PathEffect._MakePath2D(d,g)};a.Shader.MakeColor=function(d,g){g=g||null;d=y(d);return a.Shader._MakeColor(d,g)};a.Shader.Blend=a.Shader.MakeBlend;a.Shader.Color=a.Shader.MakeColor;a.Shader.MakeLinearGradient=function(d,g,l,t,x,C,K,O){O=O||null;var P=E(l),Y=v(t,"HEAPF32");K=K||0;C=G(C);var ba=Ca.toTypedArray();ba.set(d);ba.set(g,2);d=a.Shader._MakeLinearGradient(ka,P.te,P.colorType,Y,P.count,
|
|
8020
|
+
x,K,C,O);p(P.te,l);t&&p(Y,t);return d};a.Shader.MakeRadialGradient=function(d,g,l,t,x,C,K,O){O=O||null;var P=E(l),Y=v(t,"HEAPF32");K=K||0;C=G(C);d=a.Shader._MakeRadialGradient(d[0],d[1],g,P.te,P.colorType,Y,P.count,x,K,C,O);p(P.te,l);t&&p(Y,t);return d};a.Shader.MakeSweepGradient=function(d,g,l,t,x,C,K,O,P,Y){Y=Y||null;var ba=E(l),r=v(t,"HEAPF32");K=K||0;O=O||0;P=P||360;C=G(C);d=a.Shader._MakeSweepGradient(d,g,ba.te,ba.colorType,r,ba.count,x,O,P,K,C,Y);p(ba.te,l);t&&p(r,t);return d};a.Shader.MakeTwoPointConicalGradient=
|
|
8021
|
+
function(d,g,l,t,x,C,K,O,P,Y){Y=Y||null;var ba=E(x),r=v(C,"HEAPF32");P=P||0;O=G(O);var D=Ca.toTypedArray();D.set(d);D.set(l,2);d=a.Shader._MakeTwoPointConicalGradient(ka,g,t,ba.te,ba.colorType,r,ba.count,K,P,O,Y);p(ba.te,x);C&&p(r,C);return d};a.Vertices.prototype.bounds=function(d){this._bounds(ka);var g=Ca.toTypedArray();return d?(d.set(g),d):g.slice()};a.ke&&a.ke.forEach(function(d){d();});};a.computeTonalColors=function(e){var d=v(e.ambient,"HEAPF32"),g=v(e.spot,"HEAPF32");this._computeTonalColors(d,
|
|
8022
|
+
g);var l={ambient:T(d),spot:T(g)};p(d,e.ambient);p(g,e.spot);return l};a.LTRBRect=function(e,d,g,l){return Float32Array.of(e,d,g,l)};a.XYWHRect=function(e,d,g,l){return Float32Array.of(e,d,e+g,d+l)};a.LTRBiRect=function(e,d,g,l){return Int32Array.of(e,d,g,l)};a.XYWHiRect=function(e,d,g,l){return Int32Array.of(e,d,e+g,d+l)};a.RRectXY=function(e,d,g){return Float32Array.of(e[0],e[1],e[2],e[3],d,g,d,g,d,g,d,g)};a.MakeAnimatedImageFromEncoded=function(e){e=new Uint8Array(e);var d=a._malloc(e.byteLength);
|
|
8023
|
+
a.HEAPU8.set(e,d);return (e=a._decodeAnimatedImage(d,e.byteLength))?e:null};a.MakeImageFromEncoded=function(e){e=new Uint8Array(e);var d=a._malloc(e.byteLength);a.HEAPU8.set(e,d);return (e=a._decodeImage(d,e.byteLength))?e:null};var lb=null;a.MakeImageFromCanvasImageSource=function(e){var d=e.width,g=e.height;lb||(lb=document.createElement("canvas"));lb.width=d;lb.height=g;var l=lb.getContext("2d",{willReadFrequently:true});l.drawImage(e,0,0);e=l.getImageData(0,0,d,g);return a.MakeImage({width:d,height:g,
|
|
8024
|
+
alphaType:a.AlphaType.Unpremul,colorType:a.ColorType.RGBA_8888,colorSpace:a.ColorSpace.SRGB},e.data,4*d)};a.MakeImage=function(e,d,g){var l=a._malloc(d.length);a.HEAPU8.set(d,l);return a._MakeImage(e,l,d.length,g)};a.MakeVertices=function(e,d,g,l,t,x){var C=t&&t.length||0,K=0;g&&g.length&&(K|=1);l&&l.length&&(K|=2);void 0===x||x||(K|=4);e=new a._VerticesBuilder(e,d.length/2,C,K);v(d,"HEAPF32",e.positions());e.texCoords()&&v(g,"HEAPF32",e.texCoords());e.colors()&&v(m(l),"HEAPU32",e.colors());e.indices()&&
|
|
8025
|
+
v(t,"HEAPU16",e.indices());return e.detach()};a.Matrix={};a.Matrix.identity=function(){return c(3)};a.Matrix.invert=function(e){var d=e[0]*e[4]*e[8]+e[1]*e[5]*e[6]+e[2]*e[3]*e[7]-e[2]*e[4]*e[6]-e[1]*e[3]*e[8]-e[0]*e[5]*e[7];return d?[(e[4]*e[8]-e[5]*e[7])/d,(e[2]*e[7]-e[1]*e[8])/d,(e[1]*e[5]-e[2]*e[4])/d,(e[5]*e[6]-e[3]*e[8])/d,(e[0]*e[8]-e[2]*e[6])/d,(e[2]*e[3]-e[0]*e[5])/d,(e[3]*e[7]-e[4]*e[6])/d,(e[1]*e[6]-e[0]*e[7])/d,(e[0]*e[4]-e[1]*e[3])/d]:null};a.Matrix.mapPoints=function(e,d){for(var g=0;g<
|
|
8026
|
+
d.length;g+=2){var l=d[g],t=d[g+1],x=e[6]*l+e[7]*t+e[8],C=e[3]*l+e[4]*t+e[5];d[g]=(e[0]*l+e[1]*t+e[2])/x;d[g+1]=C/x;}return d};a.Matrix.multiply=function(){return jb(3,arguments)};a.Matrix.rotated=function(e,d,g){d=d||0;g=g||0;var l=Math.sin(e);e=Math.cos(e);return [e,-l,pa(l,g,1-e,d),l,e,pa(-l,d,1-e,g),0,0,1]};a.Matrix.scaled=function(e,d,g,l){g=g||0;l=l||0;var t=b([e,d],c(3),3,0,1);return b([g-e*g,l-d*l],t,3,2,0)};a.Matrix.skewed=function(e,d,g,l){g=g||0;l=l||0;var t=b([e,d],c(3),3,1,-1);return b([-e*
|
|
8027
|
+
g,-d*l],t,3,2,0)};a.Matrix.translated=function(e,d){return b(arguments,c(3),3,2,0)};a.Vector={};a.Vector.dot=function(e,d){return e.map(function(g,l){return g*d[l]}).reduce(function(g,l){return g+l})};a.Vector.lengthSquared=function(e){return a.Vector.dot(e,e)};a.Vector.length=function(e){return Math.sqrt(a.Vector.lengthSquared(e))};a.Vector.mulScalar=function(e,d){return e.map(function(g){return g*d})};a.Vector.add=function(e,d){return e.map(function(g,l){return g+d[l]})};a.Vector.sub=function(e,
|
|
8028
|
+
d){return e.map(function(g,l){return g-d[l]})};a.Vector.dist=function(e,d){return a.Vector.length(a.Vector.sub(e,d))};a.Vector.normalize=function(e){return a.Vector.mulScalar(e,1/a.Vector.length(e))};a.Vector.cross=function(e,d){return [e[1]*d[2]-e[2]*d[1],e[2]*d[0]-e[0]*d[2],e[0]*d[1]-e[1]*d[0]]};a.M44={};a.M44.identity=function(){return c(4)};a.M44.translated=function(e){return b(e,c(4),4,3,0)};a.M44.scaled=function(e){return b(e,c(4),4,0,1)};a.M44.rotated=function(e,d){return a.M44.rotatedUnitSinCos(a.Vector.normalize(e),
|
|
8029
|
+
Math.sin(d),Math.cos(d))};a.M44.rotatedUnitSinCos=function(e,d,g){var l=e[0],t=e[1];e=e[2];var x=1-g;return [x*l*l+g,x*l*t-d*e,x*l*e+d*t,0,x*l*t+d*e,x*t*t+g,x*t*e-d*l,0,x*l*e-d*t,x*t*e+d*l,x*e*e+g,0,0,0,0,1]};a.M44.lookat=function(e,d,g){d=a.Vector.normalize(a.Vector.sub(d,e));g=a.Vector.normalize(g);g=a.Vector.normalize(a.Vector.cross(d,g));var l=a.M44.identity();b(g,l,4,0,0);b(a.Vector.cross(g,d),l,4,1,0);b(a.Vector.mulScalar(d,-1),l,4,2,0);b(e,l,4,3,0);e=a.M44.invert(l);return null===e?a.M44.identity():
|
|
8030
|
+
e};a.M44.perspective=function(e,d,g){var l=1/(d-e);g/=2;g=Math.cos(g)/Math.sin(g);return [g,0,0,0,0,g,0,0,0,0,(d+e)*l,2*d*e*l,0,0,-1,1]};a.M44.rc=function(e,d,g){return e[4*d+g]};a.M44.multiply=function(){return jb(4,arguments)};a.M44.invert=function(e){var d=e[0],g=e[4],l=e[8],t=e[12],x=e[1],C=e[5],K=e[9],O=e[13],P=e[2],Y=e[6],ba=e[10],r=e[14],D=e[3],U=e[7],ea=e[11];e=e[15];var la=d*C-g*x,ta=d*K-l*x,xa=d*O-t*x,Da=g*K-l*C,fa=g*O-t*C,I=l*O-t*K,k=P*U-Y*D,q=P*ea-ba*D,z=P*e-r*D,A=Y*ea-ba*U,F=Y*e-r*U,H=
|
|
8031
|
+
ba*e-r*ea,N=la*H-ta*F+xa*A+Da*z-fa*q+I*k,V=1/N;if(0===N||Infinity===V)return null;la*=V;ta*=V;xa*=V;Da*=V;fa*=V;I*=V;k*=V;q*=V;z*=V;A*=V;F*=V;H*=V;d=[C*H-K*F+O*A,K*z-x*H-O*q,x*F-C*z+O*k,C*q-x*A-K*k,l*F-g*H-t*A,d*H-l*z+t*q,g*z-d*F-t*k,d*A-g*q+l*k,U*I-ea*fa+e*Da,ea*xa-D*I-e*ta,D*fa-U*xa+e*la,U*ta-D*Da-ea*la,ba*fa-Y*I-r*Da,P*I-ba*xa+r*ta,Y*xa-P*fa-r*la,P*Da-Y*ta+ba*la];return d.every(function(qa){return !isNaN(qa)&&Infinity!==qa&&-Infinity!==qa})?d:null};a.M44.transpose=function(e){return [e[0],e[4],e[8],
|
|
8032
|
+
e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15]]};a.M44.mustInvert=function(e){e=a.M44.invert(e);if(null===e)throw "Matrix not invertible";return e};a.M44.setupCamera=function(e,d,g){var l=a.M44.lookat(g.eye,g.coa,g.up);g=a.M44.perspective(g.near,g.far,g.angle);d=[(e[2]-e[0])/2,(e[3]-e[1])/2,d];e=a.M44.multiply(a.M44.translated([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),a.M44.scaled(d));return a.M44.multiply(e,g,l,a.M44.mustInvert(e))};a.ColorMatrix={};a.ColorMatrix.identity=function(){var e=
|
|
8033
|
+
new Float32Array(20);e[0]=1;e[6]=1;e[12]=1;e[18]=1;return e};a.ColorMatrix.scaled=function(e,d,g,l){var t=new Float32Array(20);t[0]=e;t[6]=d;t[12]=g;t[18]=l;return t};var Id=[[6,7,11,12],[0,10,2,12],[0,1,5,6]];a.ColorMatrix.rotated=function(e,d,g){var l=a.ColorMatrix.identity();e=Id[e];l[e[0]]=g;l[e[1]]=d;l[e[2]]=-d;l[e[3]]=g;return l};a.ColorMatrix.postTranslate=function(e,d,g,l,t){e[4]+=d;e[9]+=g;e[14]+=l;e[19]+=t;return e};a.ColorMatrix.concat=function(e,d){for(var g=new Float32Array(20),l=0,t=
|
|
8034
|
+
0;20>t;t+=5){for(var x=0;4>x;x++)g[l++]=e[t]*d[x]+e[t+1]*d[x+5]+e[t+2]*d[x+10]+e[t+3]*d[x+15];g[l++]=e[t]*d[4]+e[t+1]*d[9]+e[t+2]*d[14]+e[t+3]*d[19]+e[t+4];}return g};(function(e){e.ke=e.ke||[];e.ke.push(function(){function d(r){r&&(r.dir=0===r.dir?e.TextDirection.RTL:e.TextDirection.LTR);return r}function g(r){if(!r||!r.length)return [];for(var D=[],U=0;U<r.length;U+=5){var ea=e.LTRBRect(r[U],r[U+1],r[U+2],r[U+3]),la=e.TextDirection.LTR;0===r[U+4]&&(la=e.TextDirection.RTL);D.push({rect:ea,dir:la});}e._free(r.byteOffset);
|
|
8035
|
+
return D}function l(r){r=r||{};void 0===r.weight&&(r.weight=e.FontWeight.Normal);r.width=r.width||e.FontWidth.Normal;r.slant=r.slant||e.FontSlant.Upright;return r}function t(r){if(!r||!r.length)return X;for(var D=[],U=0;U<r.length;U++){var ea=x(r[U]);D.push(ea);}return v(D,"HEAPU32")}function x(r){if(O[r])return O[r];var D=na(r)+1,U=e._malloc(D);oa(r,J,U,D);return O[r]=U}function C(r){r._colorPtr=y(r.color);r._foregroundColorPtr=X;r._backgroundColorPtr=X;r._decorationColorPtr=X;r.foregroundColor&&
|
|
8036
|
+
(r._foregroundColorPtr=y(r.foregroundColor,P));r.backgroundColor&&(r._backgroundColorPtr=y(r.backgroundColor,Y));r.decorationColor&&(r._decorationColorPtr=y(r.decorationColor,ba));Array.isArray(r.fontFamilies)&&r.fontFamilies.length?(r._fontFamiliesPtr=t(r.fontFamilies),r._fontFamiliesLen=r.fontFamilies.length):(r._fontFamiliesPtr=X,r._fontFamiliesLen=0);if(r.locale){var D=r.locale;r._localePtr=x(D);r._localeLen=na(D);}else r._localePtr=X,r._localeLen=0;if(Array.isArray(r.shadows)&&r.shadows.length){D=
|
|
8037
|
+
r.shadows;var U=D.map(function(fa){return fa.color||e.BLACK}),ea=D.map(function(fa){return fa.blurRadius||0});r._shadowLen=D.length;for(var la=e._malloc(8*D.length),ta=la/4,xa=0;xa<D.length;xa++){var Da=D[xa].offset||[0,0];e.HEAPF32[ta]=Da[0];e.HEAPF32[ta+1]=Da[1];ta+=2;}r._shadowColorsPtr=E(U).te;r._shadowOffsetsPtr=la;r._shadowBlurRadiiPtr=v(ea,"HEAPF32");}else r._shadowLen=0,r._shadowColorsPtr=X,r._shadowOffsetsPtr=X,r._shadowBlurRadiiPtr=X;Array.isArray(r.fontFeatures)&&r.fontFeatures.length?(D=
|
|
8038
|
+
r.fontFeatures,U=D.map(function(fa){return fa.name}),ea=D.map(function(fa){return fa.value}),r._fontFeatureLen=D.length,r._fontFeatureNamesPtr=t(U),r._fontFeatureValuesPtr=v(ea,"HEAPU32")):(r._fontFeatureLen=0,r._fontFeatureNamesPtr=X,r._fontFeatureValuesPtr=X);Array.isArray(r.fontVariations)&&r.fontVariations.length?(D=r.fontVariations,U=D.map(function(fa){return fa.axis}),ea=D.map(function(fa){return fa.value}),r._fontVariationLen=D.length,r._fontVariationAxesPtr=t(U),r._fontVariationValuesPtr=
|
|
8039
|
+
v(ea,"HEAPF32")):(r._fontVariationLen=0,r._fontVariationAxesPtr=X,r._fontVariationValuesPtr=X);}function K(r){e._free(r._fontFamiliesPtr);e._free(r._shadowColorsPtr);e._free(r._shadowOffsetsPtr);e._free(r._shadowBlurRadiiPtr);e._free(r._fontFeatureNamesPtr);e._free(r._fontFeatureValuesPtr);e._free(r._fontVariationAxesPtr);e._free(r._fontVariationValuesPtr);}e.Paragraph.prototype.getRectsForRange=function(r,D,U,ea){r=this._getRectsForRange(r,D,U,ea);return g(r)};e.Paragraph.prototype.getRectsForPlaceholders=
|
|
8040
|
+
function(){var r=this._getRectsForPlaceholders();return g(r)};e.Paragraph.prototype.getGlyphInfoAt=function(r){return d(this._getGlyphInfoAt(r))};e.Paragraph.prototype.getClosestGlyphInfoAtCoordinate=function(r,D){return d(this._getClosestGlyphInfoAtCoordinate(r,D))};e.TypefaceFontProvider.prototype.registerFont=function(r,D){r=e.Typeface.MakeTypefaceFromData(r);if(!r)return null;D=x(D);this._registerFont(r,D);r.delete();};e.ParagraphStyle=function(r){r.disableHinting=r.disableHinting||false;if(r.ellipsis){var D=
|
|
8041
|
+
r.ellipsis;r._ellipsisPtr=x(D);r._ellipsisLen=na(D);}else r._ellipsisPtr=X,r._ellipsisLen=0;null==r.heightMultiplier&&(r.heightMultiplier=-1);r.maxLines=r.maxLines||0;r.replaceTabCharacters=r.replaceTabCharacters||false;D=(D=r.strutStyle)||{};D.strutEnabled=D.strutEnabled||false;D.strutEnabled&&Array.isArray(D.fontFamilies)&&D.fontFamilies.length?(D._fontFamiliesPtr=t(D.fontFamilies),D._fontFamiliesLen=D.fontFamilies.length):(D._fontFamiliesPtr=X,D._fontFamiliesLen=0);D.fontStyle=l(D.fontStyle);null==D.fontSize&&
|
|
8042
|
+
(D.fontSize=-1);null==D.heightMultiplier&&(D.heightMultiplier=-1);D.halfLeading=D.halfLeading||false;D.leading=D.leading||0;D.forceStrutHeight=D.forceStrutHeight||false;r.strutStyle=D;r.textAlign=r.textAlign||e.TextAlign.Start;r.textDirection=r.textDirection||e.TextDirection.LTR;r.textHeightBehavior=r.textHeightBehavior||e.TextHeightBehavior.All;r.textStyle=e.TextStyle(r.textStyle);r.applyRoundingHack=false!==r.applyRoundingHack;return r};e.TextStyle=function(r){r.color||(r.color=e.BLACK);r.decoration=r.decoration||
|
|
8043
|
+
0;r.decorationThickness=r.decorationThickness||0;r.decorationStyle=r.decorationStyle||e.DecorationStyle.Solid;r.textBaseline=r.textBaseline||e.TextBaseline.Alphabetic;null==r.fontSize&&(r.fontSize=-1);r.letterSpacing=r.letterSpacing||0;r.wordSpacing=r.wordSpacing||0;null==r.heightMultiplier&&(r.heightMultiplier=-1);r.halfLeading=r.halfLeading||false;r.fontStyle=l(r.fontStyle);return r};var O={},P=e._malloc(16),Y=e._malloc(16),ba=e._malloc(16);e.ParagraphBuilder.Make=function(r,D){C(r.textStyle);D=e.ParagraphBuilder._Make(r,
|
|
8044
|
+
D);K(r.textStyle);return D};e.ParagraphBuilder.MakeFromFontProvider=function(r,D){C(r.textStyle);D=e.ParagraphBuilder._MakeFromFontProvider(r,D);K(r.textStyle);return D};e.ParagraphBuilder.MakeFromFontCollection=function(r,D){C(r.textStyle);D=e.ParagraphBuilder._MakeFromFontCollection(r,D);K(r.textStyle);return D};e.ParagraphBuilder.ShapeText=function(r,D,U){let ea=0;for(const la of D)ea+=la.length;if(ea!==r.length)throw "Accumulated block lengths must equal text.length";return e.ParagraphBuilder._ShapeText(r,
|
|
8045
|
+
D,U)};e.ParagraphBuilder.prototype.pushStyle=function(r){C(r);this._pushStyle(r);K(r);};e.ParagraphBuilder.prototype.pushPaintStyle=function(r,D,U){C(r);this._pushPaintStyle(r,D,U);K(r);};e.ParagraphBuilder.prototype.addPlaceholder=function(r,D,U,ea,la){U=U||e.PlaceholderAlignment.Baseline;ea=ea||e.TextBaseline.Alphabetic;this._addPlaceholder(r||0,D||0,U,ea,la||0);};e.ParagraphBuilder.prototype.setWordsUtf8=function(r){var D=v(r,"HEAPU32");this._setWordsUtf8(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setWordsUtf16=
|
|
8046
|
+
function(r){var D=v(r,"HEAPU32");this._setWordsUtf16(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setGraphemeBreaksUtf8=function(r){var D=v(r,"HEAPU32");this._setGraphemeBreaksUtf8(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setGraphemeBreaksUtf16=function(r){var D=v(r,"HEAPU32");this._setGraphemeBreaksUtf16(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setLineBreaksUtf8=function(r){var D=v(r,"HEAPU32");this._setLineBreaksUtf8(D,r&&r.length||0);p(D,r);};e.ParagraphBuilder.prototype.setLineBreaksUtf16=
|
|
8047
|
+
function(r){var D=v(r,"HEAPU32");this._setLineBreaksUtf16(D,r&&r.length||0);p(D,r);};});})(w);a.ke=a.ke||[];a.ke.push(function(){a.Path.prototype.op=function(e,d){return this._op(e,d)?this:null};a.Path.prototype.simplify=function(){return this._simplify()?this:null};});a.ke=a.ke||[];a.ke.push(function(){a.Canvas.prototype.drawText=function(e,d,g,l,t){var x=na(e),C=a._malloc(x+1);oa(e,J,C,x+1);this._drawSimpleText(C,x,d,g,t,l);a._free(C);};a.Canvas.prototype.drawGlyphs=function(e,d,g,l,t,x){if(!(2*e.length<=
|
|
8048
|
+
d.length))throw "Not enough positions for the array of gyphs";a.de(this.be);const C=v(e,"HEAPU16"),K=v(d,"HEAPF32");this._drawGlyphs(e.length,C,K,g,l,t,x);p(K,d);p(C,e);};a.Font.prototype.getGlyphBounds=function(e,d,g){var l=v(e,"HEAPU16"),t=a._malloc(16*e.length);this._getGlyphWidthBounds(l,e.length,X,t,d||null);d=new Float32Array(a.HEAPU8.buffer,t,4*e.length);p(l,e);if(g)return g.set(d),a._free(t),g;e=Float32Array.from(d);a._free(t);return e};a.Font.prototype.getGlyphIDs=function(e,d,g){d||(d=e.length);
|
|
8049
|
+
var l=na(e)+1,t=a._malloc(l);oa(e,J,t,l);e=a._malloc(2*d);d=this._getGlyphIDs(t,l-1,d,e);a._free(t);if(0>d)return a._free(e),null;t=new Uint16Array(a.HEAPU8.buffer,e,d);if(g)return g.set(t),a._free(e),g;g=Uint16Array.from(t);a._free(e);return g};a.Font.prototype.getGlyphIntercepts=function(e,d,g,l){var t=v(e,"HEAPU16"),x=v(d,"HEAPF32");return this._getGlyphIntercepts(t,e.length,!(e&&e._ck),x,d.length,!(d&&d._ck),g,l)};a.Font.prototype.getGlyphWidths=function(e,d,g){var l=v(e,"HEAPU16"),t=a._malloc(4*
|
|
8050
|
+
e.length);this._getGlyphWidthBounds(l,e.length,t,X,d||null);d=new Float32Array(a.HEAPU8.buffer,t,e.length);p(l,e);if(g)return g.set(d),a._free(t),g;e=Float32Array.from(d);a._free(t);return e};a.FontMgr.FromData=function(){if(!arguments.length)return null;var e=arguments;1===e.length&&Array.isArray(e[0])&&(e=arguments[0]);if(!e.length)return null;for(var d=[],g=[],l=0;l<e.length;l++){var t=new Uint8Array(e[l]),x=v(t,"HEAPU8");d.push(x);g.push(t.byteLength);}d=v(d,"HEAPU32");g=v(g,"HEAPU32");e=a.FontMgr._fromData(d,
|
|
8051
|
+
g,e.length);a._free(d);a._free(g);return e};a.Typeface.MakeTypefaceFromData=function(e){e=new Uint8Array(e);var d=v(e,"HEAPU8");return (e=a.Typeface._MakeTypefaceFromData(d,e.byteLength))?e:null};a.Typeface.MakeFreeTypeFaceFromData=a.Typeface.MakeTypefaceFromData;a.Typeface.prototype.getGlyphIDs=function(e,d,g){d||(d=e.length);var l=na(e)+1,t=a._malloc(l);oa(e,J,t,l);e=a._malloc(2*d);d=this._getGlyphIDs(t,l-1,d,e);a._free(t);if(0>d)return a._free(e),null;t=new Uint16Array(a.HEAPU8.buffer,e,d);if(g)return g.set(t),
|
|
8052
|
+
a._free(e),g;g=Uint16Array.from(t);a._free(e);return g};a.TextBlob.MakeOnPath=function(e,d,g,l){if(e&&e.length&&d&&d.countPoints()){if(1===d.countPoints())return this.MakeFromText(e,g);l||(l=0);var t=g.getGlyphIDs(e);t=g.getGlyphWidths(t);var x=[];d=new a.ContourMeasureIter(d,false,1);for(var C=d.next(),K=new Float32Array(4),O=0;O<e.length&&C;O++){var P=t[O];l+=P/2;if(l>C.length()){C.delete();C=d.next();if(!C){e=e.substring(0,O);break}l=P/2;}C.getPosTan(l,K);var Y=K[2],ba=K[3];x.push(Y,ba,K[0]-P/2*Y,
|
|
8053
|
+
K[1]-P/2*ba);l+=P/2;}e=this.MakeFromRSXform(e,x,g);C&&C.delete();d.delete();return e}};a.TextBlob.MakeFromRSXform=function(e,d,g){var l=na(e)+1,t=a._malloc(l);oa(e,J,t,l);e=v(d,"HEAPF32");g=a.TextBlob._MakeFromRSXform(t,l-1,e,g);a._free(t);return g?g:null};a.TextBlob.MakeFromRSXformGlyphs=function(e,d,g){var l=v(e,"HEAPU16");d=v(d,"HEAPF32");g=a.TextBlob._MakeFromRSXformGlyphs(l,2*e.length,d,g);p(l,e);return g?g:null};a.TextBlob.MakeFromGlyphs=function(e,d){var g=v(e,"HEAPU16");d=a.TextBlob._MakeFromGlyphs(g,
|
|
8054
|
+
2*e.length,d);p(g,e);return d?d:null};a.TextBlob.MakeFromText=function(e,d){var g=na(e)+1,l=a._malloc(g);oa(e,J,l,g);e=a.TextBlob._MakeFromText(l,g-1,d);a._free(l);return e?e:null};a.MallocGlyphIDs=function(e){return a.Malloc(Uint16Array,e)};});a.ke=a.ke||[];a.ke.push(function(){a.MakePicture=function(e){e=new Uint8Array(e);var d=a._malloc(e.byteLength);a.HEAPU8.set(e,d);return (e=a._MakePicture(d,e.byteLength))?e:null};});a.ke=a.ke||[];a.ke.push(function(){a.RuntimeEffect.Make=function(e,d){return a.RuntimeEffect._Make(e,
|
|
8055
|
+
{onError:d||function(g){console.log("RuntimeEffect error",g);}})};a.RuntimeEffect.MakeForBlender=function(e,d){return a.RuntimeEffect._MakeForBlender(e,{onError:d||function(g){console.log("RuntimeEffect error",g);}})};a.RuntimeEffect.prototype.makeShader=function(e,d){var g=!e._ck,l=v(e,"HEAPF32");d=G(d);return this._makeShader(l,4*e.length,g,d)};a.RuntimeEffect.prototype.makeShaderWithChildren=function(e,d,g){var l=!e._ck,t=v(e,"HEAPF32");g=G(g);for(var x=[],C=0;C<d.length;C++)x.push(d[C].ae.ie);d=
|
|
8056
|
+
v(x,"HEAPU32");return this._makeShaderWithChildren(t,4*e.length,l,d,x.length,g)};a.RuntimeEffect.prototype.makeBlender=function(e){var d=!e._ck,g=v(e,"HEAPF32");return this._makeBlender(g,4*e.length,d)};});(function(){function e(I){for(var k=0;k<I.length;k++)if(void 0!==I[k]&&!Number.isFinite(I[k]))return false;return true}function d(I){var k=a.getColorComponents(I);I=k[0];var q=k[1],z=k[2];k=k[3];if(1===k)return I=I.toString(16).toLowerCase(),q=q.toString(16).toLowerCase(),z=z.toString(16).toLowerCase(),
|
|
8057
|
+
I=1===I.length?"0"+I:I,q=1===q.length?"0"+q:q,z=1===z.length?"0"+z:z,"#"+I+q+z;k=0===k||1===k?k:k.toFixed(8);return "rgba("+I+", "+q+", "+z+", "+k+")"}function g(I){return a.parseColorString(I,xa)}function l(I){I=Da.exec(I);if(!I)return null;var k=parseFloat(I[4]),q=16;switch(I[5]){case "em":case "rem":q=16*k;break;case "pt":q=4*k/3;break;case "px":q=k;break;case "pc":q=16*k;break;case "in":q=96*k;break;case "cm":q=96*k/2.54;break;case "mm":q=96/25.4*k;break;case "q":q=96/25.4/4*k;break;case "%":q=
|
|
8058
|
+
16/75*k;}return {style:I[1],variant:I[2],weight:I[3],sizePx:q,family:I[6].trim()}}function t(){fa||(fa={"Noto Mono":{"*":a.Typeface.GetDefault()},monospace:{"*":a.Typeface.GetDefault()}});}function x(I){this.ce=I;this.fe=new a.Paint;this.fe.setAntiAlias(true);this.fe.setStrokeMiter(10);this.fe.setStrokeCap(a.StrokeCap.Butt);this.fe.setStrokeJoin(a.StrokeJoin.Miter);this.kf="10px monospace";this.Fe=new a.Font(a.Typeface.GetDefault(),10);this.Fe.setSubpixel(true);this.se=this.ye=a.BLACK;this.Oe=0;this.af=
|
|
8059
|
+
a.TRANSPARENT;this.Qe=this.Pe=0;this.bf=this.Be=1;this.$e=0;this.Ne=[];this.ee=a.BlendMode.SrcOver;this.fe.setStrokeWidth(this.bf);this.fe.setBlendMode(this.ee);this.he=new a.Path;this.je=a.Matrix.identity();this.Ff=[];this.Ue=[];this.Ee=function(){this.he.delete();this.fe.delete();this.Fe.delete();this.Ue.forEach(function(k){k.Ee();});};Object.defineProperty(this,"currentTransform",{enumerable:true,get:function(){return {a:this.je[0],c:this.je[1],e:this.je[2],b:this.je[3],d:this.je[4],f:this.je[5]}},
|
|
8060
|
+
set:function(k){k.a&&this.setTransform(k.a,k.b,k.c,k.d,k.e,k.f);}});Object.defineProperty(this,"fillStyle",{enumerable:true,get:function(){return f(this.se)?d(this.se):this.se},set:function(k){"string"===typeof k?this.se=g(k):k.Me&&(this.se=k);}});Object.defineProperty(this,"font",{enumerable:true,get:function(){return this.kf},set:function(k){var q=l(k);var z=(q.style||"normal")+"|"+(q.variant||"normal")+"|"+(q.weight||"normal");var A=q.family;t();z=fa[A]?fa[A][z]||fa[A]["*"]:a.Typeface.GetDefault();q.typeface=
|
|
8061
|
+
z;q&&(this.Fe.setSize(q.sizePx),this.Fe.setTypeface(q.typeface),this.kf=k);}});Object.defineProperty(this,"globalAlpha",{enumerable:true,get:function(){return this.Be},set:function(k){!isFinite(k)||0>k||1<k||(this.Be=k);}});Object.defineProperty(this,"globalCompositeOperation",{enumerable:true,get:function(){switch(this.ee){case a.BlendMode.SrcOver:return "source-over";case a.BlendMode.DstOver:return "destination-over";case a.BlendMode.Src:return "copy";case a.BlendMode.Dst:return "destination";case a.BlendMode.Clear:return "clear";
|
|
8062
|
+
case a.BlendMode.SrcIn:return "source-in";case a.BlendMode.DstIn:return "destination-in";case a.BlendMode.SrcOut:return "source-out";case a.BlendMode.DstOut:return "destination-out";case a.BlendMode.SrcATop:return "source-atop";case a.BlendMode.DstATop:return "destination-atop";case a.BlendMode.Xor:return "xor";case a.BlendMode.Plus:return "lighter";case a.BlendMode.Multiply:return "multiply";case a.BlendMode.Screen:return "screen";case a.BlendMode.Overlay:return "overlay";case a.BlendMode.Darken:return "darken";
|
|
8063
|
+
case a.BlendMode.Lighten:return "lighten";case a.BlendMode.ColorDodge:return "color-dodge";case a.BlendMode.ColorBurn:return "color-burn";case a.BlendMode.HardLight:return "hard-light";case a.BlendMode.SoftLight:return "soft-light";case a.BlendMode.Difference:return "difference";case a.BlendMode.Exclusion:return "exclusion";case a.BlendMode.Hue:return "hue";case a.BlendMode.Saturation:return "saturation";case a.BlendMode.Color:return "color";case a.BlendMode.Luminosity:return "luminosity"}},set:function(k){switch(k){case "source-over":this.ee=
|
|
8064
|
+
a.BlendMode.SrcOver;break;case "destination-over":this.ee=a.BlendMode.DstOver;break;case "copy":this.ee=a.BlendMode.Src;break;case "destination":this.ee=a.BlendMode.Dst;break;case "clear":this.ee=a.BlendMode.Clear;break;case "source-in":this.ee=a.BlendMode.SrcIn;break;case "destination-in":this.ee=a.BlendMode.DstIn;break;case "source-out":this.ee=a.BlendMode.SrcOut;break;case "destination-out":this.ee=a.BlendMode.DstOut;break;case "source-atop":this.ee=a.BlendMode.SrcATop;break;case "destination-atop":this.ee=
|
|
8065
|
+
a.BlendMode.DstATop;break;case "xor":this.ee=a.BlendMode.Xor;break;case "lighter":this.ee=a.BlendMode.Plus;break;case "plus-lighter":this.ee=a.BlendMode.Plus;break;case "plus-darker":throw "plus-darker is not supported";case "multiply":this.ee=a.BlendMode.Multiply;break;case "screen":this.ee=a.BlendMode.Screen;break;case "overlay":this.ee=a.BlendMode.Overlay;break;case "darken":this.ee=a.BlendMode.Darken;break;case "lighten":this.ee=a.BlendMode.Lighten;break;case "color-dodge":this.ee=a.BlendMode.ColorDodge;
|
|
8066
|
+
break;case "color-burn":this.ee=a.BlendMode.ColorBurn;break;case "hard-light":this.ee=a.BlendMode.HardLight;break;case "soft-light":this.ee=a.BlendMode.SoftLight;break;case "difference":this.ee=a.BlendMode.Difference;break;case "exclusion":this.ee=a.BlendMode.Exclusion;break;case "hue":this.ee=a.BlendMode.Hue;break;case "saturation":this.ee=a.BlendMode.Saturation;break;case "color":this.ee=a.BlendMode.Color;break;case "luminosity":this.ee=a.BlendMode.Luminosity;break;default:return}this.fe.setBlendMode(this.ee);}});
|
|
8067
|
+
Object.defineProperty(this,"imageSmoothingEnabled",{enumerable:true,get:function(){return true},set:function(){}});Object.defineProperty(this,"imageSmoothingQuality",{enumerable:true,get:function(){return "high"},set:function(){}});Object.defineProperty(this,"lineCap",{enumerable:true,get:function(){switch(this.fe.getStrokeCap()){case a.StrokeCap.Butt:return "butt";case a.StrokeCap.Round:return "round";case a.StrokeCap.Square:return "square"}},set:function(k){switch(k){case "butt":this.fe.setStrokeCap(a.StrokeCap.Butt);
|
|
8068
|
+
break;case "round":this.fe.setStrokeCap(a.StrokeCap.Round);break;case "square":this.fe.setStrokeCap(a.StrokeCap.Square);}}});Object.defineProperty(this,"lineDashOffset",{enumerable:true,get:function(){return this.$e},set:function(k){isFinite(k)&&(this.$e=k);}});Object.defineProperty(this,"lineJoin",{enumerable:true,get:function(){switch(this.fe.getStrokeJoin()){case a.StrokeJoin.Miter:return "miter";case a.StrokeJoin.Round:return "round";case a.StrokeJoin.Bevel:return "bevel"}},set:function(k){switch(k){case "miter":this.fe.setStrokeJoin(a.StrokeJoin.Miter);
|
|
8069
|
+
break;case "round":this.fe.setStrokeJoin(a.StrokeJoin.Round);break;case "bevel":this.fe.setStrokeJoin(a.StrokeJoin.Bevel);}}});Object.defineProperty(this,"lineWidth",{enumerable:true,get:function(){return this.fe.getStrokeWidth()},set:function(k){0>=k||!k||(this.bf=k,this.fe.setStrokeWidth(k));}});Object.defineProperty(this,"miterLimit",{enumerable:true,get:function(){return this.fe.getStrokeMiter()},set:function(k){0>=k||!k||this.fe.setStrokeMiter(k);}});Object.defineProperty(this,"shadowBlur",{enumerable:true,
|
|
8070
|
+
get:function(){return this.Oe},set:function(k){0>k||!isFinite(k)||(this.Oe=k);}});Object.defineProperty(this,"shadowColor",{enumerable:true,get:function(){return d(this.af)},set:function(k){this.af=g(k);}});Object.defineProperty(this,"shadowOffsetX",{enumerable:true,get:function(){return this.Pe},set:function(k){isFinite(k)&&(this.Pe=k);}});Object.defineProperty(this,"shadowOffsetY",{enumerable:true,get:function(){return this.Qe},set:function(k){isFinite(k)&&(this.Qe=k);}});Object.defineProperty(this,"strokeStyle",
|
|
8071
|
+
{enumerable:true,get:function(){return d(this.ye)},set:function(k){"string"===typeof k?this.ye=g(k):k.Me&&(this.ye=k);}});this.arc=function(k,q,z,A,F,H){D(this.he,k,q,z,z,0,A,F,H);};this.arcTo=function(k,q,z,A,F){Y(this.he,k,q,z,A,F);};this.beginPath=function(){this.he.delete();this.he=new a.Path;};this.bezierCurveTo=function(k,q,z,A,F,H){var N=this.he;e([k,q,z,A,F,H])&&(N.isEmpty()&&N.moveTo(k,q),N.cubicTo(k,q,z,A,F,H));};this.clearRect=function(k,q,z,A){this.fe.setStyle(a.PaintStyle.Fill);this.fe.setBlendMode(a.BlendMode.Clear);
|
|
8072
|
+
this.ce.drawRect(a.XYWHRect(k,q,z,A),this.fe);this.fe.setBlendMode(this.ee);};this.clip=function(k,q){"string"===typeof k?(q=k,k=this.he):k&&k.vf&&(k=k.le);k||(k=this.he);k=k.copy();q&&"evenodd"===q.toLowerCase()?k.setFillType(a.FillType.EvenOdd):k.setFillType(a.FillType.Winding);this.ce.clipPath(k,a.ClipOp.Intersect,true);k.delete();};this.closePath=function(){ba(this.he);};this.createImageData=function(){if(1===arguments.length){var k=arguments[0];return new O(new Uint8ClampedArray(4*k.width*k.height),
|
|
8073
|
+
k.width,k.height)}if(2===arguments.length){k=arguments[0];var q=arguments[1];return new O(new Uint8ClampedArray(4*k*q),k,q)}throw "createImageData expects 1 or 2 arguments, got "+arguments.length;};this.createLinearGradient=function(k,q,z,A){if(e(arguments)){var F=new P(k,q,z,A);this.Ue.push(F);return F}};this.createPattern=function(k,q){k=new la(k,q);this.Ue.push(k);return k};this.createRadialGradient=function(k,q,z,A,F,H){if(e(arguments)){var N=new ta(k,q,z,A,F,H);this.Ue.push(N);return N}};this.drawImage=
|
|
8074
|
+
function(k){k instanceof K&&(k=k.Lf());var q=this.jf();if(3===arguments.length||5===arguments.length)var z=a.XYWHRect(arguments[1],arguments[2],arguments[3]||k.width(),arguments[4]||k.height()),A=a.XYWHRect(0,0,k.width(),k.height());else if(9===arguments.length)z=a.XYWHRect(arguments[5],arguments[6],arguments[7],arguments[8]),A=a.XYWHRect(arguments[1],arguments[2],arguments[3],arguments[4]);else throw "invalid number of args for drawImage, need 3, 5, or 9; got "+arguments.length;this.ce.drawImageRect(k,
|
|
8075
|
+
A,z,q,false);q.dispose();};this.ellipse=function(k,q,z,A,F,H,N,V){D(this.he,k,q,z,A,F,H,N,V);};this.jf=function(){var k=this.fe.copy();k.setStyle(a.PaintStyle.Fill);if(f(this.se)){var q=a.multiplyByAlpha(this.se,this.Be);k.setColor(q);}else q=this.se.Me(this.je),k.setColor(a.Color(0,0,0,this.Be)),k.setShader(q);k.dispose=function(){this.delete();};return k};this.fill=function(k,q){"string"===typeof k?(q=k,k=this.he):k&&k.vf&&(k=k.le);if("evenodd"===q)this.he.setFillType(a.FillType.EvenOdd);else {if("nonzero"!==
|
|
8076
|
+
q&&q)throw "invalid fill rule";this.he.setFillType(a.FillType.Winding);}k||(k=this.he);q=this.jf();var z=this.Re(q);z&&(this.ce.save(),this.Ke(),this.ce.drawPath(k,z),this.ce.restore(),z.dispose());this.ce.drawPath(k,q);q.dispose();};this.fillRect=function(k,q,z,A){var F=this.jf(),H=this.Re(F);H&&(this.ce.save(),this.Ke(),this.ce.drawRect(a.XYWHRect(k,q,z,A),H),this.ce.restore(),H.dispose());this.ce.drawRect(a.XYWHRect(k,q,z,A),F);F.dispose();};this.fillText=function(k,q,z){var A=this.jf();k=a.TextBlob.MakeFromText(k,
|
|
8077
|
+
this.Fe);var F=this.Re(A);F&&(this.ce.save(),this.Ke(),this.ce.drawTextBlob(k,q,z,F),this.ce.restore(),F.dispose());this.ce.drawTextBlob(k,q,z,A);k.delete();A.dispose();};this.getImageData=function(k,q,z,A){return (k=this.ce.readPixels(k,q,{width:z,height:A,colorType:a.ColorType.RGBA_8888,alphaType:a.AlphaType.Unpremul,colorSpace:a.ColorSpace.SRGB}))?new O(new Uint8ClampedArray(k.buffer),z,A):null};this.getLineDash=function(){return this.Ne.slice()};this.Gf=function(k){var q=a.Matrix.invert(this.je);
|
|
8078
|
+
a.Matrix.mapPoints(q,k);return k};this.isPointInPath=function(k,q,z){var A=arguments;if(3===A.length)var F=this.he;else if(4===A.length)F=A[0],k=A[1],q=A[2],z=A[3];else throw "invalid arg count, need 3 or 4, got "+A.length;if(!isFinite(k)||!isFinite(q))return false;z=z||"nonzero";if("nonzero"!==z&&"evenodd"!==z)return false;A=this.Gf([k,q]);k=A[0];q=A[1];F.setFillType("nonzero"===z?a.FillType.Winding:a.FillType.EvenOdd);return F.contains(k,q)};this.isPointInStroke=function(k,q){var z=arguments;if(2===z.length)var A=
|
|
8079
|
+
this.he;else if(3===z.length)A=z[0],k=z[1],q=z[2];else throw "invalid arg count, need 2 or 3, got "+z.length;if(!isFinite(k)||!isFinite(q))return false;z=this.Gf([k,q]);k=z[0];q=z[1];A=A.copy();A.setFillType(a.FillType.Winding);A.stroke({width:this.lineWidth,miter_limit:this.miterLimit,cap:this.fe.getStrokeCap(),join:this.fe.getStrokeJoin(),precision:.3});z=A.contains(k,q);A.delete();return z};this.lineTo=function(k,q){U(this.he,k,q);};this.measureText=function(k){k=this.Fe.getGlyphIDs(k);k=this.Fe.getGlyphWidths(k);
|
|
8080
|
+
let q=0;for(const z of k)q+=z;return {width:q}};this.moveTo=function(k,q){var z=this.he;e([k,q])&&z.moveTo(k,q);};this.putImageData=function(k,q,z,A,F,H,N){if(e([q,z,A,F,H,N]))if(void 0===A)this.ce.writePixels(k.data,k.width,k.height,q,z);else if(A=A||0,F=F||0,H=H||k.width,N=N||k.height,0>H&&(A+=H,H=Math.abs(H)),0>N&&(F+=N,N=Math.abs(N)),0>A&&(H+=A,A=0),0>F&&(N+=F,F=0),!(0>=H||0>=N)){k=a.MakeImage({width:k.width,height:k.height,alphaType:a.AlphaType.Unpremul,colorType:a.ColorType.RGBA_8888,colorSpace:a.ColorSpace.SRGB},
|
|
8081
|
+
k.data,4*k.width);var V=a.XYWHRect(A,F,H,N);q=a.XYWHRect(q+A,z+F,H,N);z=a.Matrix.invert(this.je);this.ce.save();this.ce.concat(z);this.ce.drawImageRect(k,V,q,null,false);this.ce.restore();k.delete();}};this.quadraticCurveTo=function(k,q,z,A){var F=this.he;e([k,q,z,A])&&(F.isEmpty()&&F.moveTo(k,q),F.quadTo(k,q,z,A));};this.rect=function(k,q,z,A){var F=this.he;k=a.XYWHRect(k,q,z,A);e(k)&&F.addRect(k);};this.resetTransform=function(){this.he.transform(this.je);var k=a.Matrix.invert(this.je);this.ce.concat(k);
|
|
8082
|
+
this.je=this.ce.getTotalMatrix();};this.restore=function(){var k=this.Ff.pop();if(k){var q=a.Matrix.multiply(this.je,a.Matrix.invert(k.ag));this.he.transform(q);this.fe.delete();this.fe=k.sg;this.Ne=k.qg;this.bf=k.Eg;this.ye=k.Dg;this.se=k.fs;this.Pe=k.Bg;this.Qe=k.Cg;this.Oe=k.sb;this.af=k.Ag;this.Be=k.ga;this.ee=k.hg;this.$e=k.rg;this.kf=k.gg;this.ce.restore();this.je=this.ce.getTotalMatrix();}};this.rotate=function(k){if(isFinite(k)){var q=a.Matrix.rotated(-k);this.he.transform(q);this.ce.rotate(k/
|
|
8083
|
+
Math.PI*180,0,0);this.je=this.ce.getTotalMatrix();}};this.save=function(){if(this.se.Le){var k=this.se.Le();this.Ue.push(k);}else k=this.se;if(this.ye.Le){var q=this.ye.Le();this.Ue.push(q);}else q=this.ye;this.Ff.push({ag:this.je.slice(),qg:this.Ne.slice(),Eg:this.bf,Dg:q,fs:k,Bg:this.Pe,Cg:this.Qe,sb:this.Oe,Ag:this.af,ga:this.Be,rg:this.$e,hg:this.ee,sg:this.fe.copy(),gg:this.kf});this.ce.save();};this.scale=function(k,q){if(e(arguments)){var z=a.Matrix.scaled(1/k,1/q);this.he.transform(z);this.ce.scale(k,
|
|
8084
|
+
q);this.je=this.ce.getTotalMatrix();}};this.setLineDash=function(k){for(var q=0;q<k.length;q++)if(!isFinite(k[q])||0>k[q])return;1===k.length%2&&Array.prototype.push.apply(k,k);this.Ne=k;};this.setTransform=function(k,q,z,A,F,H){e(arguments)&&(this.resetTransform(),this.transform(k,q,z,A,F,H));};this.Ke=function(){var k=a.Matrix.invert(this.je);this.ce.concat(k);this.ce.concat(a.Matrix.translated(this.Pe,this.Qe));this.ce.concat(this.je);};this.Re=function(k){var q=a.multiplyByAlpha(this.af,this.Be);
|
|
8085
|
+
if(!a.getColorComponents(q)[3]||!(this.Oe||this.Qe||this.Pe))return null;k=k.copy();k.setColor(q);var z=a.MaskFilter.MakeBlur(a.BlurStyle.Normal,this.Oe/2,false);k.setMaskFilter(z);k.dispose=function(){z.delete();this.delete();};return k};this.xf=function(){var k=this.fe.copy();k.setStyle(a.PaintStyle.Stroke);if(f(this.ye)){var q=a.multiplyByAlpha(this.ye,this.Be);k.setColor(q);}else q=this.ye.Me(this.je),k.setColor(a.Color(0,0,0,this.Be)),k.setShader(q);k.setStrokeWidth(this.bf);if(this.Ne.length){var z=
|
|
8086
|
+
a.PathEffect.MakeDash(this.Ne,this.$e);k.setPathEffect(z);}k.dispose=function(){z&&z.delete();this.delete();};return k};this.stroke=function(k){k=k?k.le:this.he;var q=this.xf(),z=this.Re(q);z&&(this.ce.save(),this.Ke(),this.ce.drawPath(k,z),this.ce.restore(),z.dispose());this.ce.drawPath(k,q);q.dispose();};this.strokeRect=function(k,q,z,A){var F=this.xf(),H=this.Re(F);H&&(this.ce.save(),this.Ke(),this.ce.drawRect(a.XYWHRect(k,q,z,A),H),this.ce.restore(),H.dispose());this.ce.drawRect(a.XYWHRect(k,q,z,
|
|
8087
|
+
A),F);F.dispose();};this.strokeText=function(k,q,z){var A=this.xf();k=a.TextBlob.MakeFromText(k,this.Fe);var F=this.Re(A);F&&(this.ce.save(),this.Ke(),this.ce.drawTextBlob(k,q,z,F),this.ce.restore(),F.dispose());this.ce.drawTextBlob(k,q,z,A);k.delete();A.dispose();};this.translate=function(k,q){if(e(arguments)){var z=a.Matrix.translated(-k,-q);this.he.transform(z);this.ce.translate(k,q);this.je=this.ce.getTotalMatrix();}};this.transform=function(k,q,z,A,F,H){k=[k,z,F,q,A,H,0,0,1];q=a.Matrix.invert(k);
|
|
8088
|
+
this.he.transform(q);this.ce.concat(k);this.je=this.ce.getTotalMatrix();};this.addHitRegion=function(){};this.clearHitRegions=function(){};this.drawFocusIfNeeded=function(){};this.removeHitRegion=function(){};this.scrollPathIntoView=function(){};Object.defineProperty(this,"canvas",{value:null,writable:false});}function C(I){this.yf=I;this.be=new x(I.getCanvas());this.lf=[];this.decodeImage=function(k){k=a.MakeImageFromEncoded(k);if(!k)throw "Invalid input";this.lf.push(k);return new K(k)};this.loadFont=
|
|
8089
|
+
function(k,q){k=a.Typeface.MakeTypefaceFromData(k);if(!k)return null;this.lf.push(k);var z=(q.style||"normal")+"|"+(q.variant||"normal")+"|"+(q.weight||"normal");q=q.family;t();fa[q]||(fa[q]={"*":k});fa[q][z]=k;};this.makePath2D=function(k){k=new ea(k);this.lf.push(k.le);return k};this.getContext=function(k){return "2d"===k?this.be:null};this.toDataURL=function(k,q){this.yf.flush();var z=this.yf.makeImageSnapshot();if(z){k=k||"image/png";var A=a.ImageFormat.PNG;"image/jpeg"===k&&(A=a.ImageFormat.JPEG);
|
|
8090
|
+
if(q=z.encodeToBytes(A,q||.92)){z.delete();k="data:"+k+";base64,";if("undefined"!==typeof Buffer)q=Buffer.from(q).toString("base64");else {z=0;A=q.length;for(var F="",H;z<A;)H=q.slice(z,Math.min(z+32768,A)),F+=String.fromCharCode.apply(null,H),z+=32768;q=btoa(F);}return k+q}}};this.dispose=function(){this.be.Ee();this.lf.forEach(function(k){k.delete();});this.yf.dispose();};}function K(I){this.width=I.width();this.height=I.height();this.naturalWidth=this.width;this.naturalHeight=this.height;this.Lf=function(){return I};}
|
|
8091
|
+
function O(I,k,q){if(!k||0===q)throw new TypeError("invalid dimensions, width and height must be non-zero");if(I.length%4)throw new TypeError("arr must be a multiple of 4");q=q||I.length/(4*k);Object.defineProperty(this,"data",{value:I,writable:false});Object.defineProperty(this,"height",{value:q,writable:false});Object.defineProperty(this,"width",{value:k,writable:false});}function P(I,k,q,z){this.ne=null;this.ue=[];this.qe=[];this.addColorStop=function(A,F){if(0>A||1<A||!isFinite(A))throw "offset must be between 0 and 1 inclusively";
|
|
8092
|
+
F=g(F);var H=this.qe.indexOf(A);if(-1!==H)this.ue[H]=F;else {for(H=0;H<this.qe.length&&!(this.qe[H]>A);H++);this.qe.splice(H,0,A);this.ue.splice(H,0,F);}};this.Le=function(){var A=new P(I,k,q,z);A.ue=this.ue.slice();A.qe=this.qe.slice();return A};this.Ee=function(){this.ne&&(this.ne.delete(),this.ne=null);};this.Me=function(A){var F=[I,k,q,z];a.Matrix.mapPoints(A,F);A=F[0];var H=F[1],N=F[2];F=F[3];this.Ee();return this.ne=a.Shader.MakeLinearGradient([A,H],[N,F],this.ue,this.qe,a.TileMode.Clamp)};}function Y(I,
|
|
8093
|
+
k,q,z,A,F){if(e([k,q,z,A,F])){if(0>F)throw "radii cannot be negative";I.isEmpty()&&I.moveTo(k,q);I.arcToTangent(k,q,z,A,F);}}function ba(I){if(!I.isEmpty()){var k=I.getBounds();(k[3]-k[1]||k[2]-k[0])&&I.close();}}function r(I,k,q,z,A,F,H){H=(H-F)/Math.PI*180;F=F/Math.PI*180;k=a.LTRBRect(k-z,q-A,k+z,q+A);1E-5>Math.abs(Math.abs(H)-360)?(q=H/2,I.arcToOval(k,F,q,false),I.arcToOval(k,F+q,q,false)):I.arcToOval(k,F,H,false);}function D(I,k,q,z,A,F,H,N,V){if(e([k,q,z,A,F,H,N])){if(0>z||0>A)throw "radii cannot be negative";
|
|
8094
|
+
var qa=2*Math.PI,cb=H%qa;0>cb&&(cb+=qa);var db=cb-H;H=cb;N+=db;!V&&N-H>=qa?N=H+qa:V&&H-N>=qa?N=H-qa:!V&&H>N?N=H+(qa-(H-N)%qa):V&&H<N&&(N=H-(qa-(N-H)%qa));F?(V=a.Matrix.rotated(F,k,q),F=a.Matrix.rotated(-F,k,q),I.transform(F),r(I,k,q,z,A,H,N),I.transform(V)):r(I,k,q,z,A,H,N);}}function U(I,k,q){e([k,q])&&(I.isEmpty()&&I.moveTo(k,q),I.lineTo(k,q));}function ea(I){this.le=null;this.le="string"===typeof I?a.Path.MakeFromSVGString(I):I&&I.vf?I.le.copy():new a.Path;this.vf=function(){return this.le};this.addPath=
|
|
8095
|
+
function(k,q){q||(q={a:1,c:0,e:0,b:0,d:1,f:0});this.le.addPath(k.le,[q.a,q.c,q.e,q.b,q.d,q.f]);};this.arc=function(k,q,z,A,F,H){D(this.le,k,q,z,z,0,A,F,H);};this.arcTo=function(k,q,z,A,F){Y(this.le,k,q,z,A,F);};this.bezierCurveTo=function(k,q,z,A,F,H){var N=this.le;e([k,q,z,A,F,H])&&(N.isEmpty()&&N.moveTo(k,q),N.cubicTo(k,q,z,A,F,H));};this.closePath=function(){ba(this.le);};this.ellipse=function(k,q,z,A,F,H,N,V){D(this.le,k,q,z,A,F,H,N,V);};this.lineTo=function(k,q){U(this.le,k,q);};this.moveTo=function(k,
|
|
8096
|
+
q){var z=this.le;e([k,q])&&z.moveTo(k,q);};this.quadraticCurveTo=function(k,q,z,A){var F=this.le;e([k,q,z,A])&&(F.isEmpty()&&F.moveTo(k,q),F.quadTo(k,q,z,A));};this.rect=function(k,q,z,A){var F=this.le;k=a.XYWHRect(k,q,z,A);e(k)&&F.addRect(k);};}function la(I,k){this.ne=null;I instanceof K&&(I=I.Lf());this.Uf=I;this._transform=a.Matrix.identity();""===k&&(k="repeat");switch(k){case "repeat-x":this.Se=a.TileMode.Repeat;this.Te=a.TileMode.Decal;break;case "repeat-y":this.Se=a.TileMode.Decal;this.Te=a.TileMode.Repeat;
|
|
8097
|
+
break;case "repeat":this.Te=this.Se=a.TileMode.Repeat;break;case "no-repeat":this.Te=this.Se=a.TileMode.Decal;break;default:throw "invalid repetition mode "+k;}this.setTransform=function(q){q=[q.a,q.c,q.e,q.b,q.d,q.f,0,0,1];e(q)&&(this._transform=q);};this.Le=function(){var q=new la;q.Se=this.Se;q.Te=this.Te;return q};this.Ee=function(){this.ne&&(this.ne.delete(),this.ne=null);};this.Me=function(){this.Ee();return this.ne=this.Uf.makeShaderCubic(this.Se,this.Te,1/3,1/3,this._transform)};}function ta(I,
|
|
8098
|
+
k,q,z,A,F){this.ne=null;this.ue=[];this.qe=[];this.addColorStop=function(H,N){if(0>H||1<H||!isFinite(H))throw "offset must be between 0 and 1 inclusively";N=g(N);var V=this.qe.indexOf(H);if(-1!==V)this.ue[V]=N;else {for(V=0;V<this.qe.length&&!(this.qe[V]>H);V++);this.qe.splice(V,0,H);this.ue.splice(V,0,N);}};this.Le=function(){var H=new ta(I,k,q,z,A,F);H.ue=this.ue.slice();H.qe=this.qe.slice();return H};this.Ee=function(){this.ne&&(this.ne.delete(),this.ne=null);};this.Me=function(H){var N=[I,k,z,A];
|
|
8099
|
+
a.Matrix.mapPoints(H,N);var V=N[0],qa=N[1],cb=N[2];N=N[3];var db=(Math.abs(H[0])+Math.abs(H[4]))/2;H=q*db;db*=F;this.Ee();return this.ne=a.Shader.MakeTwoPointConicalGradient([V,qa],H,[cb,N],db,this.ue,this.qe,a.TileMode.Clamp)};}a._testing={};var xa={aliceblue:Float32Array.of(.941,.973,1,1),antiquewhite:Float32Array.of(.98,.922,.843,1),aqua:Float32Array.of(0,1,1,1),aquamarine:Float32Array.of(.498,1,.831,1),azure:Float32Array.of(.941,1,1,1),beige:Float32Array.of(.961,.961,.863,1),bisque:Float32Array.of(1,
|
|
8100
|
+
.894,.769,1),black:Float32Array.of(0,0,0,1),blanchedalmond:Float32Array.of(1,.922,.804,1),blue:Float32Array.of(0,0,1,1),blueviolet:Float32Array.of(.541,.169,.886,1),brown:Float32Array.of(.647,.165,.165,1),burlywood:Float32Array.of(.871,.722,.529,1),cadetblue:Float32Array.of(.373,.62,.627,1),chartreuse:Float32Array.of(.498,1,0,1),chocolate:Float32Array.of(.824,.412,.118,1),coral:Float32Array.of(1,.498,.314,1),cornflowerblue:Float32Array.of(.392,.584,.929,1),cornsilk:Float32Array.of(1,.973,.863,1),
|
|
8101
|
+
crimson:Float32Array.of(.863,.078,.235,1),cyan:Float32Array.of(0,1,1,1),darkblue:Float32Array.of(0,0,.545,1),darkcyan:Float32Array.of(0,.545,.545,1),darkgoldenrod:Float32Array.of(.722,.525,.043,1),darkgray:Float32Array.of(.663,.663,.663,1),darkgreen:Float32Array.of(0,.392,0,1),darkgrey:Float32Array.of(.663,.663,.663,1),darkkhaki:Float32Array.of(.741,.718,.42,1),darkmagenta:Float32Array.of(.545,0,.545,1),darkolivegreen:Float32Array.of(.333,.42,.184,1),darkorange:Float32Array.of(1,.549,0,1),darkorchid:Float32Array.of(.6,
|
|
8102
|
+
.196,.8,1),darkred:Float32Array.of(.545,0,0,1),darksalmon:Float32Array.of(.914,.588,.478,1),darkseagreen:Float32Array.of(.561,.737,.561,1),darkslateblue:Float32Array.of(.282,.239,.545,1),darkslategray:Float32Array.of(.184,.31,.31,1),darkslategrey:Float32Array.of(.184,.31,.31,1),darkturquoise:Float32Array.of(0,.808,.82,1),darkviolet:Float32Array.of(.58,0,.827,1),deeppink:Float32Array.of(1,.078,.576,1),deepskyblue:Float32Array.of(0,.749,1,1),dimgray:Float32Array.of(.412,.412,.412,1),dimgrey:Float32Array.of(.412,
|
|
8103
|
+
.412,.412,1),dodgerblue:Float32Array.of(.118,.565,1,1),firebrick:Float32Array.of(.698,.133,.133,1),floralwhite:Float32Array.of(1,.98,.941,1),forestgreen:Float32Array.of(.133,.545,.133,1),fuchsia:Float32Array.of(1,0,1,1),gainsboro:Float32Array.of(.863,.863,.863,1),ghostwhite:Float32Array.of(.973,.973,1,1),gold:Float32Array.of(1,.843,0,1),goldenrod:Float32Array.of(.855,.647,.125,1),gray:Float32Array.of(.502,.502,.502,1),green:Float32Array.of(0,.502,0,1),greenyellow:Float32Array.of(.678,1,.184,1),grey:Float32Array.of(.502,
|
|
8104
|
+
.502,.502,1),honeydew:Float32Array.of(.941,1,.941,1),hotpink:Float32Array.of(1,.412,.706,1),indianred:Float32Array.of(.804,.361,.361,1),indigo:Float32Array.of(.294,0,.51,1),ivory:Float32Array.of(1,1,.941,1),khaki:Float32Array.of(.941,.902,.549,1),lavender:Float32Array.of(.902,.902,.98,1),lavenderblush:Float32Array.of(1,.941,.961,1),lawngreen:Float32Array.of(.486,.988,0,1),lemonchiffon:Float32Array.of(1,.98,.804,1),lightblue:Float32Array.of(.678,.847,.902,1),lightcoral:Float32Array.of(.941,.502,.502,
|
|
8105
|
+
1),lightcyan:Float32Array.of(.878,1,1,1),lightgoldenrodyellow:Float32Array.of(.98,.98,.824,1),lightgray:Float32Array.of(.827,.827,.827,1),lightgreen:Float32Array.of(.565,.933,.565,1),lightgrey:Float32Array.of(.827,.827,.827,1),lightpink:Float32Array.of(1,.714,.757,1),lightsalmon:Float32Array.of(1,.627,.478,1),lightseagreen:Float32Array.of(.125,.698,.667,1),lightskyblue:Float32Array.of(.529,.808,.98,1),lightslategray:Float32Array.of(.467,.533,.6,1),lightslategrey:Float32Array.of(.467,.533,.6,1),lightsteelblue:Float32Array.of(.69,
|
|
8106
|
+
.769,.871,1),lightyellow:Float32Array.of(1,1,.878,1),lime:Float32Array.of(0,1,0,1),limegreen:Float32Array.of(.196,.804,.196,1),linen:Float32Array.of(.98,.941,.902,1),magenta:Float32Array.of(1,0,1,1),maroon:Float32Array.of(.502,0,0,1),mediumaquamarine:Float32Array.of(.4,.804,.667,1),mediumblue:Float32Array.of(0,0,.804,1),mediumorchid:Float32Array.of(.729,.333,.827,1),mediumpurple:Float32Array.of(.576,.439,.859,1),mediumseagreen:Float32Array.of(.235,.702,.443,1),mediumslateblue:Float32Array.of(.482,
|
|
8107
|
+
.408,.933,1),mediumspringgreen:Float32Array.of(0,.98,.604,1),mediumturquoise:Float32Array.of(.282,.82,.8,1),mediumvioletred:Float32Array.of(.78,.082,.522,1),midnightblue:Float32Array.of(.098,.098,.439,1),mintcream:Float32Array.of(.961,1,.98,1),mistyrose:Float32Array.of(1,.894,.882,1),moccasin:Float32Array.of(1,.894,.71,1),navajowhite:Float32Array.of(1,.871,.678,1),navy:Float32Array.of(0,0,.502,1),oldlace:Float32Array.of(.992,.961,.902,1),olive:Float32Array.of(.502,.502,0,1),olivedrab:Float32Array.of(.42,
|
|
8108
|
+
.557,.137,1),orange:Float32Array.of(1,.647,0,1),orangered:Float32Array.of(1,.271,0,1),orchid:Float32Array.of(.855,.439,.839,1),palegoldenrod:Float32Array.of(.933,.91,.667,1),palegreen:Float32Array.of(.596,.984,.596,1),paleturquoise:Float32Array.of(.686,.933,.933,1),palevioletred:Float32Array.of(.859,.439,.576,1),papayawhip:Float32Array.of(1,.937,.835,1),peachpuff:Float32Array.of(1,.855,.725,1),peru:Float32Array.of(.804,.522,.247,1),pink:Float32Array.of(1,.753,.796,1),plum:Float32Array.of(.867,.627,
|
|
8109
|
+
.867,1),powderblue:Float32Array.of(.69,.878,.902,1),purple:Float32Array.of(.502,0,.502,1),rebeccapurple:Float32Array.of(.4,.2,.6,1),red:Float32Array.of(1,0,0,1),rosybrown:Float32Array.of(.737,.561,.561,1),royalblue:Float32Array.of(.255,.412,.882,1),saddlebrown:Float32Array.of(.545,.271,.075,1),salmon:Float32Array.of(.98,.502,.447,1),sandybrown:Float32Array.of(.957,.643,.376,1),seagreen:Float32Array.of(.18,.545,.341,1),seashell:Float32Array.of(1,.961,.933,1),sienna:Float32Array.of(.627,.322,.176,1),
|
|
8110
|
+
silver:Float32Array.of(.753,.753,.753,1),skyblue:Float32Array.of(.529,.808,.922,1),slateblue:Float32Array.of(.416,.353,.804,1),slategray:Float32Array.of(.439,.502,.565,1),slategrey:Float32Array.of(.439,.502,.565,1),snow:Float32Array.of(1,.98,.98,1),springgreen:Float32Array.of(0,1,.498,1),steelblue:Float32Array.of(.275,.51,.706,1),tan:Float32Array.of(.824,.706,.549,1),teal:Float32Array.of(0,.502,.502,1),thistle:Float32Array.of(.847,.749,.847,1),tomato:Float32Array.of(1,.388,.278,1),transparent:Float32Array.of(0,
|
|
8111
|
+
0,0,0),turquoise:Float32Array.of(.251,.878,.816,1),violet:Float32Array.of(.933,.51,.933,1),wheat:Float32Array.of(.961,.871,.702,1),white:Float32Array.of(1,1,1,1),whitesmoke:Float32Array.of(.961,.961,.961,1),yellow:Float32Array.of(1,1,0,1),yellowgreen:Float32Array.of(.604,.804,.196,1)};a._testing.parseColor=g;a._testing.colorToString=d;var Da=RegExp("(italic|oblique|normal|)\\s*(small-caps|normal|)\\s*(bold|bolder|lighter|[1-9]00|normal|)\\s*([\\d\\.]+)(px|pt|pc|in|cm|mm|%|em|ex|ch|rem|q)(.+)"),fa;
|
|
8112
|
+
a._testing.parseFontString=l;a.MakeCanvas=function(I,k){return (I=a.MakeSurface(I,k))?new C(I):null};a.ImageData=function(){if(2===arguments.length){var I=arguments[0],k=arguments[1];return new O(new Uint8ClampedArray(4*I*k),I,k)}if(3===arguments.length){var q=arguments[0];if(q.prototype.constructor!==Uint8ClampedArray)throw new TypeError("bytes must be given as a Uint8ClampedArray");I=arguments[1];k=arguments[2];if(q%4)throw new TypeError("bytes must be given in a multiple of 4");if(q%I)throw new TypeError("bytes must divide evenly by width");
|
|
8113
|
+
if(k&&k!==q/(4*I))throw new TypeError("invalid height given");return new O(q,I,q/(4*I))}throw new TypeError("invalid number of arguments - takes 2 or 3, saw "+arguments.length);};})();})(w);var ra=Object.assign({},w),ua="./this.program",va=(a,b)=>{throw b;},wa="object"==typeof window,ya="function"==typeof importScripts,za="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,Aa="",Ba,Ea,Fa;
|
|
8114
|
+
if(za){var fs=require$$0,Ga=require$$1;Aa=ya?Ga.dirname(Aa)+"/":__dirname+"/";Ba=(a,b)=>{a=a.startsWith("file://")?new URL(a):Ga.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};Fa=a=>{a=Ba(a,true);a.buffer||(a=new Uint8Array(a));return a};Ea=(a,b,c,f=true)=>{a=a.startsWith("file://")?new URL(a):Ga.normalize(a);fs.readFile(a,f?void 0:"utf8",(h,m)=>{h?c(h):b(f?m.buffer:m);});};!w.thisProgram&&1<process.argv.length&&(ua=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);va=(a,b)=>{process.exitCode=
|
|
8115
|
+
a;throw b;};w.inspect=()=>"[Emscripten Module object]";}else if(wa||ya)ya?Aa=self.location.href:"undefined"!=typeof document&&document.currentScript&&(Aa=document.currentScript.src),_scriptDir&&(Aa=_scriptDir),0!==Aa.indexOf("blob:")?Aa=Aa.substr(0,Aa.replace(/[?#].*/,"").lastIndexOf("/")+1):Aa="",Ba=a=>{var b=new XMLHttpRequest;b.open("GET",a,false);b.send(null);return b.responseText},ya&&(Fa=a=>{var b=new XMLHttpRequest;b.open("GET",a,false);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),
|
|
8116
|
+
Ea=(a,b,c)=>{var f=new XMLHttpRequest;f.open("GET",a,true);f.responseType="arraybuffer";f.onload=()=>{200==f.status||0==f.status&&f.response?b(f.response):c();};f.onerror=c;f.send(null);};var Ha=w.print||console.log.bind(console),Ia=w.printErr||console.error.bind(console);Object.assign(w,ra);ra=null;w.thisProgram&&(ua=w.thisProgram);w.quit&&(va=w.quit);var Ja;w.wasmBinary&&(Ja=w.wasmBinary);w.noExitRuntime||true;"object"!=typeof WebAssembly&&Ka("no native wasm support detected");
|
|
8117
|
+
var La,Ma,Na=false,Qa,J,Ra,Sa,Q,Ta,R,Ua;function Wa(){var a=La.buffer;w.HEAP8=Qa=new Int8Array(a);w.HEAP16=Ra=new Int16Array(a);w.HEAP32=Q=new Int32Array(a);w.HEAPU8=J=new Uint8Array(a);w.HEAPU16=Sa=new Uint16Array(a);w.HEAPU32=Ta=new Uint32Array(a);w.HEAPF32=R=new Float32Array(a);w.HEAPF64=Ua=new Float64Array(a);}var Xa,Ya=[],Za=[],$a=[];function ab(){var a=w.preRun.shift();Ya.unshift(a);}var eb=0,gb=null;
|
|
8118
|
+
function Ka(a){if(w.onAbort)w.onAbort(a);a="Aborted("+a+")";Ia(a);Na=true;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ca(a);throw a;}function hb(a){return a.startsWith("data:application/octet-stream;base64,")}var mb;mb="canvaskit.wasm";if(!hb(mb)){var nb=mb;mb=w.locateFile?w.locateFile(nb,Aa):Aa+nb;}function ob(a){if(a==mb&&Ja)return new Uint8Array(Ja);if(Fa)return Fa(a);throw "both async and sync fetching of the wasm failed";}
|
|
8119
|
+
function pb(a){if(!Ja&&(wa||ya)){if("function"==typeof fetch&&!a.startsWith("file://"))return fetch(a,{credentials:"same-origin"}).then(b=>{if(!b.ok)throw "failed to load wasm binary file at '"+a+"'";return b.arrayBuffer()}).catch(()=>ob(a));if(Ea)return new Promise((b,c)=>{Ea(a,f=>b(new Uint8Array(f)),c);})}return Promise.resolve().then(()=>ob(a))}function qb(a,b,c){return pb(a).then(f=>WebAssembly.instantiate(f,b)).then(f=>f).then(c,f=>{Ia("failed to asynchronously prepare wasm: "+f);Ka(f);})}
|
|
8120
|
+
function rb(a,b){var c=mb;return Ja||"function"!=typeof WebAssembly.instantiateStreaming||hb(c)||c.startsWith("file://")||za||"function"!=typeof fetch?qb(c,a,b):fetch(c,{credentials:"same-origin"}).then(f=>WebAssembly.instantiateStreaming(f,a).then(b,function(h){Ia("wasm streaming compile failed: "+h);Ia("falling back to ArrayBuffer instantiation");return qb(c,a,b)}))}function sb(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a;}
|
|
8121
|
+
var tb=a=>{for(;0<a.length;)a.shift()(w);},ub="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,vb=(a,b,c)=>{var f=b+c;for(c=b;a[c]&&!(c>=f);)++c;if(16<c-b&&a.buffer&&ub)return ub.decode(a.subarray(b,c));for(f="";b<c;){var h=a[b++];if(h&128){var m=a[b++]&63;if(192==(h&224))f+=String.fromCharCode((h&31)<<6|m);else {var u=a[b++]&63;h=224==(h&240)?(h&15)<<12|m<<6|u:(h&7)<<18|m<<12|u<<6|a[b++]&63;65536>h?f+=String.fromCharCode(h):(h-=65536,f+=String.fromCharCode(55296|h>>10,56320|h&1023));}}else f+=
|
|
8122
|
+
String.fromCharCode(h);}return f},wb={};function xb(a){for(;a.length;){var b=a.pop();a.pop()(b);}}function yb(a){return this.fromWireType(Q[a>>2])}var zb={},Bb={},Cb={},Db=void 0;function Eb(a){throw new Db(a);}
|
|
8123
|
+
function Fb(a,b,c){function f(n){n=c(n);n.length!==a.length&&Eb("Mismatched type converter count");for(var p=0;p<a.length;++p)Gb(a[p],n[p]);}a.forEach(function(n){Cb[n]=b;});var h=Array(b.length),m=[],u=0;b.forEach((n,p)=>{Bb.hasOwnProperty(n)?h[p]=Bb[n]:(m.push(n),zb.hasOwnProperty(n)||(zb[n]=[]),zb[n].push(()=>{h[p]=Bb[n];++u;u===m.length&&f(h);}));});0===m.length&&f(h);}
|
|
8124
|
+
function Hb(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(`Unknown type size: ${a}`);}}var Ib=void 0;function Jb(a){for(var b="";J[a];)b+=Ib[J[a++]];return b}var Kb=void 0;function W(a){throw new Kb(a);}
|
|
8125
|
+
function Lb(a,b,c={}){var f=b.name;a||W(`type "${f}" must have a positive integer typeid pointer`);if(Bb.hasOwnProperty(a)){if(c.ng)return;W(`Cannot register type '${f}' twice`);}Bb[a]=b;delete Cb[a];zb.hasOwnProperty(a)&&(b=zb[a],delete zb[a],b.forEach(h=>h()));}function Gb(a,b,c={}){if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");Lb(a,b,c);}function Mb(a){W(a.ae.me.ge.name+" instance already deleted");}var Nb=false;function Ob(){}
|
|
8126
|
+
function Pb(a){--a.count.value;0===a.count.value&&(a.pe?a.we.De(a.pe):a.me.ge.De(a.ie));}function Qb(a,b,c){if(b===c)return a;if(void 0===c.re)return null;a=Qb(a,b,c.re);return null===a?null:c.dg(a)}var Rb={},Sb=[];function Tb(){for(;Sb.length;){var a=Sb.pop();a.ae.Xe=false;a["delete"]();}}var Ub=void 0,Vb={};function Wb(a,b){for(void 0===b&&W("ptr should not be undefined");a.re;)b=a.gf(b),a=a.re;return Vb[b]}
|
|
8127
|
+
function cc(a,b){b.me&&b.ie||Eb("makeClassHandle requires ptr and ptrType");!!b.we!==!!b.pe&&Eb("Both smartPtrType and smartPtr must be specified");b.count={value:1};return dc(Object.create(a,{ae:{value:b}}))}function dc(a){if("undefined"===typeof FinalizationRegistry)return dc=b=>b,a;Nb=new FinalizationRegistry(b=>{Pb(b.ae);});dc=b=>{var c=b.ae;c.pe&&Nb.register(b,{ae:c},b);return b};Ob=b=>{Nb.unregister(b);};return dc(a)}function ec(){}
|
|
8128
|
+
function fc(a){if(void 0===a)return "_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a}function gc(a,b){a=fc(a);return {[a]:function(){return b.apply(this,arguments)}}[a]}
|
|
8129
|
+
function hc(a,b,c){if(void 0===a[b].oe){var f=a[b];a[b]=function(){a[b].oe.hasOwnProperty(arguments.length)||W(`Function '${c}' called with an invalid number of arguments (${arguments.length}) - expects one of (${a[b].oe})!`);return a[b].oe[arguments.length].apply(this,arguments)};a[b].oe=[];a[b].oe[f.Ve]=f;}}
|
|
8130
|
+
function ic(a,b,c){w.hasOwnProperty(a)?((void 0===c||void 0!==w[a].oe&&void 0!==w[a].oe[c])&&W(`Cannot register public name '${a}' twice`),hc(w,a,a),w.hasOwnProperty(c)&&W(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`),w[a].oe[c]=b):(w[a]=b,void 0!==c&&(w[a].Lg=c));}function jc(a,b,c,f,h,m,u,n){this.name=a;this.constructor=b;this.Ye=c;this.De=f;this.re=h;this.ig=m;this.gf=u;this.dg=n;this.ug=[];}
|
|
8131
|
+
function kc(a,b,c){for(;b!==c;)b.gf||W(`Expected null or instance of ${c.name}, got an instance of ${b.name}`),a=b.gf(a),b=b.re;return a}function lc(a,b){if(null===b)return this.Bf&&W(`null is not a valid ${this.name}`),0;b.ae||W(`Cannot pass "${mc(b)}" as a ${this.name}`);b.ae.ie||W(`Cannot pass deleted object as a pointer of type ${this.name}`);return kc(b.ae.ie,b.ae.me.ge,this.ge)}
|
|
8132
|
+
function nc(a,b){if(null===b){this.Bf&&W(`null is not a valid ${this.name}`);if(this.pf){var c=this.Cf();null!==a&&a.push(this.De,c);return c}return 0}b.ae||W(`Cannot pass "${mc(b)}" as a ${this.name}`);b.ae.ie||W(`Cannot pass deleted object as a pointer of type ${this.name}`);!this.nf&&b.ae.me.nf&&W(`Cannot convert argument of type ${b.ae.we?b.ae.we.name:b.ae.me.name} to parameter type ${this.name}`);c=kc(b.ae.ie,b.ae.me.ge,this.ge);if(this.pf)switch(void 0===b.ae.pe&&W("Passing raw pointer to smart pointer is illegal"),
|
|
8133
|
+
this.zg){case 0:b.ae.we===this?c=b.ae.pe:W(`Cannot convert argument of type ${b.ae.we?b.ae.we.name:b.ae.me.name} to parameter type ${this.name}`);break;case 1:c=b.ae.pe;break;case 2:if(b.ae.we===this)c=b.ae.pe;else {var f=b.clone();c=this.vg(c,oc(function(){f["delete"]();}));null!==a&&a.push(this.De,c);}break;default:W("Unsupporting sharing policy");}return c}
|
|
8134
|
+
function pc(a,b){if(null===b)return this.Bf&&W(`null is not a valid ${this.name}`),0;b.ae||W(`Cannot pass "${mc(b)}" as a ${this.name}`);b.ae.ie||W(`Cannot pass deleted object as a pointer of type ${this.name}`);b.ae.me.nf&&W(`Cannot convert argument of type ${b.ae.me.name} to parameter type ${this.name}`);return kc(b.ae.ie,b.ae.me.ge,this.ge)}
|
|
8135
|
+
function qc(a,b,c,f,h,m,u,n,p,v,E){this.name=a;this.ge=b;this.Bf=c;this.nf=f;this.pf=h;this.tg=m;this.zg=u;this.Nf=n;this.Cf=p;this.vg=v;this.De=E;h||void 0!==b.re?this.toWireType=nc:(this.toWireType=f?lc:pc,this.ve=null);}function rc(a,b,c){w.hasOwnProperty(a)||Eb("Replacing nonexistant public symbol");void 0!==w[a].oe&&void 0!==c?w[a].oe[c]=b:(w[a]=b,w[a].Ve=c);}
|
|
8136
|
+
var sc=(a,b)=>{var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes("j")){var f=w["dynCall_"+a];f=c&&c.length?f.apply(null,[b].concat(c)):f.call(null,b);}else f=Xa.get(b).apply(null,c);return f}};function tc(a,b){a=Jb(a);var c=a.includes("j")?sc(a,b):Xa.get(b);"function"!=typeof c&&W(`unknown function pointer with signature ${a}: ${b}`);return c}var uc=void 0;function vc(a){a=wc(a);var b=Jb(a);xc(a);return b}
|
|
8137
|
+
function yc(a,b){function c(m){h[m]||Bb[m]||(Cb[m]?Cb[m].forEach(c):(f.push(m),h[m]=true));}var f=[],h={};b.forEach(c);throw new uc(`${a}: `+f.map(vc).join([", "]));}
|
|
8138
|
+
function Fc(a,b,c,f,h){var m=b.length;2>m&&W("argTypes array size mismatch! Must at least get return value and 'this' types!");var u=null!==b[1]&&null!==c,n=false;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].ve){n=true;break}var p="void"!==b[0].name,v=m-2,E=Array(v),G=[],L=[];return function(){arguments.length!==v&&W(`function ${a} called with ${arguments.length} arguments, expected ${v} args!`);L.length=0;G.length=u?2:1;G[0]=h;if(u){var y=b[1].toWireType(L,this);G[1]=y;}for(var M=0;M<v;++M)E[M]=
|
|
8139
|
+
b[M+2].toWireType(L,arguments[M]),G.push(E[M]);M=f.apply(null,G);if(n)xb(L);else for(var T=u?1:2;T<b.length;T++){var S=1===T?y:E[T-2];null!==b[T].ve&&b[T].ve(S);}y=p?b[0].fromWireType(M):void 0;return y}}function Gc(a,b){for(var c=[],f=0;f<a;f++)c.push(Ta[b+4*f>>2]);return c}function Hc(){this.Ce=[void 0];this.Kf=[];}var Ic=new Hc;function Jc(a){a>=Ic.df&&0===--Ic.get(a).Of&&Ic.Zf(a);}
|
|
8140
|
+
var Kc=a=>{a||W("Cannot use deleted val. handle = "+a);return Ic.get(a).value},oc=a=>{switch(a){case void 0:return 1;case null:return 2;case true:return 3;case false:return 4;default:return Ic.Yf({Of:1,value:a})}};function Lc(a,b,c){switch(b){case 0:return function(f){return this.fromWireType((c?Qa:J)[f])};case 1:return function(f){return this.fromWireType((c?Ra:Sa)[f>>1])};case 2:return function(f){return this.fromWireType((c?Q:Ta)[f>>2])};default:throw new TypeError("Unknown integer type: "+a);}}
|
|
8141
|
+
function Mc(a,b){var c=Bb[a];void 0===c&&W(b+" has unknown type "+vc(a));return c}function mc(a){if(null===a)return "null";var b=typeof a;return "object"===b||"array"===b||"function"===b?a.toString():""+a}function Nc(a,b){switch(b){case 2:return function(c){return this.fromWireType(R[c>>2])};case 3:return function(c){return this.fromWireType(Ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}
|
|
8142
|
+
function Oc(a,b,c){switch(b){case 0:return c?function(f){return Qa[f]}:function(f){return J[f]};case 1:return c?function(f){return Ra[f>>1]}:function(f){return Sa[f>>1]};case 2:return c?function(f){return Q[f>>2]}:function(f){return Ta[f>>2]};default:throw new TypeError("Unknown integer type: "+a);}}
|
|
8143
|
+
var oa=(a,b,c,f)=>{if(!(0<f))return 0;var h=c;f=c+f-1;for(var m=0;m<a.length;++m){var u=a.charCodeAt(m);if(55296<=u&&57343>=u){var n=a.charCodeAt(++m);u=65536+((u&1023)<<10)|n&1023;}if(127>=u){if(c>=f)break;b[c++]=u;}else {if(2047>=u){if(c+1>=f)break;b[c++]=192|u>>6;}else {if(65535>=u){if(c+2>=f)break;b[c++]=224|u>>12;}else {if(c+3>=f)break;b[c++]=240|u>>18;b[c++]=128|u>>12&63;}b[c++]=128|u>>6&63;}b[c++]=128|u&63;}}b[c]=0;return c-h},na=a=>{for(var b=0,c=0;c<a.length;++c){var f=a.charCodeAt(c);127>=f?b++:2047>=
|
|
8144
|
+
f?b+=2:55296<=f&&57343>=f?(b+=4,++c):b+=3;}return b},Pc="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0,Qc=(a,b)=>{var c=a>>1;for(var f=c+b/2;!(c>=f)&&Sa[c];)++c;c<<=1;if(32<c-a&&Pc)return Pc.decode(J.subarray(a,c));c="";for(f=0;!(f>=b/2);++f){var h=Ra[a+2*f>>1];if(0==h)break;c+=String.fromCharCode(h);}return c},Rc=(a,b,c)=>{ void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var f=b;c=c<2*a.length?c/2:a.length;for(var h=0;h<c;++h)Ra[b>>1]=a.charCodeAt(h),b+=2;Ra[b>>1]=0;return b-f},
|
|
8145
|
+
Sc=a=>2*a.length,Tc=(a,b)=>{for(var c=0,f="";!(c>=b/4);){var h=Q[a+4*c>>2];if(0==h)break;++c;65536<=h?(h-=65536,f+=String.fromCharCode(55296|h>>10,56320|h&1023)):f+=String.fromCharCode(h);}return f},Uc=(a,b,c)=>{ void 0===c&&(c=2147483647);if(4>c)return 0;var f=b;c=f+c-4;for(var h=0;h<a.length;++h){var m=a.charCodeAt(h);if(55296<=m&&57343>=m){var u=a.charCodeAt(++h);m=65536+((m&1023)<<10)|u&1023;}Q[b>>2]=m;b+=4;if(b+4>c)break}Q[b>>2]=0;return b-f},Vc=a=>{for(var b=0,c=0;c<a.length;++c){var f=a.charCodeAt(c);
|
|
8146
|
+
55296<=f&&57343>=f&&++c;b+=4;}return b},Wc={};function Xc(a){var b=Wc[a];return void 0===b?Jb(a):b}var Yc=[];
|
|
8147
|
+
function Zc(){function a(b){b.$$$embind_global$$$=b;var c="object"==typeof $$$embind_global$$$&&b.$$$embind_global$$$==b;c||delete b.$$$embind_global$$$;return c}if("object"==typeof globalThis)return globalThis;if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;"object"==typeof commonjsGlobal&&a(commonjsGlobal)?$$$embind_global$$$=commonjsGlobal:"object"==typeof self&&a(self)&&($$$embind_global$$$=self);if("object"==typeof $$$embind_global$$$)return $$$embind_global$$$;throw Error("unable to get global object.");
|
|
8148
|
+
}function $c(a){var b=Yc.length;Yc.push(a);return b}function ad(a,b){for(var c=Array(a),f=0;f<a;++f)c[f]=Mc(Ta[b+4*f>>2],"parameter "+f);return c}var bd=[];function cd(a){var b=Array(a+1);return function(c,f,h){b[0]=c;for(var m=0;m<a;++m){var u=Mc(Ta[f+4*m>>2],"parameter "+m);b[m+1]=u.readValueFromPointer(h);h+=u.argPackAdvance;}c=new (c.bind.apply(c,b));return oc(c)}}var dd={};
|
|
8149
|
+
function ed(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,f){b.vertexAttribDivisorANGLE(c,f);},a.drawArraysInstanced=function(c,f,h,m){b.drawArraysInstancedANGLE(c,f,h,m);},a.drawElementsInstanced=function(c,f,h,m,u){b.drawElementsInstancedANGLE(c,f,h,m,u);});}
|
|
8150
|
+
function fd(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c);},a.bindVertexArray=function(c){b.bindVertexArrayOES(c);},a.isVertexArray=function(c){return b.isVertexArrayOES(c)});}function gd(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,f){b.drawBuffersWEBGL(c,f);});}
|
|
8151
|
+
var hd=1,jd=[],kd=[],ld=[],md=[],ha=[],nd=[],od=[],ma=[],pd=[],qd=[],rd=[],sd={},td={},ud=4;function vd(a){wd||(wd=a);}function da(a){for(var b=hd++,c=a.length;c<b;c++)a[c]=null;return b}function ia(a,b){a.df||(a.df=a.getContext,a.getContext=function(f,h){h=a.df(f,h);return "webgl"==f==h instanceof WebGLRenderingContext?h:null});var c=1<b.majorVersion?a.getContext("webgl2",b):a.getContext("webgl",b);return c?xd(c,b):0}
|
|
8152
|
+
function xd(a,b){var c=da(ma),f={handle:c,attributes:b,version:b.majorVersion,xe:a};a.canvas&&(a.canvas.Rf=f);ma[c]=f;("undefined"==typeof b.eg||b.eg)&&yd(f);return c}function ja(a){B=ma[a];w.Jg=Z=B&&B.xe;return !(a&&!Z)}
|
|
8153
|
+
function yd(a){a||(a=B);if(!a.og){a.og=true;var b=a.xe;ed(b);fd(b);gd(b);b.If=b.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");b.Mf=b.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");2<=a.version&&(b.ze=b.getExtension("EXT_disjoint_timer_query_webgl2"));if(2>a.version||!b.ze)b.ze=b.getExtension("EXT_disjoint_timer_query");b.Kg=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c);});}}
|
|
8154
|
+
var B,wd;function zd(a,b){Z.bindFramebuffer(a,ld[b]);}function Ad(a){Z.bindVertexArray(od[a]);}function Bd(a){Z.clear(a);}function Cd(a,b,c,f){Z.clearColor(a,b,c,f);}function Dd(a){Z.clearStencil(a);}function Ed(a,b){for(var c=0;c<a;c++){var f=Q[b+4*c>>2];Z.deleteVertexArray(od[f]);od[f]=null;}}var Fd=[];function Gd(a,b,c,f){Z.drawElements(a,b,c,f);}function Jd(a,b,c,f){for(var h=0;h<a;h++){var m=Z[c](),u=m&&da(f);m?(m.name=u,f[u]=m):vd(1282);Q[b+4*h>>2]=u;}}
|
|
8155
|
+
function Kd(a,b){Jd(a,b,"createVertexArray",od);}function Ld(a,b){Ta[a>>2]=b;Ta[a+4>>2]=(b-Ta[a>>2])/4294967296;}
|
|
8156
|
+
function Md(a,b,c){if(b){var f=void 0;switch(a){case 36346:f=1;break;case 36344:0!=c&&1!=c&&vd(1280);return;case 34814:case 36345:f=0;break;case 34466:var h=Z.getParameter(34467);f=h?h.length:0;break;case 33309:if(2>B.version){vd(1282);return}f=2*(Z.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(2>B.version){vd(1280);return}f=33307==a?3:0;}if(void 0===f)switch(h=Z.getParameter(a),typeof h){case "number":f=h;break;case "boolean":f=h?1:0;break;case "string":vd(1280);return;case "object":if(null===
|
|
8157
|
+
h)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:f=0;break;default:vd(1280);return}else {if(h instanceof Float32Array||h instanceof Uint32Array||h instanceof Int32Array||h instanceof Array){for(a=0;a<h.length;++a)switch(c){case 0:Q[b+4*a>>2]=h[a];break;case 2:R[b+4*a>>2]=h[a];break;case 4:Qa[b+a>>0]=h[a]?1:0;}return}try{f=h.name|
|
|
8158
|
+
0;}catch(m){vd(1280);Ia("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+m+")");return}}break;default:vd(1280);Ia("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+h+" of type "+typeof h+"!");return}switch(c){case 1:Ld(b,f);break;case 0:Q[b>>2]=f;break;case 2:R[b>>2]=f;break;case 4:Qa[b>>0]=f?1:0;}}else vd(1281);}function Nd(a,b){Md(a,b,0);}
|
|
8159
|
+
function Od(a,b,c){if(c){a=pd[a];b=2>B.version?Z.ze.getQueryObjectEXT(a,b):Z.getQueryParameter(a,b);var f;"boolean"==typeof b?f=b?1:0:f=b;Ld(c,f);}else vd(1281);}var Qd=a=>{var b=na(a)+1,c=Pd(b);c&&oa(a,J,c,b);return c};
|
|
8160
|
+
function Rd(a){var b=sd[a];if(!b){switch(a){case 7939:b=Z.getSupportedExtensions()||[];b=b.concat(b.map(function(f){return "GL_"+f}));b=Qd(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=Z.getParameter(a))||vd(1280);b=b&&Qd(b);break;case 7938:b=Z.getParameter(7938);b=2<=B.version?"OpenGL ES 3.0 ("+b+")":"OpenGL ES 2.0 ("+b+")";b=Qd(b);break;case 35724:b=Z.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+
|
|
8161
|
+
c[1]+" ("+b+")");b=Qd(b);break;default:vd(1280);}sd[a]=b;}return b}function Sd(a,b){if(2>B.version)return vd(1282),0;var c=td[a];if(c)return 0>b||b>=c.length?(vd(1281),0):c[b];switch(a){case 7939:return c=Z.getSupportedExtensions()||[],c=c.concat(c.map(function(f){return "GL_"+f})),c=c.map(function(f){return Qd(f)}),c=td[a]=c,0>b||b>=c.length?(vd(1281),0):c[b];default:return vd(1280),0}}function Td(a){return "]"==a.slice(-1)&&a.lastIndexOf("[")}
|
|
8162
|
+
function Ud(a){a-=5120;return 0==a?Qa:1==a?J:2==a?Ra:4==a?Q:6==a?R:5==a||28922==a||28520==a||30779==a||30782==a?Ta:Sa}function Vd(a,b,c,f,h){a=Ud(a);var m=31-Math.clz32(a.BYTES_PER_ELEMENT),u=ud;return a.subarray(h>>m,h+f*(c*({5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[b-6402]||1)*(1<<m)+u-1&-u)>>m)}function Wd(a){var b=Z.bg;if(b){var c=b.ff[a];"number"==typeof c&&(b.ff[a]=c=Z.getUniformLocation(b,b.Pf[a]+(0<c?"["+c+"]":"")));return c}vd(1282);}
|
|
8163
|
+
var Xd=[],Yd=[],Zd={},ae=()=>{if(!$d){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ua||"./this.program"},b;for(b in Zd) void 0===Zd[b]?delete a[b]:a[b]=Zd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);$d=c;}return $d},$d,be=[null,[],[]],ce=a=>0===a%4&&(0!==a%100||0===a%400),de=[31,29,31,30,31,30,31,31,30,31,30,31],ee=[31,28,31,30,31,30,31,31,30,31,30,31];
|
|
8164
|
+
function fe(a){var b=Array(na(a)+1);oa(a,b,0,b.length);return b}
|
|
8165
|
+
var ge=(a,b,c,f)=>{function h(y,M,T){for(y="number"==typeof y?y.toString():y||"";y.length<M;)y=T[0]+y;return y}function m(y,M){return h(y,M,"0")}function u(y,M){function T(sa){return 0>sa?-1:0<sa?1:0}var S;0===(S=T(y.getFullYear()-M.getFullYear()))&&0===(S=T(y.getMonth()-M.getMonth()))&&(S=T(y.getDate()-M.getDate()));return S}function n(y){switch(y.getDay()){case 0:return new Date(y.getFullYear()-1,11,29);case 1:return y;case 2:return new Date(y.getFullYear(),0,3);case 3:return new Date(y.getFullYear(),
|
|
8166
|
+
0,2);case 4:return new Date(y.getFullYear(),0,1);case 5:return new Date(y.getFullYear()-1,11,31);case 6:return new Date(y.getFullYear()-1,11,30)}}function p(y){var M=y.He;for(y=new Date((new Date(y.Ie+1900,0,1)).getTime());0<M;){var T=y.getMonth(),S=(ce(y.getFullYear())?de:ee)[T];if(M>S-y.getDate())M-=S-y.getDate()+1,y.setDate(1),11>T?y.setMonth(T+1):(y.setMonth(0),y.setFullYear(y.getFullYear()+1));else {y.setDate(y.getDate()+M);break}}T=new Date(y.getFullYear()+1,0,4);M=n(new Date(y.getFullYear(),
|
|
8167
|
+
0,4));T=n(T);return 0>=u(M,y)?0>=u(T,y)?y.getFullYear()+1:y.getFullYear():y.getFullYear()-1}var v=Q[f+40>>2];f={Hg:Q[f>>2],Gg:Q[f+4>>2],tf:Q[f+8>>2],Df:Q[f+12>>2],uf:Q[f+16>>2],Ie:Q[f+20>>2],Ae:Q[f+24>>2],He:Q[f+28>>2],Ng:Q[f+32>>2],Fg:Q[f+36>>2],Ig:v?v?vb(J,v):"":""};c=c?vb(J,c):"";v={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y",
|
|
8168
|
+
"%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var E in v)c=c.replace(new RegExp(E,"g"),v[E]);var G="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),L="January February March April May June July August September October November December".split(" ");v={"%a":y=>G[y.Ae].substring(0,3),"%A":y=>G[y.Ae],"%b":y=>L[y.uf].substring(0,3),"%B":y=>L[y.uf],"%C":y=>m((y.Ie+1900)/
|
|
8169
|
+
100|0,2),"%d":y=>m(y.Df,2),"%e":y=>h(y.Df,2," "),"%g":y=>p(y).toString().substring(2),"%G":y=>p(y),"%H":y=>m(y.tf,2),"%I":y=>{y=y.tf;0==y?y=12:12<y&&(y-=12);return m(y,2)},"%j":y=>{for(var M=0,T=0;T<=y.uf-1;M+=(ce(y.Ie+1900)?de:ee)[T++]);return m(y.Df+M,3)},"%m":y=>m(y.uf+1,2),"%M":y=>m(y.Gg,2),"%n":()=>"\n","%p":y=>0<=y.tf&&12>y.tf?"AM":"PM","%S":y=>m(y.Hg,2),"%t":()=>"\t","%u":y=>y.Ae||7,"%U":y=>m(Math.floor((y.He+7-y.Ae)/7),2),"%V":y=>{var M=Math.floor((y.He+7-(y.Ae+6)%7)/7);2>=(y.Ae+371-y.He-
|
|
8170
|
+
2)%7&&M++;if(M)53==M&&(T=(y.Ae+371-y.He)%7,4==T||3==T&&ce(y.Ie)||(M=1));else {M=52;var T=(y.Ae+7-y.He-1)%7;(4==T||5==T&&ce(y.Ie%400-1))&&M++;}return m(M,2)},"%w":y=>y.Ae,"%W":y=>m(Math.floor((y.He+7-(y.Ae+6)%7)/7),2),"%y":y=>(y.Ie+1900).toString().substring(2),"%Y":y=>y.Ie+1900,"%z":y=>{y=y.Fg;var M=0<=y;y=Math.abs(y)/60;return (M?"+":"-")+String("0000"+(y/60*100+y%60)).slice(-4)},"%Z":y=>y.Ig,"%%":()=>"%"};c=c.replace(/%%/g,"\x00\x00");for(E in v)c.includes(E)&&(c=c.replace(new RegExp(E,"g"),v[E](f)));
|
|
8171
|
+
c=c.replace(/\0\0/g,"%");E=fe(c);if(E.length>b)return 0;Qa.set(E,a);return E.length-1};Db=w.InternalError=class extends Error{constructor(a){super(a);this.name="InternalError";}};for(var he=Array(256),ie=0;256>ie;++ie)he[ie]=String.fromCharCode(ie);Ib=he;Kb=w.BindingError=class extends Error{constructor(a){super(a);this.name="BindingError";}};
|
|
8172
|
+
ec.prototype.isAliasOf=function(a){if(!(this instanceof ec&&a instanceof ec))return false;var b=this.ae.me.ge,c=this.ae.ie,f=a.ae.me.ge;for(a=a.ae.ie;b.re;)c=b.gf(c),b=b.re;for(;f.re;)a=f.gf(a),f=f.re;return b===f&&c===a};
|
|
8173
|
+
ec.prototype.clone=function(){this.ae.ie||Mb(this);if(this.ae.ef)return this.ae.count.value+=1,this;var a=dc,b=Object,c=b.create,f=Object.getPrototypeOf(this),h=this.ae;a=a(c.call(b,f,{ae:{value:{count:h.count,Xe:h.Xe,ef:h.ef,ie:h.ie,me:h.me,pe:h.pe,we:h.we}}}));a.ae.count.value+=1;a.ae.Xe=false;return a};ec.prototype["delete"]=function(){this.ae.ie||Mb(this);this.ae.Xe&&!this.ae.ef&&W("Object already scheduled for deletion");Ob(this);Pb(this.ae);this.ae.ef||(this.ae.pe=void 0,this.ae.ie=void 0);};
|
|
8174
|
+
ec.prototype.isDeleted=function(){return !this.ae.ie};ec.prototype.deleteLater=function(){this.ae.ie||Mb(this);this.ae.Xe&&!this.ae.ef&&W("Object already scheduled for deletion");Sb.push(this);1===Sb.length&&Ub&&Ub(Tb);this.ae.Xe=true;return this};w.getInheritedInstanceCount=function(){return Object.keys(Vb).length};w.getLiveInheritedInstances=function(){var a=[],b;for(b in Vb)Vb.hasOwnProperty(b)&&a.push(Vb[b]);return a};w.flushPendingDeletes=Tb;w.setDelayFunction=function(a){Ub=a;Sb.length&&Ub&&Ub(Tb);};
|
|
8175
|
+
qc.prototype.jg=function(a){this.Nf&&(a=this.Nf(a));return a};qc.prototype.Hf=function(a){this.De&&this.De(a);};qc.prototype.argPackAdvance=8;qc.prototype.readValueFromPointer=yb;qc.prototype.deleteObject=function(a){if(null!==a)a["delete"]();};
|
|
8176
|
+
qc.prototype.fromWireType=function(a){function b(){return this.pf?cc(this.ge.Ye,{me:this.tg,ie:c,we:this,pe:a}):cc(this.ge.Ye,{me:this,ie:a})}var c=this.jg(a);if(!c)return this.Hf(a),null;var f=Wb(this.ge,c);if(void 0!==f){if(0===f.ae.count.value)return f.ae.ie=c,f.ae.pe=a,f.clone();f=f.clone();this.Hf(a);return f}f=this.ge.ig(c);f=Rb[f];if(!f)return b.call(this);f=this.nf?f.$f:f.pointerType;var h=Qb(c,this.ge,f.ge);return null===h?b.call(this):this.pf?cc(f.ge.Ye,{me:f,ie:h,we:this,pe:a}):cc(f.ge.Ye,
|
|
8177
|
+
{me:f,ie:h})};uc=w.UnboundTypeError=function(a,b){var c=gc(b,function(f){this.name=b;this.message=f;f=Error(f).stack;void 0!==f&&(this.stack=this.toString()+"\n"+f.replace(/^Error(:[^\n]*)?\n/,""));});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c}(Error,"UnboundTypeError");
|
|
8178
|
+
Object.assign(Hc.prototype,{get(a){return this.Ce[a]},has(a){return void 0!==this.Ce[a]},Yf(a){var b=this.Kf.pop()||this.Ce.length;this.Ce[b]=a;return b},Zf(a){this.Ce[a]=void 0;this.Kf.push(a);}});Ic.Ce.push({value:void 0},{value:null},{value:true},{value:false});Ic.df=Ic.Ce.length;w.count_emval_handles=function(){for(var a=0,b=Ic.df;b<Ic.Ce.length;++b) void 0!==Ic.Ce[b]&&++a;return a};for(var Z,je=0;32>je;++je)Fd.push(Array(je));var ke=new Float32Array(288);
|
|
8179
|
+
for(je=0;288>je;++je)Xd[je]=ke.subarray(0,je+1);var le=new Int32Array(288);for(je=0;288>je;++je)Yd[je]=le.subarray(0,je+1);
|
|
8180
|
+
var De={R:function(){return 0},wb:()=>{},yb:function(){return 0},tb:()=>{},ub:()=>{},S:function(){},vb:()=>{},B:function(a){var b=wb[a];delete wb[a];var c=b.Cf,f=b.De,h=b.Jf,m=h.map(u=>u.mg).concat(h.map(u=>u.xg));Fb([a],m,u=>{var n={};h.forEach((p,v)=>{var E=u[v],G=p.kg,L=p.lg,y=u[v+h.length],M=p.wg,T=p.yg;n[p.fg]={read:S=>E.fromWireType(G(L,S)),write:(S,sa)=>{var pa=[];M(T,S,y.toWireType(pa,sa));xb(pa);}};});return [{name:b.name,fromWireType:function(p){var v={},E;for(E in n)v[E]=n[E].read(p);f(p);
|
|
8181
|
+
return v},toWireType:function(p,v){for(var E in n)if(!(E in v))throw new TypeError(`Missing field: "${E}"`);var G=c();for(E in n)n[E].write(G,v[E]);null!==p&&p.push(f,G);return G},argPackAdvance:8,readValueFromPointer:yb,ve:f}]});},nb:function(){},Cb:function(a,b,c,f,h){var m=Hb(c);b=Jb(b);Gb(a,{name:b,fromWireType:function(u){return !!u},toWireType:function(u,n){return n?f:h},argPackAdvance:8,readValueFromPointer:function(u){if(1===c)var n=Qa;else if(2===c)n=Ra;else if(4===c)n=Q;else throw new TypeError("Unknown boolean type size: "+
|
|
8182
|
+
b);return this.fromWireType(n[u>>m])},ve:null});},n:function(a,b,c,f,h,m,u,n,p,v,E,G,L){E=Jb(E);m=tc(h,m);n&&(n=tc(u,n));v&&(v=tc(p,v));L=tc(G,L);var y=fc(E);ic(y,function(){yc(`Cannot construct ${E} due to unbound types`,[f]);});Fb([a,b,c],f?[f]:[],function(M){M=M[0];if(f){var T=M.ge;var S=T.Ye;}else S=ec.prototype;M=gc(y,function(){if(Object.getPrototypeOf(this)!==sa)throw new Kb("Use 'new' to construct "+E);if(void 0===pa.Ge)throw new Kb(E+" has no accessible constructor");var jb=pa.Ge[arguments.length];
|
|
8183
|
+
if(void 0===jb)throw new Kb(`Tried to invoke ctor of ${E} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(pa.Ge).toString()}) parameters instead!`);return jb.apply(this,arguments)});var sa=Object.create(S,{constructor:{value:M}});M.prototype=sa;var pa=new jc(E,M,sa,L,T,m,n,v);pa.re&&(void 0===pa.re.hf&&(pa.re.hf=[]),pa.re.hf.push(pa));T=new qc(E,pa,true,false,false);S=new qc(E+"*",pa,false,false,false);var ib=new qc(E+" const*",pa,false,true,false);Rb[a]={pointerType:S,$f:ib};rc(y,M);return [T,
|
|
8184
|
+
S,ib]});},f:function(a,b,c,f,h,m,u){var n=Gc(c,f);b=Jb(b);m=tc(h,m);Fb([],[a],function(p){function v(){yc(`Cannot call ${E} due to unbound types`,n);}p=p[0];var E=`${p.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);var G=p.ge.constructor;void 0===G[b]?(v.Ve=c-1,G[b]=v):(hc(G,b,E),G[b].oe[c-1]=v);Fb([],n,function(L){L=[L[0],null].concat(L.slice(1));L=Fc(E,L,null,m,u);void 0===G[b].oe?(L.Ve=c-1,G[b]=L):G[b].oe[c-1]=L;if(p.ge.hf)for(const y of p.ge.hf)y.constructor.hasOwnProperty(b)||(y.constructor[b]=
|
|
8185
|
+
L);return []});return []});},A:function(a,b,c,f,h,m){var u=Gc(b,c);h=tc(f,h);Fb([],[a],function(n){n=n[0];var p=`constructor ${n.name}`;void 0===n.ge.Ge&&(n.ge.Ge=[]);if(void 0!==n.ge.Ge[b-1])throw new Kb(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${n.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);n.ge.Ge[b-1]=()=>{yc(`Cannot construct ${n.name} due to unbound types`,u);};Fb([],u,function(v){v.splice(1,
|
|
8186
|
+
0,null);n.ge.Ge[b-1]=Fc(p,v,null,h,m);return []});return []});},b:function(a,b,c,f,h,m,u,n){var p=Gc(c,f);b=Jb(b);m=tc(h,m);Fb([],[a],function(v){function E(){yc(`Cannot call ${G} due to unbound types`,p);}v=v[0];var G=`${v.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);n&&v.ge.ug.push(b);var L=v.ge.Ye,y=L[b];void 0===y||void 0===y.oe&&y.className!==v.name&&y.Ve===c-2?(E.Ve=c-2,E.className=v.name,L[b]=E):(hc(L,b,G),L[b].oe[c-2]=E);Fb([],p,function(M){M=Fc(G,M,v,m,u);void 0===L[b].oe?(M.Ve=
|
|
8187
|
+
c-2,L[b]=M):L[b].oe[c-2]=M;return []});return []});},t:function(a,b,c){a=Jb(a);Fb([],[b],function(f){f=f[0];w[a]=f.fromWireType(c);return []});},Bb:function(a,b){b=Jb(b);Gb(a,{name:b,fromWireType:function(c){var f=Kc(c);Jc(c);return f},toWireType:function(c,f){return oc(f)},argPackAdvance:8,readValueFromPointer:yb,ve:null});},m:function(a,b,c,f){function h(){}c=Hb(c);b=Jb(b);h.values={};Gb(a,{name:b,constructor:h,fromWireType:function(m){return this.constructor.values[m]},toWireType:function(m,u){return u.value},
|
|
8188
|
+
argPackAdvance:8,readValueFromPointer:Lc(b,c,f),ve:null});ic(b,h);},c:function(a,b,c){var f=Mc(a,"enum");b=Jb(b);a=f.constructor;f=Object.create(f.constructor.prototype,{value:{value:c},constructor:{value:gc(`${f.name}_${b}`,function(){})}});a.values[c]=f;a[b]=f;},U:function(a,b,c){c=Hb(c);b=Jb(b);Gb(a,{name:b,fromWireType:function(f){return f},toWireType:function(f,h){return h},argPackAdvance:8,readValueFromPointer:Nc(b,c),ve:null});},y:function(a,b,c,f,h,m){var u=Gc(b,c);a=Jb(a);h=tc(f,h);ic(a,function(){yc(`Cannot call ${a} due to unbound types`,
|
|
8189
|
+
u);},b-1);Fb([],u,function(n){n=[n[0],null].concat(n.slice(1));rc(a,Fc(a,n,null,h,m),b-1);return []});},E:function(a,b,c,f,h){b=Jb(b);-1===h&&(h=4294967295);h=Hb(c);var m=n=>n;if(0===f){var u=32-8*c;m=n=>n<<u>>>u;}c=b.includes("unsigned")?function(n,p){return p>>>0}:function(n,p){return p};Gb(a,{name:b,fromWireType:m,toWireType:c,argPackAdvance:8,readValueFromPointer:Oc(b,h,0!==f),ve:null});},r:function(a,b,c){function f(m){m>>=2;var u=Ta;return new h(u.buffer,u[m+1],u[m])}var h=[Int8Array,Uint8Array,
|
|
8190
|
+
Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=Jb(c);Gb(a,{name:c,fromWireType:f,argPackAdvance:8,readValueFromPointer:f},{ng:true});},q:function(a,b,c,f,h,m,u,n,p,v,E,G){c=Jb(c);m=tc(h,m);n=tc(u,n);v=tc(p,v);G=tc(E,G);Fb([a],[b],function(L){L=L[0];return [new qc(c,L.ge,false,false,true,L,f,m,n,v,G)]});},T:function(a,b){b=Jb(b);var c="std::string"===b;Gb(a,{name:b,fromWireType:function(f){var h=Ta[f>>2],m=f+4;if(c)for(var u=m,n=0;n<=h;++n){var p=m+n;if(n==h||0==J[p]){u=u?vb(J,u,
|
|
8191
|
+
p-u):"";if(void 0===v)var v=u;else v+=String.fromCharCode(0),v+=u;u=p+1;}}else {v=Array(h);for(n=0;n<h;++n)v[n]=String.fromCharCode(J[m+n]);v=v.join("");}xc(f);return v},toWireType:function(f,h){h instanceof ArrayBuffer&&(h=new Uint8Array(h));var m="string"==typeof h;m||h instanceof Uint8Array||h instanceof Uint8ClampedArray||h instanceof Int8Array||W("Cannot pass non-string to std::string");var u=c&&m?na(h):h.length;var n=Pd(4+u+1),p=n+4;Ta[n>>2]=u;if(c&&m)oa(h,J,p,u+1);else if(m)for(m=0;m<u;++m){var v=
|
|
8192
|
+
h.charCodeAt(m);255<v&&(xc(p),W("String has UTF-16 code units that do not fit in 8 bits"));J[p+m]=v;}else for(m=0;m<u;++m)J[p+m]=h[m];null!==f&&f.push(xc,n);return n},argPackAdvance:8,readValueFromPointer:yb,ve:function(f){xc(f);}});},N:function(a,b,c){c=Jb(c);if(2===b){var f=Qc;var h=Rc;var m=Sc;var u=()=>Sa;var n=1;}else 4===b&&(f=Tc,h=Uc,m=Vc,u=()=>Ta,n=2);Gb(a,{name:c,fromWireType:function(p){for(var v=Ta[p>>2],E=u(),G,L=p+4,y=0;y<=v;++y){var M=p+4+y*b;if(y==v||0==E[M>>n])L=f(L,M-L),void 0===G?G=
|
|
8193
|
+
L:(G+=String.fromCharCode(0),G+=L),L=M+b;}xc(p);return G},toWireType:function(p,v){"string"!=typeof v&&W(`Cannot pass non-string to C++ string type ${c}`);var E=m(v),G=Pd(4+E+b);Ta[G>>2]=E>>n;h(v,G+4,E+b);null!==p&&p.push(xc,G);return G},argPackAdvance:8,readValueFromPointer:yb,ve:function(p){xc(p);}});},C:function(a,b,c,f,h,m){wb[a]={name:Jb(b),Cf:tc(c,f),De:tc(h,m),Jf:[]};},e:function(a,b,c,f,h,m,u,n,p,v){wb[a].Jf.push({fg:Jb(b),mg:c,kg:tc(f,h),lg:m,xg:u,wg:tc(n,p),yg:v});},Db:function(a,b){b=Jb(b);
|
|
8194
|
+
Gb(a,{pg:true,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}});},Ab:()=>true,pb:()=>{throw Infinity;},F:function(a,b,c){a=Kc(a);b=Mc(b,"emval::as");var f=[],h=oc(f);Ta[c>>2]=h;return b.toWireType(f,a)},X:function(a,b,c,f,h){a=Yc[a];b=Kc(b);c=Xc(c);var m=[];Ta[f>>2]=oc(m);return a(b,c,m,h)},x:function(a,b,c,f){a=Yc[a];b=Kc(b);c=Xc(c);a(b,c,null,f);},d:Jc,K:function(a){if(0===a)return oc(Zc());a=Xc(a);return oc(Zc()[a])},u:function(a,b){var c=ad(a,b),f=c[0];b=f.name+"_$"+c.slice(1).map(function(u){return u.name}).join("_")+
|
|
8195
|
+
"$";var h=bd[b];if(void 0!==h)return h;var m=Array(a-1);h=$c((u,n,p,v)=>{for(var E=0,G=0;G<a-1;++G)m[G]=c[G+1].readValueFromPointer(v+E),E+=c[G+1].argPackAdvance;u=u[n].apply(u,m);for(G=0;G<a-1;++G)c[G+1].cg&&c[G+1].cg(m[G]);if(!f.pg)return f.toWireType(p,u)});return bd[b]=h},z:function(a,b){a=Kc(a);b=Kc(b);return oc(a[b])},p:function(a){4<a&&(Ic.get(a).Of+=1);},J:function(a,b,c,f){a=Kc(a);var h=dd[b];h||(h=cd(b),dd[b]=h);return h(a,c,f)},H:function(){return oc([])},g:function(a){return oc(Xc(a))},
|
|
8196
|
+
G:function(){return oc({})},gb:function(a){a=Kc(a);return !a},D:function(a){var b=Kc(a);xb(b);Jc(a);},l:function(a,b,c){a=Kc(a);b=Kc(b);c=Kc(c);a[b]=c;},h:function(a,b){a=Mc(a,"_emval_take_value");a=a.readValueFromPointer(b);return oc(a)},kb:function(){return -52},lb:function(){},a:()=>{Ka("");},zb:()=>performance.now(),sd:function(a){Z.activeTexture(a);},td:function(a,b){Z.attachShader(kd[a],nd[b]);},Yb:function(a,b){Z.beginQuery(a,pd[b]);},Sb:function(a,b){Z.ze.beginQueryEXT(a,pd[b]);},ud:function(a,b,c){Z.bindAttribLocation(kd[a],
|
|
8197
|
+
b,c?vb(J,c):"");},vd:function(a,b){35051==a?Z.zf=b:35052==a&&(Z.We=b);Z.bindBuffer(a,jd[b]);},uc:zd,vc:function(a,b){Z.bindRenderbuffer(a,md[b]);},cc:function(a,b){Z.bindSampler(a,qd[b]);},wd:function(a,b){Z.bindTexture(a,ha[b]);},Pc:Ad,Tc:Ad,Y:function(a,b,c,f){Z.blendColor(a,b,c,f);},Z:function(a){Z.blendEquation(a);},_:function(a,b){Z.blendFunc(a,b);},oc:function(a,b,c,f,h,m,u,n,p,v){Z.blitFramebuffer(a,b,c,f,h,m,u,n,p,v);},$:function(a,b,c,f){2<=B.version?c&&b?Z.bufferData(a,J,f,c,b):Z.bufferData(a,b,
|
|
8198
|
+
f):Z.bufferData(a,c?J.subarray(c,c+b):b,f);},aa:function(a,b,c,f){2<=B.version?c&&Z.bufferSubData(a,b,J,f,c):Z.bufferSubData(a,b,J.subarray(f,f+c));},wc:function(a){return Z.checkFramebufferStatus(a)},ba:Bd,ca:Cd,da:Dd,lc:function(a,b,c,f){return Z.clientWaitSync(rd[a],b,(c>>>0)+4294967296*f)},ea:function(a,b,c,f){Z.colorMask(!!a,!!b,!!c,!!f);},fa:function(a){Z.compileShader(nd[a]);},ga:function(a,b,c,f,h,m,u,n){2<=B.version?Z.We||!u?Z.compressedTexImage2D(a,b,c,f,h,m,u,n):Z.compressedTexImage2D(a,b,
|
|
8199
|
+
c,f,h,m,J,n,u):Z.compressedTexImage2D(a,b,c,f,h,m,n?J.subarray(n,n+u):null);},ha:function(a,b,c,f,h,m,u,n,p){2<=B.version?Z.We||!n?Z.compressedTexSubImage2D(a,b,c,f,h,m,u,n,p):Z.compressedTexSubImage2D(a,b,c,f,h,m,u,J,p,n):Z.compressedTexSubImage2D(a,b,c,f,h,m,u,p?J.subarray(p,p+n):null);},nc:function(a,b,c,f,h){Z.copyBufferSubData(a,b,c,f,h);},ia:function(a,b,c,f,h,m,u,n){Z.copyTexSubImage2D(a,b,c,f,h,m,u,n);},ja:function(){var a=da(kd),b=Z.createProgram();b.name=a;b.sf=b.qf=b.rf=0;b.Ef=1;kd[a]=b;return a},
|
|
8200
|
+
ka:function(a){var b=da(nd);nd[b]=Z.createShader(a);return b},la:function(a){Z.cullFace(a);},ma:function(a,b){for(var c=0;c<a;c++){var f=Q[b+4*c>>2],h=jd[f];h&&(Z.deleteBuffer(h),h.name=0,jd[f]=null,f==Z.zf&&(Z.zf=0),f==Z.We&&(Z.We=0));}},xc:function(a,b){for(var c=0;c<a;++c){var f=Q[b+4*c>>2],h=ld[f];h&&(Z.deleteFramebuffer(h),h.name=0,ld[f]=null);}},na:function(a){if(a){var b=kd[a];b?(Z.deleteProgram(b),b.name=0,kd[a]=null):vd(1281);}},Zb:function(a,b){for(var c=0;c<a;c++){var f=Q[b+4*c>>2],h=pd[f];
|
|
8201
|
+
h&&(Z.deleteQuery(h),pd[f]=null);}},Tb:function(a,b){for(var c=0;c<a;c++){var f=Q[b+4*c>>2],h=pd[f];h&&(Z.ze.deleteQueryEXT(h),pd[f]=null);}},yc:function(a,b){for(var c=0;c<a;c++){var f=Q[b+4*c>>2],h=md[f];h&&(Z.deleteRenderbuffer(h),h.name=0,md[f]=null);}},dc:function(a,b){for(var c=0;c<a;c++){var f=Q[b+4*c>>2],h=qd[f];h&&(Z.deleteSampler(h),h.name=0,qd[f]=null);}},oa:function(a){if(a){var b=nd[a];b?(Z.deleteShader(b),nd[a]=null):vd(1281);}},mc:function(a){if(a){var b=rd[a];b?(Z.deleteSync(b),b.name=
|
|
8202
|
+
0,rd[a]=null):vd(1281);}},pa:function(a,b){for(var c=0;c<a;c++){var f=Q[b+4*c>>2],h=ha[f];h&&(Z.deleteTexture(h),h.name=0,ha[f]=null);}},Qc:Ed,Uc:Ed,qa:function(a){Z.depthMask(!!a);},ra:function(a){Z.disable(a);},sa:function(a){Z.disableVertexAttribArray(a);},ta:function(a,b,c){Z.drawArrays(a,b,c);},Nc:function(a,b,c,f){Z.drawArraysInstanced(a,b,c,f);},Lc:function(a,b,c,f,h){Z.If.drawArraysInstancedBaseInstanceWEBGL(a,b,c,f,h);},Jc:function(a,b){for(var c=Fd[a],f=0;f<a;f++)c[f]=Q[b+4*f>>2];Z.drawBuffers(c);},
|
|
8203
|
+
ua:Gd,Oc:function(a,b,c,f,h){Z.drawElementsInstanced(a,b,c,f,h);},Mc:function(a,b,c,f,h,m,u){Z.If.drawElementsInstancedBaseVertexBaseInstanceWEBGL(a,b,c,f,h,m,u);},Dc:function(a,b,c,f,h,m){Gd(a,f,h,m);},va:function(a){Z.enable(a);},wa:function(a){Z.enableVertexAttribArray(a);},_b:function(a){Z.endQuery(a);},Ub:function(a){Z.ze.endQueryEXT(a);},ic:function(a,b){return (a=Z.fenceSync(a,b))?(b=da(rd),a.name=b,rd[b]=a,b):0},xa:function(){Z.finish();},ya:function(){Z.flush();},zc:function(a,b,c,f){Z.framebufferRenderbuffer(a,
|
|
8204
|
+
b,c,md[f]);},Ac:function(a,b,c,f,h){Z.framebufferTexture2D(a,b,c,ha[f],h);},za:function(a){Z.frontFace(a);},Aa:function(a,b){Jd(a,b,"createBuffer",jd);},Bc:function(a,b){Jd(a,b,"createFramebuffer",ld);},$b:function(a,b){Jd(a,b,"createQuery",pd);},Vb:function(a,b){for(var c=0;c<a;c++){var f=Z.ze.createQueryEXT();if(!f){for(vd(1282);c<a;)Q[b+4*c++>>2]=0;break}var h=da(pd);f.name=h;pd[h]=f;Q[b+4*c>>2]=h;}},Cc:function(a,b){Jd(a,b,"createRenderbuffer",md);},ec:function(a,b){Jd(a,b,"createSampler",qd);},Ba:function(a,
|
|
8205
|
+
b){Jd(a,b,"createTexture",ha);},Rc:Kd,Vc:Kd,qc:function(a){Z.generateMipmap(a);},Ca:function(a,b,c){c?Q[c>>2]=Z.getBufferParameter(a,b):vd(1281);},Da:function(){var a=Z.getError()||wd;wd=0;return a},Ea:function(a,b){Md(a,b,2);},rc:function(a,b,c,f){a=Z.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;Q[f>>2]=a;},Fa:Nd,Ga:function(a,b,c,f){a=Z.getProgramInfoLog(kd[a]);null===a&&(a="(unknown error)");b=0<b&&f?oa(a,J,f,b):0;c&&(Q[c>>2]=b);},Ha:function(a,
|
|
8206
|
+
b,c){if(c)if(a>=hd)vd(1281);else if(a=kd[a],35716==b)a=Z.getProgramInfoLog(a),null===a&&(a="(unknown error)"),Q[c>>2]=a.length+1;else if(35719==b){if(!a.sf)for(b=0;b<Z.getProgramParameter(a,35718);++b)a.sf=Math.max(a.sf,Z.getActiveUniform(a,b).name.length+1);Q[c>>2]=a.sf;}else if(35722==b){if(!a.qf)for(b=0;b<Z.getProgramParameter(a,35721);++b)a.qf=Math.max(a.qf,Z.getActiveAttrib(a,b).name.length+1);Q[c>>2]=a.qf;}else if(35381==b){if(!a.rf)for(b=0;b<Z.getProgramParameter(a,35382);++b)a.rf=Math.max(a.rf,
|
|
8207
|
+
Z.getActiveUniformBlockName(a,b).length+1);Q[c>>2]=a.rf;}else Q[c>>2]=Z.getProgramParameter(a,b);else vd(1281);},Pb:Od,Qb:Od,ac:function(a,b,c){if(c){a=Z.getQueryParameter(pd[a],b);var f;"boolean"==typeof a?f=a?1:0:f=a;Q[c>>2]=f;}else vd(1281);},Wb:function(a,b,c){if(c){a=Z.ze.getQueryObjectEXT(pd[a],b);var f;"boolean"==typeof a?f=a?1:0:f=a;Q[c>>2]=f;}else vd(1281);},bc:function(a,b,c){c?Q[c>>2]=Z.getQuery(a,b):vd(1281);},Xb:function(a,b,c){c?Q[c>>2]=Z.ze.getQueryEXT(a,b):vd(1281);},sc:function(a,b,c){c?
|
|
8208
|
+
Q[c>>2]=Z.getRenderbufferParameter(a,b):vd(1281);},Ia:function(a,b,c,f){a=Z.getShaderInfoLog(nd[a]);null===a&&(a="(unknown error)");b=0<b&&f?oa(a,J,f,b):0;c&&(Q[c>>2]=b);},Mb:function(a,b,c,f){a=Z.getShaderPrecisionFormat(a,b);Q[c>>2]=a.rangeMin;Q[c+4>>2]=a.rangeMax;Q[f>>2]=a.precision;},Ja:function(a,b,c){c?35716==b?(a=Z.getShaderInfoLog(nd[a]),null===a&&(a="(unknown error)"),Q[c>>2]=a?a.length+1:0):35720==b?(a=Z.getShaderSource(nd[a]),Q[c>>2]=a?a.length+1:0):Q[c>>2]=Z.getShaderParameter(nd[a],b):vd(1281);},
|
|
8209
|
+
Ka:Rd,Sc:Sd,La:function(a,b){b=b?vb(J,b):"";if(a=kd[a]){var c=a,f=c.ff,h=c.Qf,m;if(!f)for(c.ff=f={},c.Pf={},m=0;m<Z.getProgramParameter(c,35718);++m){var u=Z.getActiveUniform(c,m);var n=u.name;u=u.size;var p=Td(n);p=0<p?n.slice(0,p):n;var v=c.Ef;c.Ef+=u;h[p]=[u,v];for(n=0;n<u;++n)f[v]=n,c.Pf[v++]=p;}c=a.ff;f=0;h=b;m=Td(b);0<m&&(f=parseInt(b.slice(m+1))>>>0,h=b.slice(0,m));if((h=a.Qf[h])&&f<h[0]&&(f+=h[1],c[f]=c[f]||Z.getUniformLocation(a,b)))return f}else vd(1281);return -1},Nb:function(a,b,c){for(var f=
|
|
8210
|
+
Fd[b],h=0;h<b;h++)f[h]=Q[c+4*h>>2];Z.invalidateFramebuffer(a,f);},Ob:function(a,b,c,f,h,m,u){for(var n=Fd[b],p=0;p<b;p++)n[p]=Q[c+4*p>>2];Z.invalidateSubFramebuffer(a,n,f,h,m,u);},jc:function(a){return Z.isSync(rd[a])},Ma:function(a){return (a=ha[a])?Z.isTexture(a):0},Na:function(a){Z.lineWidth(a);},Oa:function(a){a=kd[a];Z.linkProgram(a);a.ff=0;a.Qf={};},Hc:function(a,b,c,f,h,m){Z.Mf.multiDrawArraysInstancedBaseInstanceWEBGL(a,Q,b>>2,Q,c>>2,Q,f>>2,Ta,h>>2,m);},Ic:function(a,b,c,f,h,m,u,n){Z.Mf.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL(a,
|
|
8211
|
+
Q,b>>2,c,Q,f>>2,Q,h>>2,Q,m>>2,Ta,u>>2,n);},Pa:function(a,b){3317==a&&(ud=b);Z.pixelStorei(a,b);},Rb:function(a,b){Z.ze.queryCounterEXT(pd[a],b);},Kc:function(a){Z.readBuffer(a);},Qa:function(a,b,c,f,h,m,u){if(2<=B.version)if(Z.zf)Z.readPixels(a,b,c,f,h,m,u);else {var n=Ud(m);Z.readPixels(a,b,c,f,h,m,n,u>>31-Math.clz32(n.BYTES_PER_ELEMENT));}else (u=Vd(m,h,c,f,u))?Z.readPixels(a,b,c,f,h,m,u):vd(1280);},tc:function(a,b,c,f){Z.renderbufferStorage(a,b,c,f);},pc:function(a,b,c,f,h){Z.renderbufferStorageMultisample(a,
|
|
8212
|
+
b,c,f,h);},fc:function(a,b,c){Z.samplerParameterf(qd[a],b,c);},gc:function(a,b,c){Z.samplerParameteri(qd[a],b,c);},hc:function(a,b,c){Z.samplerParameteri(qd[a],b,Q[c>>2]);},Ra:function(a,b,c,f){Z.scissor(a,b,c,f);},Sa:function(a,b,c,f){for(var h="",m=0;m<b;++m){var u=f?Q[f+4*m>>2]:-1,n=Q[c+4*m>>2];u=n?vb(J,n,0>u?void 0:u):"";h+=u;}Z.shaderSource(nd[a],h);},Ta:function(a,b,c){Z.stencilFunc(a,b,c);},Ua:function(a,b,c,f){Z.stencilFuncSeparate(a,b,c,f);},Va:function(a){Z.stencilMask(a);},Wa:function(a,b){Z.stencilMaskSeparate(a,
|
|
8213
|
+
b);},Xa:function(a,b,c){Z.stencilOp(a,b,c);},Ya:function(a,b,c,f){Z.stencilOpSeparate(a,b,c,f);},Za:function(a,b,c,f,h,m,u,n,p){if(2<=B.version)if(Z.We)Z.texImage2D(a,b,c,f,h,m,u,n,p);else if(p){var v=Ud(n);Z.texImage2D(a,b,c,f,h,m,u,n,v,p>>31-Math.clz32(v.BYTES_PER_ELEMENT));}else Z.texImage2D(a,b,c,f,h,m,u,n,null);else Z.texImage2D(a,b,c,f,h,m,u,n,p?Vd(n,u,f,h,p):null);},_a:function(a,b,c){Z.texParameterf(a,b,c);},$a:function(a,b,c){Z.texParameterf(a,b,R[c>>2]);},ab:function(a,b,c){Z.texParameteri(a,b,
|
|
8214
|
+
c);},bb:function(a,b,c){Z.texParameteri(a,b,Q[c>>2]);},Ec:function(a,b,c,f,h){Z.texStorage2D(a,b,c,f,h);},cb:function(a,b,c,f,h,m,u,n,p){if(2<=B.version)if(Z.We)Z.texSubImage2D(a,b,c,f,h,m,u,n,p);else if(p){var v=Ud(n);Z.texSubImage2D(a,b,c,f,h,m,u,n,v,p>>31-Math.clz32(v.BYTES_PER_ELEMENT));}else Z.texSubImage2D(a,b,c,f,h,m,u,n,null);else v=null,p&&(v=Vd(n,u,h,m,p)),Z.texSubImage2D(a,b,c,f,h,m,u,n,v);},db:function(a,b){Z.uniform1f(Wd(a),b);},eb:function(a,b,c){if(2<=B.version)b&&Z.uniform1fv(Wd(a),R,c>>
|
|
8215
|
+
2,b);else {if(288>=b)for(var f=Xd[b-1],h=0;h<b;++h)f[h]=R[c+4*h>>2];else f=R.subarray(c>>2,c+4*b>>2);Z.uniform1fv(Wd(a),f);}},od:function(a,b){Z.uniform1i(Wd(a),b);},pd:function(a,b,c){if(2<=B.version)b&&Z.uniform1iv(Wd(a),Q,c>>2,b);else {if(288>=b)for(var f=Yd[b-1],h=0;h<b;++h)f[h]=Q[c+4*h>>2];else f=Q.subarray(c>>2,c+4*b>>2);Z.uniform1iv(Wd(a),f);}},qd:function(a,b,c){Z.uniform2f(Wd(a),b,c);},rd:function(a,b,c){if(2<=B.version)b&&Z.uniform2fv(Wd(a),R,c>>2,2*b);else {if(144>=b)for(var f=Xd[2*b-1],h=0;h<
|
|
8216
|
+
2*b;h+=2)f[h]=R[c+4*h>>2],f[h+1]=R[c+(4*h+4)>>2];else f=R.subarray(c>>2,c+8*b>>2);Z.uniform2fv(Wd(a),f);}},nd:function(a,b,c){Z.uniform2i(Wd(a),b,c);},md:function(a,b,c){if(2<=B.version)b&&Z.uniform2iv(Wd(a),Q,c>>2,2*b);else {if(144>=b)for(var f=Yd[2*b-1],h=0;h<2*b;h+=2)f[h]=Q[c+4*h>>2],f[h+1]=Q[c+(4*h+4)>>2];else f=Q.subarray(c>>2,c+8*b>>2);Z.uniform2iv(Wd(a),f);}},ld:function(a,b,c,f){Z.uniform3f(Wd(a),b,c,f);},kd:function(a,b,c){if(2<=B.version)b&&Z.uniform3fv(Wd(a),R,c>>2,3*b);else {if(96>=b)for(var f=
|
|
8217
|
+
Xd[3*b-1],h=0;h<3*b;h+=3)f[h]=R[c+4*h>>2],f[h+1]=R[c+(4*h+4)>>2],f[h+2]=R[c+(4*h+8)>>2];else f=R.subarray(c>>2,c+12*b>>2);Z.uniform3fv(Wd(a),f);}},jd:function(a,b,c,f){Z.uniform3i(Wd(a),b,c,f);},id:function(a,b,c){if(2<=B.version)b&&Z.uniform3iv(Wd(a),Q,c>>2,3*b);else {if(96>=b)for(var f=Yd[3*b-1],h=0;h<3*b;h+=3)f[h]=Q[c+4*h>>2],f[h+1]=Q[c+(4*h+4)>>2],f[h+2]=Q[c+(4*h+8)>>2];else f=Q.subarray(c>>2,c+12*b>>2);Z.uniform3iv(Wd(a),f);}},hd:function(a,b,c,f,h){Z.uniform4f(Wd(a),b,c,f,h);},gd:function(a,b,c){if(2<=
|
|
8218
|
+
B.version)b&&Z.uniform4fv(Wd(a),R,c>>2,4*b);else {if(72>=b){var f=Xd[4*b-1],h=R;c>>=2;for(var m=0;m<4*b;m+=4){var u=c+m;f[m]=h[u];f[m+1]=h[u+1];f[m+2]=h[u+2];f[m+3]=h[u+3];}}else f=R.subarray(c>>2,c+16*b>>2);Z.uniform4fv(Wd(a),f);}},Wc:function(a,b,c,f,h){Z.uniform4i(Wd(a),b,c,f,h);},Xc:function(a,b,c){if(2<=B.version)b&&Z.uniform4iv(Wd(a),Q,c>>2,4*b);else {if(72>=b)for(var f=Yd[4*b-1],h=0;h<4*b;h+=4)f[h]=Q[c+4*h>>2],f[h+1]=Q[c+(4*h+4)>>2],f[h+2]=Q[c+(4*h+8)>>2],f[h+3]=Q[c+(4*h+12)>>2];else f=Q.subarray(c>>
|
|
8219
|
+
2,c+16*b>>2);Z.uniform4iv(Wd(a),f);}},Yc:function(a,b,c,f){if(2<=B.version)b&&Z.uniformMatrix2fv(Wd(a),!!c,R,f>>2,4*b);else {if(72>=b)for(var h=Xd[4*b-1],m=0;m<4*b;m+=4)h[m]=R[f+4*m>>2],h[m+1]=R[f+(4*m+4)>>2],h[m+2]=R[f+(4*m+8)>>2],h[m+3]=R[f+(4*m+12)>>2];else h=R.subarray(f>>2,f+16*b>>2);Z.uniformMatrix2fv(Wd(a),!!c,h);}},Zc:function(a,b,c,f){if(2<=B.version)b&&Z.uniformMatrix3fv(Wd(a),!!c,R,f>>2,9*b);else {if(32>=b)for(var h=Xd[9*b-1],m=0;m<9*b;m+=9)h[m]=R[f+4*m>>2],h[m+1]=R[f+(4*m+4)>>2],h[m+2]=R[f+
|
|
8220
|
+
(4*m+8)>>2],h[m+3]=R[f+(4*m+12)>>2],h[m+4]=R[f+(4*m+16)>>2],h[m+5]=R[f+(4*m+20)>>2],h[m+6]=R[f+(4*m+24)>>2],h[m+7]=R[f+(4*m+28)>>2],h[m+8]=R[f+(4*m+32)>>2];else h=R.subarray(f>>2,f+36*b>>2);Z.uniformMatrix3fv(Wd(a),!!c,h);}},_c:function(a,b,c,f){if(2<=B.version)b&&Z.uniformMatrix4fv(Wd(a),!!c,R,f>>2,16*b);else {if(18>=b){var h=Xd[16*b-1],m=R;f>>=2;for(var u=0;u<16*b;u+=16){var n=f+u;h[u]=m[n];h[u+1]=m[n+1];h[u+2]=m[n+2];h[u+3]=m[n+3];h[u+4]=m[n+4];h[u+5]=m[n+5];h[u+6]=m[n+6];h[u+7]=m[n+7];h[u+8]=m[n+
|
|
8221
|
+
8];h[u+9]=m[n+9];h[u+10]=m[n+10];h[u+11]=m[n+11];h[u+12]=m[n+12];h[u+13]=m[n+13];h[u+14]=m[n+14];h[u+15]=m[n+15];}}else h=R.subarray(f>>2,f+64*b>>2);Z.uniformMatrix4fv(Wd(a),!!c,h);}},$c:function(a){a=kd[a];Z.useProgram(a);Z.bg=a;},ad:function(a,b){Z.vertexAttrib1f(a,b);},bd:function(a,b){Z.vertexAttrib2f(a,R[b>>2],R[b+4>>2]);},cd:function(a,b){Z.vertexAttrib3f(a,R[b>>2],R[b+4>>2],R[b+8>>2]);},dd:function(a,b){Z.vertexAttrib4f(a,R[b>>2],R[b+4>>2],R[b+8>>2],R[b+12>>2]);},Fc:function(a,b){Z.vertexAttribDivisor(a,
|
|
8222
|
+
b);},Gc:function(a,b,c,f,h){Z.vertexAttribIPointer(a,b,c,f,h);},ed:function(a,b,c,f,h,m){Z.vertexAttribPointer(a,b,c,!!f,h,m);},fd:function(a,b,c,f){Z.viewport(a,b,c,f);},kc:function(a,b,c,f){Z.waitSync(rd[a],b,(c>>>0)+4294967296*f);},qb:a=>{var b=J.length;a>>>=0;if(2147483648<a)return false;for(var c=1;4>=c;c*=2){var f=b*(1+.2/c);f=Math.min(f,a+100663296);var h=Math;f=Math.max(a,f);a:{h=h.min.call(h,2147483648,f+(65536-f%65536)%65536)-La.buffer.byteLength+65535>>>16;try{La.grow(h);Wa();var m=1;break a}catch(u){}m=
|
|
8223
|
+
void 0;}if(m)return true}return false},hb:function(){return B?B.handle:0},rb:(a,b)=>{var c=0;ae().forEach(function(f,h){var m=b+c;h=Ta[a+4*h>>2]=m;for(m=0;m<f.length;++m)Qa[h++>>0]=f.charCodeAt(m);Qa[h>>0]=0;c+=f.length+1;});return 0},sb:(a,b)=>{var c=ae();Ta[a>>2]=c.length;var f=0;c.forEach(function(h){f+=h.length+1;});Ta[b>>2]=f;return 0},Eb:a=>{va(a,new sb(a));},M:()=>52,jb:function(){return 52},xb:()=>52,mb:function(){return 70},Q:(a,b,c,f)=>{for(var h=0,
|
|
8224
|
+
m=0;m<c;m++){var u=Ta[b>>2],n=Ta[b+4>>2];b+=8;for(var p=0;p<n;p++){var v=J[u+p],E=be[a];0===v||10===v?((1===a?Ha:Ia)(vb(E,0)),E.length=0):E.push(v);}h+=n;}Ta[f>>2]=h;return 0},yd:zd,ib:Bd,xd:Cd,Kb:Dd,L:Nd,P:Rd,fb:Sd,Ib:me,j:ne,o:oe,k:pe,I:qe,Hb:re,Fb:se,W:te,V:ue,O:ve,i:we,w:xe,v:ye,s:ze,Gb:Ae,Jb:Be,Lb:Ce,ob:(a,b,c,f)=>ge(a,b,c,f)};
|
|
8225
|
+
(function(){function a(c){Ma=c=c.exports;La=Ma.zd;Wa();Xa=Ma.Cd;Za.unshift(Ma.Ad);eb--;w.monitorRunDependencies&&w.monitorRunDependencies(eb);if(0==eb&&(gb)){var f=gb;gb=null;f();}return c}var b={a:De};eb++;w.monitorRunDependencies&&w.monitorRunDependencies(eb);if(w.instantiateWasm)try{return w.instantiateWasm(b,a)}catch(c){Ia("Module.instantiateWasm callback failed with error: "+c),ca(c);}rb(b,function(c){a(c.instance);}).catch(ca);return {}})();
|
|
8226
|
+
var Pd=w._malloc=a=>(Pd=w._malloc=Ma.Bd)(a),xc=w._free=a=>(xc=w._free=Ma.Dd)(a),wc=a=>(wc=Ma.Ed)(a);w.__embind_initialize_bindings=()=>(w.__embind_initialize_bindings=Ma.Fd)();var Ee=(a,b)=>(Ee=Ma.Gd)(a,b),Fe=()=>(Fe=Ma.Hd)(),Ge=a=>(Ge=Ma.Id)(a);w.dynCall_viji=(a,b,c,f,h)=>(w.dynCall_viji=Ma.Jd)(a,b,c,f,h);w.dynCall_vijiii=(a,b,c,f,h,m,u)=>(w.dynCall_vijiii=Ma.Kd)(a,b,c,f,h,m,u);w.dynCall_viiiiij=(a,b,c,f,h,m,u,n)=>(w.dynCall_viiiiij=Ma.Ld)(a,b,c,f,h,m,u,n);
|
|
8227
|
+
w.dynCall_jii=(a,b,c)=>(w.dynCall_jii=Ma.Md)(a,b,c);w.dynCall_vij=(a,b,c,f)=>(w.dynCall_vij=Ma.Nd)(a,b,c,f);w.dynCall_jiiiiii=(a,b,c,f,h,m,u)=>(w.dynCall_jiiiiii=Ma.Od)(a,b,c,f,h,m,u);w.dynCall_jiiiiji=(a,b,c,f,h,m,u,n)=>(w.dynCall_jiiiiji=Ma.Pd)(a,b,c,f,h,m,u,n);w.dynCall_ji=(a,b)=>(w.dynCall_ji=Ma.Qd)(a,b);w.dynCall_iijj=(a,b,c,f,h,m)=>(w.dynCall_iijj=Ma.Rd)(a,b,c,f,h,m);w.dynCall_iiiji=(a,b,c,f,h,m)=>(w.dynCall_iiiji=Ma.Sd)(a,b,c,f,h,m);
|
|
8228
|
+
w.dynCall_iiji=(a,b,c,f,h)=>(w.dynCall_iiji=Ma.Td)(a,b,c,f,h);w.dynCall_iijjiii=(a,b,c,f,h,m,u,n,p)=>(w.dynCall_iijjiii=Ma.Ud)(a,b,c,f,h,m,u,n,p);w.dynCall_iij=(a,b,c,f)=>(w.dynCall_iij=Ma.Vd)(a,b,c,f);w.dynCall_vijjjii=(a,b,c,f,h,m,u,n,p,v)=>(w.dynCall_vijjjii=Ma.Wd)(a,b,c,f,h,m,u,n,p,v);w.dynCall_jiji=(a,b,c,f,h)=>(w.dynCall_jiji=Ma.Xd)(a,b,c,f,h);w.dynCall_viijii=(a,b,c,f,h,m,u)=>(w.dynCall_viijii=Ma.Yd)(a,b,c,f,h,m,u);w.dynCall_iiiiij=(a,b,c,f,h,m,u)=>(w.dynCall_iiiiij=Ma.Zd)(a,b,c,f,h,m,u);
|
|
8229
|
+
w.dynCall_iiiiijj=(a,b,c,f,h,m,u,n,p)=>(w.dynCall_iiiiijj=Ma._d)(a,b,c,f,h,m,u,n,p);w.dynCall_iiiiiijj=(a,b,c,f,h,m,u,n,p,v)=>(w.dynCall_iiiiiijj=Ma.$d)(a,b,c,f,h,m,u,n,p,v);function pe(a,b,c,f){var h=Fe();try{return Xa.get(a)(b,c,f)}catch(m){Ge(h);if(m!==m+0)throw m;Ee(1,0);}}function Ce(a,b,c,f,h,m,u,n,p,v){var E=Fe();try{Xa.get(a)(b,c,f,h,m,u,n,p,v);}catch(G){Ge(E);if(G!==G+0)throw G;Ee(1,0);}}function ye(a,b,c,f){var h=Fe();try{Xa.get(a)(b,c,f);}catch(m){Ge(h);if(m!==m+0)throw m;Ee(1,0);}}
|
|
8230
|
+
function xe(a,b,c){var f=Fe();try{Xa.get(a)(b,c);}catch(h){Ge(f);if(h!==h+0)throw h;Ee(1,0);}}function ve(a){var b=Fe();try{Xa.get(a)();}catch(c){Ge(b);if(c!==c+0)throw c;Ee(1,0);}}function ne(a,b){var c=Fe();try{return Xa.get(a)(b)}catch(f){Ge(c);if(f!==f+0)throw f;Ee(1,0);}}function ze(a,b,c,f,h){var m=Fe();try{Xa.get(a)(b,c,f,h);}catch(u){Ge(m);if(u!==u+0)throw u;Ee(1,0);}}function we(a,b){var c=Fe();try{Xa.get(a)(b);}catch(f){Ge(c);if(f!==f+0)throw f;Ee(1,0);}}
|
|
8231
|
+
function oe(a,b,c){var f=Fe();try{return Xa.get(a)(b,c)}catch(h){Ge(f);if(h!==h+0)throw h;Ee(1,0);}}function Be(a,b,c,f,h,m,u){var n=Fe();try{Xa.get(a)(b,c,f,h,m,u);}catch(p){Ge(n);if(p!==p+0)throw p;Ee(1,0);}}function me(a){var b=Fe();try{return Xa.get(a)()}catch(c){Ge(b);if(c!==c+0)throw c;Ee(1,0);}}function re(a,b,c,f,h,m){var u=Fe();try{return Xa.get(a)(b,c,f,h,m)}catch(n){Ge(u);if(n!==n+0)throw n;Ee(1,0);}}
|
|
8232
|
+
function te(a,b,c,f,h,m,u,n){var p=Fe();try{return Xa.get(a)(b,c,f,h,m,u,n)}catch(v){Ge(p);if(v!==v+0)throw v;Ee(1,0);}}function Ae(a,b,c,f,h,m){var u=Fe();try{Xa.get(a)(b,c,f,h,m);}catch(n){Ge(u);if(n!==n+0)throw n;Ee(1,0);}}function qe(a,b,c,f,h){var m=Fe();try{return Xa.get(a)(b,c,f,h)}catch(u){Ge(m);if(u!==u+0)throw u;Ee(1,0);}}function ue(a,b,c,f,h,m,u,n,p,v){var E=Fe();try{return Xa.get(a)(b,c,f,h,m,u,n,p,v)}catch(G){Ge(E);if(G!==G+0)throw G;Ee(1,0);}}
|
|
8233
|
+
function se(a,b,c,f,h,m,u){var n=Fe();try{return Xa.get(a)(b,c,f,h,m,u)}catch(p){Ge(n);if(p!==p+0)throw p;Ee(1,0);}}var He;gb=function Ie(){He||Je();He||(gb=Ie);};
|
|
8234
|
+
function Je(){function a(){if(!He&&(He=true,w.calledRun=true,!Na)){tb(Za);aa(w);if(w.onRuntimeInitialized)w.onRuntimeInitialized();if(w.postRun)for("function"==typeof w.postRun&&(w.postRun=[w.postRun]);w.postRun.length;){var b=w.postRun.shift();$a.unshift(b);}tb($a);}}if(!(0<eb)){if(w.preRun)for("function"==typeof w.preRun&&(w.preRun=[w.preRun]);w.preRun.length;)ab();tb(Ya);0<eb||(w.setStatus?(w.setStatus("Running..."),setTimeout(function(){setTimeout(function(){w.setStatus("");},1);a();},1)):a());}}
|
|
8235
|
+
if(w.preInit)for("function"==typeof w.preInit&&(w.preInit=[w.preInit]);0<w.preInit.length;)w.preInit.pop()();Je();
|
|
7819
8236
|
|
|
7820
8237
|
|
|
7821
8238
|
return moduleArg.ready
|
|
@@ -8008,7 +8425,7 @@ class SoundManager {
|
|
|
8008
8425
|
get audioContext() {
|
|
8009
8426
|
if (!this._audioContext) {
|
|
8010
8427
|
if (!navigator.userActivation.hasBeenActive) {
|
|
8011
|
-
throw new
|
|
8428
|
+
throw new M2Error(
|
|
8012
8429
|
"AudioContext cannot be created until user has interacted with the page"
|
|
8013
8430
|
);
|
|
8014
8431
|
}
|
|
@@ -8085,7 +8502,7 @@ class SoundManager {
|
|
|
8085
8502
|
return fetch(m2Sound.url).then((response) => {
|
|
8086
8503
|
if (!response.ok) {
|
|
8087
8504
|
m2Sound.status = M2SoundStatus.Error;
|
|
8088
|
-
throw new
|
|
8505
|
+
throw new M2Error(
|
|
8089
8506
|
`cannot fetch sound ${m2Sound.soundName} at url ${m2Sound.url}: ${response.statusText}`
|
|
8090
8507
|
);
|
|
8091
8508
|
}
|
|
@@ -8150,7 +8567,7 @@ class SoundManager {
|
|
|
8150
8567
|
*/
|
|
8151
8568
|
async decodeSound(sound) {
|
|
8152
8569
|
if (!sound.data) {
|
|
8153
|
-
throw new
|
|
8570
|
+
throw new M2Error(
|
|
8154
8571
|
`data is undefined for sound ${sound.soundName} (url ${sound.url})`
|
|
8155
8572
|
);
|
|
8156
8573
|
}
|
|
@@ -8164,7 +8581,7 @@ class SoundManager {
|
|
|
8164
8581
|
);
|
|
8165
8582
|
} catch {
|
|
8166
8583
|
sound.status = M2SoundStatus.Error;
|
|
8167
|
-
throw new
|
|
8584
|
+
throw new M2Error(
|
|
8168
8585
|
`error decoding sound ${sound.soundName} (url: ${sound.url})`
|
|
8169
8586
|
);
|
|
8170
8587
|
}
|
|
@@ -8184,7 +8601,7 @@ class SoundManager {
|
|
|
8184
8601
|
getSound(soundName) {
|
|
8185
8602
|
const sound = this.sounds[soundName];
|
|
8186
8603
|
if (!sound) {
|
|
8187
|
-
throw new
|
|
8604
|
+
throw new M2Error(`getSound(): sound ${soundName} not found`);
|
|
8188
8605
|
}
|
|
8189
8606
|
return sound;
|
|
8190
8607
|
}
|
|
@@ -8310,7 +8727,7 @@ class EventMaterializer {
|
|
|
8310
8727
|
if (node.type === M2NodeType.Composite) {
|
|
8311
8728
|
node.handleCompositeEvent(event);
|
|
8312
8729
|
} else {
|
|
8313
|
-
throw new
|
|
8730
|
+
throw new M2Error(
|
|
8314
8731
|
`EventMaterializer: node was expected to be composite, but was of type ${node.type}`
|
|
8315
8732
|
);
|
|
8316
8733
|
}
|
|
@@ -8339,14 +8756,14 @@ class EventMaterializer {
|
|
|
8339
8756
|
(n) => n.uuid === nodePropertyChangeEvent.uuid
|
|
8340
8757
|
);
|
|
8341
8758
|
if (!node) {
|
|
8342
|
-
throw new
|
|
8759
|
+
throw new M2Error(
|
|
8343
8760
|
`EventMaterializer: node with uuid ${nodePropertyChangeEvent.uuid} not found`
|
|
8344
8761
|
);
|
|
8345
8762
|
}
|
|
8346
8763
|
if (nodePropertyChangeEvent.property in node) {
|
|
8347
8764
|
node[nodePropertyChangeEvent.property] = nodePropertyChangeEvent.value;
|
|
8348
8765
|
} else {
|
|
8349
|
-
throw new
|
|
8766
|
+
throw new M2Error(
|
|
8350
8767
|
`EventMaterializer: on node ${node.name}, type ${node.type}, nodePropertyChangeEvent tried to set unknown property ${nodePropertyChangeEvent.property} to value ${JSON.stringify(nodePropertyChangeEvent.value)}`
|
|
8351
8768
|
);
|
|
8352
8769
|
}
|
|
@@ -8356,7 +8773,7 @@ class EventMaterializer {
|
|
|
8356
8773
|
(n) => n.uuid === nodeAddChildEvent.uuid
|
|
8357
8774
|
);
|
|
8358
8775
|
if (!parent) {
|
|
8359
|
-
throw new
|
|
8776
|
+
throw new M2Error(
|
|
8360
8777
|
`EventMaterializer: parent node with uuid ${nodeAddChildEvent.uuid} not found`
|
|
8361
8778
|
);
|
|
8362
8779
|
}
|
|
@@ -8364,7 +8781,7 @@ class EventMaterializer {
|
|
|
8364
8781
|
(n) => n.uuid === nodeAddChildEvent.childUuid
|
|
8365
8782
|
);
|
|
8366
8783
|
if (!child) {
|
|
8367
|
-
throw new
|
|
8784
|
+
throw new M2Error(
|
|
8368
8785
|
`EventMaterializer: child node with uuid ${nodeAddChildEvent.childUuid} not found`
|
|
8369
8786
|
);
|
|
8370
8787
|
}
|
|
@@ -8375,7 +8792,7 @@ class EventMaterializer {
|
|
|
8375
8792
|
(n) => n.uuid === nodeRemoveChildEvent.uuid
|
|
8376
8793
|
);
|
|
8377
8794
|
if (!parent) {
|
|
8378
|
-
throw new
|
|
8795
|
+
throw new M2Error(
|
|
8379
8796
|
`EventMaterializer: parent node with uuid ${nodeRemoveChildEvent.uuid} not found`
|
|
8380
8797
|
);
|
|
8381
8798
|
}
|
|
@@ -8383,7 +8800,7 @@ class EventMaterializer {
|
|
|
8383
8800
|
(n) => n.uuid === nodeRemoveChildEvent.childUuid
|
|
8384
8801
|
);
|
|
8385
8802
|
if (!child) {
|
|
8386
|
-
throw new
|
|
8803
|
+
throw new M2Error(
|
|
8387
8804
|
`EventMaterializer: child node with uuid ${nodeRemoveChildEvent.childUuid} not found`
|
|
8388
8805
|
);
|
|
8389
8806
|
}
|
|
@@ -8443,17 +8860,17 @@ class EventMaterializer {
|
|
|
8443
8860
|
let transition = Transition.none();
|
|
8444
8861
|
if (scenePresentEvent.transitionType === TransitionType.Slide) {
|
|
8445
8862
|
if (scenePresentEvent.direction === void 0) {
|
|
8446
|
-
throw new
|
|
8863
|
+
throw new M2Error(
|
|
8447
8864
|
"EventMaterializer: ScenePresentEvent direction is undefined for slide transition"
|
|
8448
8865
|
);
|
|
8449
8866
|
}
|
|
8450
8867
|
if (scenePresentEvent.duration === void 0) {
|
|
8451
|
-
throw new
|
|
8868
|
+
throw new M2Error(
|
|
8452
8869
|
"EventMaterializer: ScenePresentEvent duration is undefined for slide transition"
|
|
8453
8870
|
);
|
|
8454
8871
|
}
|
|
8455
8872
|
if (scenePresentEvent.easingType === void 0) {
|
|
8456
|
-
throw new
|
|
8873
|
+
throw new M2Error(
|
|
8457
8874
|
"EventMaterializer: ScenePresentEvent easingType is undefined for slide transition"
|
|
8458
8875
|
);
|
|
8459
8876
|
}
|
|
@@ -8461,7 +8878,7 @@ class EventMaterializer {
|
|
|
8461
8878
|
(s) => s.uuid === scenePresentEvent.uuid
|
|
8462
8879
|
);
|
|
8463
8880
|
if (!incomingScene) {
|
|
8464
|
-
throw new
|
|
8881
|
+
throw new M2Error(
|
|
8465
8882
|
`EventMaterializer: Scene with uuid ${scenePresentEvent.uuid} not found`
|
|
8466
8883
|
);
|
|
8467
8884
|
}
|
|
@@ -8504,7 +8921,7 @@ class Game {
|
|
|
8504
8921
|
this.sessionUuid = "";
|
|
8505
8922
|
this.uuid = Uuid.generate();
|
|
8506
8923
|
this.publishUuid = "";
|
|
8507
|
-
this.canvasKitWasmVersion = "0.
|
|
8924
|
+
this.canvasKitWasmVersion = "0.40.0";
|
|
8508
8925
|
this.beginTimestamp = NaN;
|
|
8509
8926
|
this.beginIso8601Timestamp = "";
|
|
8510
8927
|
this.eventListeners = new Array();
|
|
@@ -8520,7 +8937,8 @@ class Game {
|
|
|
8520
8937
|
/** Nodes created during event replay */
|
|
8521
8938
|
this.materializedNodes = new Array();
|
|
8522
8939
|
this.data = {
|
|
8523
|
-
trials: new Array()
|
|
8940
|
+
trials: new Array(),
|
|
8941
|
+
scoring: {}
|
|
8524
8942
|
};
|
|
8525
8943
|
/** The 0-based index of the current trial */
|
|
8526
8944
|
this.trialIndex = 0;
|
|
@@ -8541,11 +8959,74 @@ class Game {
|
|
|
8541
8959
|
});
|
|
8542
8960
|
this.incomingSceneTransitions = new Array();
|
|
8543
8961
|
this.replayEventsButtonEnabled = true;
|
|
8962
|
+
/**
|
|
8963
|
+
* The m2c2kit engine will automatically include these schema and their
|
|
8964
|
+
* values in the scoring data.
|
|
8965
|
+
*/
|
|
8966
|
+
this.automaticScoringSchema = {
|
|
8967
|
+
data_type: {
|
|
8968
|
+
type: "string",
|
|
8969
|
+
description: "Type of data."
|
|
8970
|
+
},
|
|
8971
|
+
study_id: {
|
|
8972
|
+
type: ["string", "null"],
|
|
8973
|
+
description: "The short human-readable text ID of the study (protocol, experiment, or other aggregate) that contains the administration of this activity."
|
|
8974
|
+
},
|
|
8975
|
+
study_uuid: {
|
|
8976
|
+
type: ["string", "null"],
|
|
8977
|
+
format: "uuid",
|
|
8978
|
+
description: "Unique identifier of the study (protocol, experiment, or other aggregate) that contains the administration of this activity."
|
|
8979
|
+
},
|
|
8980
|
+
document_uuid: {
|
|
8981
|
+
type: "string",
|
|
8982
|
+
format: "uuid",
|
|
8983
|
+
description: "Unique identifier for this data document."
|
|
8984
|
+
},
|
|
8985
|
+
session_uuid: {
|
|
8986
|
+
type: "string",
|
|
8987
|
+
format: "uuid",
|
|
8988
|
+
description: "Unique identifier for all activities in this administration of the session. This identifier changes each time a new session starts."
|
|
8989
|
+
},
|
|
8990
|
+
activity_uuid: {
|
|
8991
|
+
type: "string",
|
|
8992
|
+
format: "uuid",
|
|
8993
|
+
description: "Unique identifier for all trials in this administration of the activity. This identifier changes each time the activity starts."
|
|
8994
|
+
},
|
|
8995
|
+
activity_id: {
|
|
8996
|
+
type: "string",
|
|
8997
|
+
description: "Human-readable identifier of the activity."
|
|
8998
|
+
},
|
|
8999
|
+
activity_publish_uuid: {
|
|
9000
|
+
type: "string",
|
|
9001
|
+
format: "uuid",
|
|
9002
|
+
description: "Persistent unique identifier of the activity. This identifier never changes. It can be used to identify the activity across different studies and sessions."
|
|
9003
|
+
},
|
|
9004
|
+
activity_version: {
|
|
9005
|
+
type: "string",
|
|
9006
|
+
description: "Version of the activity."
|
|
9007
|
+
},
|
|
9008
|
+
device_timezone: {
|
|
9009
|
+
type: "string",
|
|
9010
|
+
description: "Timezone of the device. Calculated from Intl.DateTimeFormat().resolvedOptions().timeZone."
|
|
9011
|
+
},
|
|
9012
|
+
device_timezone_offset_minutes: {
|
|
9013
|
+
type: "integer",
|
|
9014
|
+
description: "Difference in minutes between UTC and device timezone. Calculated from Date.getTimezoneOffset()."
|
|
9015
|
+
},
|
|
9016
|
+
locale: {
|
|
9017
|
+
type: ["string", "null"],
|
|
9018
|
+
description: "Locale of the trial. null if the activity does not support localization."
|
|
9019
|
+
}
|
|
9020
|
+
};
|
|
8544
9021
|
/**
|
|
8545
9022
|
* The m2c2kit engine will automatically include these schema and their
|
|
8546
9023
|
* values in the trial data.
|
|
8547
9024
|
*/
|
|
8548
9025
|
this.automaticTrialSchema = {
|
|
9026
|
+
data_type: {
|
|
9027
|
+
type: "string",
|
|
9028
|
+
description: "Type of data."
|
|
9029
|
+
},
|
|
8549
9030
|
study_id: {
|
|
8550
9031
|
type: ["string", "null"],
|
|
8551
9032
|
description: "The short human-readable text ID of the study (protocol, experiment, or other aggregate) that contains the administration of this activity."
|
|
@@ -8598,7 +9079,7 @@ class Game {
|
|
|
8598
9079
|
};
|
|
8599
9080
|
this.snapshots = new Array();
|
|
8600
9081
|
if (!options.id || options.id.trim() === "") {
|
|
8601
|
-
throw new
|
|
9082
|
+
throw new M2Error("id is required in GameOptions");
|
|
8602
9083
|
}
|
|
8603
9084
|
if (!Uuid.isValid(options.publishUuid)) {
|
|
8604
9085
|
const providedPublishUuid = options.publishUuid ? `Provided publishUuid was ${options.publishUuid}. ` : "";
|
|
@@ -8633,6 +9114,9 @@ class Game {
|
|
|
8633
9114
|
if (!this.options.trialSchema) {
|
|
8634
9115
|
this.options.trialSchema = {};
|
|
8635
9116
|
}
|
|
9117
|
+
if (!this.options.scoringSchema) {
|
|
9118
|
+
this.options.scoringSchema = {};
|
|
9119
|
+
}
|
|
8636
9120
|
if (options.moduleMetadata) {
|
|
8637
9121
|
this.moduleMetadata = options.moduleMetadata;
|
|
8638
9122
|
} else {
|
|
@@ -8670,7 +9154,7 @@ class Game {
|
|
|
8670
9154
|
const regex = new RegExp(`^.*${packageName}[^\\/]*`);
|
|
8671
9155
|
const matches = moduleUrl.match(regex);
|
|
8672
9156
|
if (!matches || matches.length === 0) {
|
|
8673
|
-
throw new
|
|
9157
|
+
throw new M2Error(
|
|
8674
9158
|
`Could not calculate imported assessment package base URL. Package name: ${packageName}, module URL: ${moduleUrl}`
|
|
8675
9159
|
);
|
|
8676
9160
|
}
|
|
@@ -8730,7 +9214,7 @@ class Game {
|
|
|
8730
9214
|
canvasKitWasmBaseUrl = game.getImportedModuleBaseUrl("@m2c2kit/core", coreModuleUrl) + "/assets";
|
|
8731
9215
|
} catch {
|
|
8732
9216
|
if (isImportedModule) {
|
|
8733
|
-
throw new
|
|
9217
|
+
throw new M2Error(
|
|
8734
9218
|
`the package ${game.moduleMetadata.name} has been imported from a module URL (${moduleUrl}), but the @m2c2kit/core package module URL could not be determined.`
|
|
8735
9219
|
);
|
|
8736
9220
|
}
|
|
@@ -8743,7 +9227,7 @@ class Game {
|
|
|
8743
9227
|
async configureI18n(localizationOptions) {
|
|
8744
9228
|
this.i18n = new I18n(this, localizationOptions);
|
|
8745
9229
|
if (!this.i18n) {
|
|
8746
|
-
throw new
|
|
9230
|
+
throw new M2Error("I18n object is undefined");
|
|
8747
9231
|
}
|
|
8748
9232
|
await this.i18n.initialize();
|
|
8749
9233
|
this.eventStore.addEvent({
|
|
@@ -8792,7 +9276,7 @@ class Game {
|
|
|
8792
9276
|
try {
|
|
8793
9277
|
this.canvasKit = await this.loadCanvasKit(manifestCanvasKitWasmUrl);
|
|
8794
9278
|
} catch (err) {
|
|
8795
|
-
throw new
|
|
9279
|
+
throw new M2Error(
|
|
8796
9280
|
`game ${this.id} could not load canvaskit wasm file from ${manifestCanvasKitWasmUrl}`
|
|
8797
9281
|
);
|
|
8798
9282
|
}
|
|
@@ -8836,24 +9320,24 @@ class Game {
|
|
|
8836
9320
|
try {
|
|
8837
9321
|
manifestResponse = await fetch(manifestJsonUrl);
|
|
8838
9322
|
if (!manifestResponse.ok) {
|
|
8839
|
-
throw new
|
|
9323
|
+
throw new M2Error(
|
|
8840
9324
|
`Error ${manifestResponse.status} on GET manifest.json from ${manifestJsonUrl}.`
|
|
8841
9325
|
);
|
|
8842
9326
|
}
|
|
8843
9327
|
} catch {
|
|
8844
|
-
throw new
|
|
9328
|
+
throw new M2Error(
|
|
8845
9329
|
`Network error on GET manifest.json from ${manifestJsonUrl}.`
|
|
8846
9330
|
);
|
|
8847
9331
|
}
|
|
8848
9332
|
try {
|
|
8849
9333
|
return await manifestResponse.json();
|
|
8850
9334
|
} catch {
|
|
8851
|
-
throw new
|
|
9335
|
+
throw new M2Error(`Error parsing manifest.json from ${manifestJsonUrl}.`);
|
|
8852
9336
|
}
|
|
8853
9337
|
}
|
|
8854
9338
|
get fontManager() {
|
|
8855
9339
|
if (!this._fontManager) {
|
|
8856
|
-
throw new
|
|
9340
|
+
throw new M2Error("fontManager is undefined");
|
|
8857
9341
|
}
|
|
8858
9342
|
return this._fontManager;
|
|
8859
9343
|
}
|
|
@@ -8862,7 +9346,7 @@ class Game {
|
|
|
8862
9346
|
}
|
|
8863
9347
|
get imageManager() {
|
|
8864
9348
|
if (!this._imageManager) {
|
|
8865
|
-
throw new
|
|
9349
|
+
throw new M2Error("imageManager is undefined");
|
|
8866
9350
|
}
|
|
8867
9351
|
return this._imageManager;
|
|
8868
9352
|
}
|
|
@@ -8871,7 +9355,7 @@ class Game {
|
|
|
8871
9355
|
}
|
|
8872
9356
|
get soundManager() {
|
|
8873
9357
|
if (!this._soundManager) {
|
|
8874
|
-
throw new
|
|
9358
|
+
throw new M2Error("soundManager is undefined");
|
|
8875
9359
|
}
|
|
8876
9360
|
return this._soundManager;
|
|
8877
9361
|
}
|
|
@@ -8880,7 +9364,7 @@ class Game {
|
|
|
8880
9364
|
}
|
|
8881
9365
|
get eventMaterializer() {
|
|
8882
9366
|
if (!this._eventMaterializer) {
|
|
8883
|
-
throw new
|
|
9367
|
+
throw new M2Error("eventMaterializer is undefined");
|
|
8884
9368
|
}
|
|
8885
9369
|
return this._eventMaterializer;
|
|
8886
9370
|
}
|
|
@@ -8905,7 +9389,7 @@ class Game {
|
|
|
8905
9389
|
if (this.studyId && this.studyUuid) {
|
|
8906
9390
|
k = this.studyId.concat(":", this.studyUuid, ":");
|
|
8907
9391
|
} else if (this.studyId || this.studyUuid) {
|
|
8908
|
-
throw new
|
|
9392
|
+
throw new M2Error(
|
|
8909
9393
|
`study_id and study_uuid must both be set or unset. Values are study_id: ${this.studyId}, study_uuid: ${this.studyUuid}`
|
|
8910
9394
|
);
|
|
8911
9395
|
}
|
|
@@ -9036,7 +9520,7 @@ class Game {
|
|
|
9036
9520
|
}
|
|
9037
9521
|
get dataStores() {
|
|
9038
9522
|
if (!this._dataStores) {
|
|
9039
|
-
throw new
|
|
9523
|
+
throw new M2Error("dataStores is undefined");
|
|
9040
9524
|
}
|
|
9041
9525
|
return this._dataStores;
|
|
9042
9526
|
}
|
|
@@ -9069,7 +9553,7 @@ class Game {
|
|
|
9069
9553
|
void 0
|
|
9070
9554
|
);
|
|
9071
9555
|
if (locale === "") {
|
|
9072
|
-
throw new
|
|
9556
|
+
throw new M2Error(
|
|
9073
9557
|
"Empty string in locale. Leave locale undefined or null to prevent localization."
|
|
9074
9558
|
);
|
|
9075
9559
|
}
|
|
@@ -9085,6 +9569,9 @@ class Game {
|
|
|
9085
9569
|
setParameters(additionalParameters) {
|
|
9086
9570
|
const { parameters } = this.options;
|
|
9087
9571
|
Object.keys(additionalParameters).forEach((key) => {
|
|
9572
|
+
if (key === "diagnostics") {
|
|
9573
|
+
return;
|
|
9574
|
+
}
|
|
9088
9575
|
if (key === "eruda") {
|
|
9089
9576
|
const erudaRequested = additionalParameters[key] === true;
|
|
9090
9577
|
if (erudaRequested) {
|
|
@@ -9114,7 +9601,7 @@ class Game {
|
|
|
9114
9601
|
this.options.parameters[key].type
|
|
9115
9602
|
);
|
|
9116
9603
|
} catch (e) {
|
|
9117
|
-
throw new
|
|
9604
|
+
throw new M2Error(
|
|
9118
9605
|
"Error setting parameter " + key + ": " + e.message
|
|
9119
9606
|
);
|
|
9120
9607
|
}
|
|
@@ -9132,7 +9619,7 @@ class Game {
|
|
|
9132
9619
|
}
|
|
9133
9620
|
get canvasKit() {
|
|
9134
9621
|
if (!this._canvasKit) {
|
|
9135
|
-
throw new
|
|
9622
|
+
throw new M2Error("canvaskit is undefined");
|
|
9136
9623
|
}
|
|
9137
9624
|
return this._canvasKit;
|
|
9138
9625
|
}
|
|
@@ -9174,7 +9661,7 @@ class Game {
|
|
|
9174
9661
|
if (typeof node === "string") {
|
|
9175
9662
|
const child = this.freeNodesScene.children.filter((child2) => child2.name === node).find(Boolean);
|
|
9176
9663
|
if (!child) {
|
|
9177
|
-
throw new
|
|
9664
|
+
throw new M2Error(
|
|
9178
9665
|
`cannot remove free node named "${node}" because it is not currently part of the game's free nodes. `
|
|
9179
9666
|
);
|
|
9180
9667
|
}
|
|
@@ -9220,11 +9707,18 @@ class Game {
|
|
|
9220
9707
|
/**
|
|
9221
9708
|
* Adds a scene to the game.
|
|
9222
9709
|
*
|
|
9223
|
-
* @remarks A scene, and its children nodes, cannot be presented unless it
|
|
9710
|
+
* @remarks A scene, and its children nodes, cannot be presented unless it
|
|
9711
|
+
* has been added to the game object. A scene can be added to the game
|
|
9712
|
+
* only once.
|
|
9224
9713
|
*
|
|
9225
9714
|
* @param scene
|
|
9226
9715
|
*/
|
|
9227
9716
|
addScene(scene) {
|
|
9717
|
+
if (this.scenes.includes(scene)) {
|
|
9718
|
+
console.warn(
|
|
9719
|
+
`Game.addScene(): scene ${scene.toString()} has already been added to the game. This will cause unpredictable behavior. This warning will become an error in a future release.`
|
|
9720
|
+
);
|
|
9721
|
+
}
|
|
9228
9722
|
scene.game = this;
|
|
9229
9723
|
scene.needsInitialization = true;
|
|
9230
9724
|
this.scenes.push(scene);
|
|
@@ -9269,7 +9763,7 @@ class Game {
|
|
|
9269
9763
|
if (this.scenes.includes(scene)) {
|
|
9270
9764
|
this.scenes = this.scenes.filter((s) => s !== scene);
|
|
9271
9765
|
} else {
|
|
9272
|
-
throw new
|
|
9766
|
+
throw new M2Error(
|
|
9273
9767
|
`cannot remove scene ${scene} from game because the scene is not currently added to the game`
|
|
9274
9768
|
);
|
|
9275
9769
|
}
|
|
@@ -9277,7 +9771,7 @@ class Game {
|
|
|
9277
9771
|
if (this.scenes.map((s) => s.name).includes(scene)) {
|
|
9278
9772
|
this.scenes = this.scenes.filter((s) => s.name !== scene);
|
|
9279
9773
|
} else {
|
|
9280
|
-
throw new
|
|
9774
|
+
throw new M2Error(
|
|
9281
9775
|
`cannot remove scene named "${scene}" from game because the scene is not currently added to the game`
|
|
9282
9776
|
);
|
|
9283
9777
|
}
|
|
@@ -9297,11 +9791,11 @@ class Game {
|
|
|
9297
9791
|
incomingScene = this.scenes.filter((scene_) => scene_.uuid === scene).find(Boolean);
|
|
9298
9792
|
}
|
|
9299
9793
|
if (incomingScene === void 0) {
|
|
9300
|
-
throw new
|
|
9794
|
+
throw new M2Error(`scene ${scene} not found`);
|
|
9301
9795
|
}
|
|
9302
9796
|
} else {
|
|
9303
9797
|
if (!this.scenes.some((scene_) => scene_ === scene)) {
|
|
9304
|
-
throw new
|
|
9798
|
+
throw new M2Error(
|
|
9305
9799
|
`scene ${scene} exists, but it has not been added to the game object`
|
|
9306
9800
|
);
|
|
9307
9801
|
}
|
|
@@ -9347,7 +9841,7 @@ class Game {
|
|
|
9347
9841
|
if (this.options.parameters !== void 0 && Object.keys(this.options.parameters).includes(parameterName)) {
|
|
9348
9842
|
return this.options.parameters[parameterName].default;
|
|
9349
9843
|
} else {
|
|
9350
|
-
throw new
|
|
9844
|
+
throw new M2Error(`game parameter ${parameterName} not found`);
|
|
9351
9845
|
}
|
|
9352
9846
|
}
|
|
9353
9847
|
/**
|
|
@@ -9424,13 +9918,13 @@ class Game {
|
|
|
9424
9918
|
startingScene = this.scenes.find(Boolean);
|
|
9425
9919
|
}
|
|
9426
9920
|
if (startingScene === void 0) {
|
|
9427
|
-
throw new
|
|
9921
|
+
throw new M2Error(
|
|
9428
9922
|
"cannot start game. entry scene has not been added to the game object."
|
|
9429
9923
|
);
|
|
9430
9924
|
}
|
|
9431
9925
|
this.presentScene(startingScene);
|
|
9432
9926
|
if (this.surface === void 0) {
|
|
9433
|
-
throw new
|
|
9927
|
+
throw new M2Error("CanvasKit surface is undefined");
|
|
9434
9928
|
}
|
|
9435
9929
|
if (this.options.timeStepping) {
|
|
9436
9930
|
this.addTimeSteppingControlsToDom();
|
|
@@ -9668,7 +10162,7 @@ class Game {
|
|
|
9668
10162
|
);
|
|
9669
10163
|
}
|
|
9670
10164
|
if (!this.surface) {
|
|
9671
|
-
throw new
|
|
10165
|
+
throw new M2Error("surface is undefined");
|
|
9672
10166
|
}
|
|
9673
10167
|
const surfaceWidth = this.surface.width();
|
|
9674
10168
|
const surfaceHeight = this.surface.height();
|
|
@@ -9768,7 +10262,7 @@ class Game {
|
|
|
9768
10262
|
if (images[imageName].status === M2ImageStatus.Ready) {
|
|
9769
10263
|
const image = images[imageName].canvaskitImage;
|
|
9770
10264
|
if (!image) {
|
|
9771
|
-
throw new
|
|
10265
|
+
throw new M2Error(`image ${imageName} is undefined`);
|
|
9772
10266
|
}
|
|
9773
10267
|
canvas.drawImage(image, 0, 0);
|
|
9774
10268
|
}
|
|
@@ -9778,7 +10272,7 @@ class Game {
|
|
|
9778
10272
|
const whitePaint = new this.canvasKit.Paint();
|
|
9779
10273
|
whitePaint.setColor(this.canvasKit.Color(255, 255, 255, 1));
|
|
9780
10274
|
if (!this.surface) {
|
|
9781
|
-
throw new
|
|
10275
|
+
throw new M2Error("surface is undefined");
|
|
9782
10276
|
}
|
|
9783
10277
|
canvas.drawRect(
|
|
9784
10278
|
[0, 0, this.surface.width(), this.surface.height()],
|
|
@@ -9806,13 +10300,19 @@ class Game {
|
|
|
9806
10300
|
initData() {
|
|
9807
10301
|
this.trialIndex = 0;
|
|
9808
10302
|
this.data = {
|
|
9809
|
-
trials: new Array()
|
|
10303
|
+
trials: new Array(),
|
|
10304
|
+
scoring: {}
|
|
9810
10305
|
};
|
|
9811
10306
|
const trialSchema = this.options.trialSchema ?? {};
|
|
9812
|
-
const
|
|
10307
|
+
const scoringSchema = this.options.scoringSchema ?? {};
|
|
10308
|
+
this.validateSchema(trialSchema);
|
|
10309
|
+
this.validateSchema(scoringSchema);
|
|
10310
|
+
}
|
|
10311
|
+
validateSchema(schema) {
|
|
10312
|
+
const variables = Object.entries(schema);
|
|
9813
10313
|
for (const [variableName, propertySchema] of variables) {
|
|
9814
10314
|
if (propertySchema.type !== void 0 && !this.propertySchemaDataTypeIsValid(propertySchema.type)) {
|
|
9815
|
-
throw new
|
|
10315
|
+
throw new M2Error(
|
|
9816
10316
|
`invalid schema. variable ${variableName} is type ${propertySchema.type}. type must be number, string, boolean, object, or array`
|
|
9817
10317
|
);
|
|
9818
10318
|
}
|
|
@@ -9839,7 +10339,7 @@ class Game {
|
|
|
9839
10339
|
}
|
|
9840
10340
|
});
|
|
9841
10341
|
} else {
|
|
9842
|
-
throw new
|
|
10342
|
+
throw new M2Error(`Invalid data type: ${propertySchemaType}`);
|
|
9843
10343
|
}
|
|
9844
10344
|
return dataTypeIsValid;
|
|
9845
10345
|
}
|
|
@@ -9881,17 +10381,17 @@ class Game {
|
|
|
9881
10381
|
/**
|
|
9882
10382
|
* Adds data to the game's TrialData object.
|
|
9883
10383
|
*
|
|
9884
|
-
* @remarks
|
|
9885
|
-
* object
|
|
9886
|
-
*
|
|
9887
|
-
*
|
|
10384
|
+
* @remarks `variableName` must be previously defined in the
|
|
10385
|
+
* {@link TrialSchema} object in {@link GameOptions}. The type of the value
|
|
10386
|
+
* must match what was defined in the trial schema, otherwise an error is
|
|
10387
|
+
* thrown.
|
|
9888
10388
|
*
|
|
9889
10389
|
* @param variableName - variable to be set
|
|
9890
10390
|
* @param value - value of the variable to set
|
|
9891
10391
|
*/
|
|
9892
10392
|
addTrialData(variableName, value) {
|
|
9893
10393
|
if (!this.options.trialSchema) {
|
|
9894
|
-
throw new
|
|
10394
|
+
throw new M2Error(
|
|
9895
10395
|
"no trial schema were provided in GameOptions. cannot add trial data"
|
|
9896
10396
|
);
|
|
9897
10397
|
}
|
|
@@ -9902,6 +10402,7 @@ class Game {
|
|
|
9902
10402
|
emptyTrial[variableName2] = null;
|
|
9903
10403
|
}
|
|
9904
10404
|
this.data.trials.push({
|
|
10405
|
+
data_type: "trial",
|
|
9905
10406
|
document_uuid: Uuid.generate(),
|
|
9906
10407
|
study_id: this.studyId ?? null,
|
|
9907
10408
|
study_uuid: this.studyUuid ?? null,
|
|
@@ -9918,7 +10419,7 @@ class Game {
|
|
|
9918
10419
|
});
|
|
9919
10420
|
}
|
|
9920
10421
|
if (!(variableName in this.options.trialSchema)) {
|
|
9921
|
-
throw new
|
|
10422
|
+
throw new M2Error(`trial variable ${variableName} not defined in schema`);
|
|
9922
10423
|
}
|
|
9923
10424
|
let expectedDataTypes;
|
|
9924
10425
|
if (Array.isArray(this.options.trialSchema[variableName].type)) {
|
|
@@ -9938,12 +10439,120 @@ class Game {
|
|
|
9938
10439
|
providedDataType = "null";
|
|
9939
10440
|
}
|
|
9940
10441
|
if (!expectedDataTypes.includes(providedDataType) && !(providedDataType === "number" && Number.isInteger(value) && expectedDataTypes.includes("integer"))) {
|
|
9941
|
-
throw new
|
|
10442
|
+
throw new M2Error(
|
|
9942
10443
|
`type for variable ${variableName} (value: ${value}) is "${providedDataType}". Based on schema for this variable, expected type was "${expectedDataTypes}"`
|
|
9943
10444
|
);
|
|
9944
10445
|
}
|
|
9945
10446
|
this.data.trials[this.trialIndex][variableName] = value;
|
|
9946
10447
|
}
|
|
10448
|
+
/**
|
|
10449
|
+
* Adds data to the game's scoring data.
|
|
10450
|
+
*
|
|
10451
|
+
* @remarks The variable name (or object property names) must be previously
|
|
10452
|
+
* defined in the {@link ScoringSchema} object in {@link GameOptions}.
|
|
10453
|
+
* The type of the value must match what was defined in the scoring schema,
|
|
10454
|
+
* otherwise an error is thrown.
|
|
10455
|
+
*
|
|
10456
|
+
* @param variableNameOrObject - Either a variable name (string) or an object
|
|
10457
|
+
* containing multiple key-value pairs to add all at once.
|
|
10458
|
+
* @param value - Value of the variable to set (only used when
|
|
10459
|
+
* variableNameOrObject is a variable name string).
|
|
10460
|
+
*/
|
|
10461
|
+
addScoringData(variableNameOrObject, value) {
|
|
10462
|
+
if (!this.options.scoringSchema) {
|
|
10463
|
+
throw new M2Error(
|
|
10464
|
+
"no scoring schema were provided in GameOptions. cannot add scoring data"
|
|
10465
|
+
);
|
|
10466
|
+
}
|
|
10467
|
+
if (Object.keys(this.data.scoring).length === 0) {
|
|
10468
|
+
const emptyScoring = {
|
|
10469
|
+
data_type: "scoring",
|
|
10470
|
+
document_uuid: Uuid.generate(),
|
|
10471
|
+
study_id: this.studyId ?? null,
|
|
10472
|
+
study_uuid: this.studyUuid ?? null,
|
|
10473
|
+
session_uuid: this.sessionUuid,
|
|
10474
|
+
activity_uuid: this.uuid,
|
|
10475
|
+
activity_id: this.options.id,
|
|
10476
|
+
activity_publish_uuid: this.options.publishUuid,
|
|
10477
|
+
activity_version: this.options.version,
|
|
10478
|
+
device_timezone: Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone ?? "",
|
|
10479
|
+
device_timezone_offset_minutes: (/* @__PURE__ */ new Date()).getTimezoneOffset(),
|
|
10480
|
+
locale: this.i18n?.locale ?? null,
|
|
10481
|
+
device_metadata: this.getDeviceMetadata()
|
|
10482
|
+
};
|
|
10483
|
+
const variables = Object.entries(this.options.scoringSchema);
|
|
10484
|
+
for (const [variableName2] of variables) {
|
|
10485
|
+
emptyScoring[variableName2] = null;
|
|
10486
|
+
}
|
|
10487
|
+
this.data.scoring = emptyScoring;
|
|
10488
|
+
}
|
|
10489
|
+
if (typeof variableNameOrObject === "object") {
|
|
10490
|
+
let scoringObject;
|
|
10491
|
+
if (Array.isArray(variableNameOrObject)) {
|
|
10492
|
+
if (variableNameOrObject.length !== 1) {
|
|
10493
|
+
console.warn(
|
|
10494
|
+
`Array of objects passed to addScoringData() is length ${variableNameOrObject.length}. This is likely an error in the assessment's code for calculateScores().`
|
|
10495
|
+
);
|
|
10496
|
+
}
|
|
10497
|
+
scoringObject = variableNameOrObject[0];
|
|
10498
|
+
} else {
|
|
10499
|
+
scoringObject = variableNameOrObject;
|
|
10500
|
+
}
|
|
10501
|
+
for (const [key, val] of Object.entries(scoringObject)) {
|
|
10502
|
+
this.validateAndSetScoringVariable(key, val);
|
|
10503
|
+
}
|
|
10504
|
+
return;
|
|
10505
|
+
}
|
|
10506
|
+
const variableName = variableNameOrObject;
|
|
10507
|
+
if (value === void 0) {
|
|
10508
|
+
throw new M2Error(
|
|
10509
|
+
"Value must be provided when adding a single scoring variable"
|
|
10510
|
+
);
|
|
10511
|
+
}
|
|
10512
|
+
this.validateAndSetScoringVariable(variableName, value);
|
|
10513
|
+
}
|
|
10514
|
+
/**
|
|
10515
|
+
* Helper method to validate and set a single scoring variable
|
|
10516
|
+
*
|
|
10517
|
+
* @param variableName - Name of the variable to set
|
|
10518
|
+
* @param value - Value to set
|
|
10519
|
+
* @private
|
|
10520
|
+
*/
|
|
10521
|
+
validateAndSetScoringVariable(variableName, value) {
|
|
10522
|
+
if (!this.options.scoringSchema) {
|
|
10523
|
+
throw new M2Error(
|
|
10524
|
+
"no scoring schema were provided in GameOptions. cannot add scoring data"
|
|
10525
|
+
);
|
|
10526
|
+
}
|
|
10527
|
+
if (!(variableName in this.options.scoringSchema)) {
|
|
10528
|
+
throw new M2Error(
|
|
10529
|
+
`scoring variable ${variableName} not defined in schema`
|
|
10530
|
+
);
|
|
10531
|
+
}
|
|
10532
|
+
let expectedDataTypes;
|
|
10533
|
+
if (Array.isArray(this.options.scoringSchema[variableName].type)) {
|
|
10534
|
+
expectedDataTypes = this.options.scoringSchema[variableName].type;
|
|
10535
|
+
} else {
|
|
10536
|
+
expectedDataTypes = [
|
|
10537
|
+
this.options.scoringSchema[variableName].type
|
|
10538
|
+
];
|
|
10539
|
+
}
|
|
10540
|
+
let providedDataType = typeof value;
|
|
10541
|
+
if (providedDataType === "object") {
|
|
10542
|
+
if (Object.prototype.toString.call(value) === "[object Array]") {
|
|
10543
|
+
providedDataType = "array";
|
|
10544
|
+
}
|
|
10545
|
+
}
|
|
10546
|
+
if (value === void 0 || value === null) {
|
|
10547
|
+
providedDataType = "null";
|
|
10548
|
+
}
|
|
10549
|
+
if (!expectedDataTypes.includes(providedDataType) && !(providedDataType === "number" && Number.isInteger(value) && expectedDataTypes.includes("integer"))) {
|
|
10550
|
+
throw new M2Error(
|
|
10551
|
+
`type for variable ${variableName} (value: ${value}) is "${providedDataType}". Based on schema for this variable, expected type was "${expectedDataTypes}"`
|
|
10552
|
+
);
|
|
10553
|
+
}
|
|
10554
|
+
this.data.scoring[variableName] = value;
|
|
10555
|
+
}
|
|
9947
10556
|
/**
|
|
9948
10557
|
* Adds custom trial schema to the game's trialSchema object.
|
|
9949
10558
|
*
|
|
@@ -9958,7 +10567,7 @@ class Game {
|
|
|
9958
10567
|
const keys = Object.keys(schema);
|
|
9959
10568
|
keys.forEach((key) => {
|
|
9960
10569
|
if (!this.options.trialSchema) {
|
|
9961
|
-
throw new
|
|
10570
|
+
throw new M2Error("trial schema is undefined");
|
|
9962
10571
|
}
|
|
9963
10572
|
this.options.trialSchema[key] = schema[key];
|
|
9964
10573
|
});
|
|
@@ -9990,10 +10599,10 @@ class Game {
|
|
|
9990
10599
|
*/
|
|
9991
10600
|
addStaticTrialData(variableName, value) {
|
|
9992
10601
|
if (!this.options.trialSchema) {
|
|
9993
|
-
throw new
|
|
10602
|
+
throw new M2Error("trial schema is undefined");
|
|
9994
10603
|
}
|
|
9995
10604
|
if (this.options.trialSchema[variableName] === void 0) {
|
|
9996
|
-
throw new
|
|
10605
|
+
throw new M2Error(`trial variable ${variableName} not defined in schema`);
|
|
9997
10606
|
}
|
|
9998
10607
|
this.staticTrialSchema[variableName] = value;
|
|
9999
10608
|
}
|
|
@@ -10042,6 +10651,36 @@ class Game {
|
|
|
10042
10651
|
};
|
|
10043
10652
|
this.raiseActivityEventOnListeners(resultsEvent);
|
|
10044
10653
|
}
|
|
10654
|
+
/**
|
|
10655
|
+
* Marks scoring as complete.
|
|
10656
|
+
*
|
|
10657
|
+
* @remarks This method must be called after the game has finished adding
|
|
10658
|
+
* scores using addScoringData(). Calling will trigger the onActivityResults
|
|
10659
|
+
* callback function, if one was provided in SessionOptions. This is how the
|
|
10660
|
+
* game communicates scoring data to the parent session, which can then save
|
|
10661
|
+
* or process the data. It is the responsibility of the the game programmer
|
|
10662
|
+
* to call this at the appropriate time. It is not triggered automatically.
|
|
10663
|
+
*/
|
|
10664
|
+
scoringComplete() {
|
|
10665
|
+
const resultsEvent = {
|
|
10666
|
+
type: M2EventType.ActivityData,
|
|
10667
|
+
...M2c2KitHelpers.createFrameUpdateTimestamps(),
|
|
10668
|
+
target: this,
|
|
10669
|
+
newData: this.data.scoring,
|
|
10670
|
+
newDataSchema: this.makeScoringDataSchema(),
|
|
10671
|
+
data: this.data.scoring,
|
|
10672
|
+
dataSchema: this.makeScoringDataSchema(),
|
|
10673
|
+
dataType: "Scoring",
|
|
10674
|
+
activityConfiguration: this.makeGameActivityConfiguration(
|
|
10675
|
+
this.options.parameters ?? {}
|
|
10676
|
+
),
|
|
10677
|
+
activityConfigurationSchema: this.makeGameActivityConfigurationSchema(
|
|
10678
|
+
this.options.parameters ?? {}
|
|
10679
|
+
),
|
|
10680
|
+
activityMetrics: this.gameMetrics
|
|
10681
|
+
};
|
|
10682
|
+
this.raiseActivityEventOnListeners(resultsEvent);
|
|
10683
|
+
}
|
|
10045
10684
|
makeNewGameDataSchema() {
|
|
10046
10685
|
const newDataSchema = {
|
|
10047
10686
|
description: `A single trial and metadata from the assessment ${this.name}.`,
|
|
@@ -10144,6 +10783,20 @@ class Game {
|
|
|
10144
10783
|
properties: result
|
|
10145
10784
|
};
|
|
10146
10785
|
}
|
|
10786
|
+
makeScoringDataSchema() {
|
|
10787
|
+
const scoringDataSchema = {
|
|
10788
|
+
description: `Scoring data and metadata from the assessment ${this.name}.`,
|
|
10789
|
+
$comment: `Activity identifier: ${this.options.id}, version: ${this.options.version}.`,
|
|
10790
|
+
$schema: "https://json-schema.org/draft/2019-09/schema",
|
|
10791
|
+
type: "object",
|
|
10792
|
+
properties: {
|
|
10793
|
+
...this.automaticScoringSchema,
|
|
10794
|
+
...this.options.scoringSchema,
|
|
10795
|
+
device_metadata: deviceMetadataSchema
|
|
10796
|
+
}
|
|
10797
|
+
};
|
|
10798
|
+
return scoringDataSchema;
|
|
10799
|
+
}
|
|
10147
10800
|
/**
|
|
10148
10801
|
* Should be called when current game has ended successfully.
|
|
10149
10802
|
*
|
|
@@ -10217,7 +10870,7 @@ class Game {
|
|
|
10217
10870
|
(canvas) => !canvas.id.startsWith("m2c2kit-scratch-canvas")
|
|
10218
10871
|
);
|
|
10219
10872
|
if (canvases.length === 0) {
|
|
10220
|
-
throw new
|
|
10873
|
+
throw new M2Error("no html canvas tag was found in the html");
|
|
10221
10874
|
}
|
|
10222
10875
|
const m2c2kitCanvas = canvases.filter(
|
|
10223
10876
|
(c) => c.id === "m2c2kit-canvas"
|
|
@@ -10236,7 +10889,7 @@ class Game {
|
|
|
10236
10889
|
} else {
|
|
10237
10890
|
htmlCanvas = document.getElementById(canvasId);
|
|
10238
10891
|
if (htmlCanvas === void 0) {
|
|
10239
|
-
throw new
|
|
10892
|
+
throw new M2Error(
|
|
10240
10893
|
`could not find canvas HTML element with id "${canvasId}"`
|
|
10241
10894
|
);
|
|
10242
10895
|
}
|
|
@@ -10262,7 +10915,7 @@ class Game {
|
|
|
10262
10915
|
}
|
|
10263
10916
|
setupCanvasKitSurface() {
|
|
10264
10917
|
if (this.htmlCanvas === void 0) {
|
|
10265
|
-
throw new
|
|
10918
|
+
throw new M2Error("main html canvas is undefined");
|
|
10266
10919
|
}
|
|
10267
10920
|
window.logWebGl = this.options.logWebGl;
|
|
10268
10921
|
this.interceptWebGlCalls();
|
|
@@ -10274,7 +10927,7 @@ class Game {
|
|
|
10274
10927
|
}
|
|
10275
10928
|
const surface = this.canvasKit.MakeWebGLCanvasSurface(this.htmlCanvas);
|
|
10276
10929
|
if (surface === null) {
|
|
10277
|
-
throw new
|
|
10930
|
+
throw new M2Error(
|
|
10278
10931
|
`could not make CanvasKit surface from canvas HTML element`
|
|
10279
10932
|
);
|
|
10280
10933
|
}
|
|
@@ -10332,7 +10985,7 @@ class Game {
|
|
|
10332
10985
|
}
|
|
10333
10986
|
setupCanvasDomEventHandlers() {
|
|
10334
10987
|
if (this.htmlCanvas === void 0) {
|
|
10335
|
-
throw new
|
|
10988
|
+
throw new M2Error("main html canvas is undefined");
|
|
10336
10989
|
}
|
|
10337
10990
|
this.htmlCanvas.addEventListener(
|
|
10338
10991
|
"pointerdown",
|
|
@@ -10361,7 +11014,7 @@ class Game {
|
|
|
10361
11014
|
}
|
|
10362
11015
|
loop(canvas) {
|
|
10363
11016
|
if (!this.surface) {
|
|
10364
|
-
throw new
|
|
11017
|
+
throw new M2Error("surface is undefined");
|
|
10365
11018
|
}
|
|
10366
11019
|
if (this.warmupFunctionQueue.length > 0) {
|
|
10367
11020
|
const warmup = this.warmupFunctionQueue.shift();
|
|
@@ -10390,7 +11043,9 @@ class Game {
|
|
|
10390
11043
|
this.animationFramesRequested++;
|
|
10391
11044
|
if (!this.limitFps || this.animationFramesRequested % Math.round(60 / Constants.LIMITED_FPS_RATE) === 0) {
|
|
10392
11045
|
if (this.currentScene === void 0 && this.incomingSceneTransitions.length === 0 && this.eventStore.mode !== EventStoreMode.Replay) {
|
|
10393
|
-
throw new
|
|
11046
|
+
throw new M2Error(
|
|
11047
|
+
"Can not run game without a current or incoming scene"
|
|
11048
|
+
);
|
|
10394
11049
|
}
|
|
10395
11050
|
this.updateGameTime();
|
|
10396
11051
|
if (this.eventStore.mode === EventStoreMode.Replay) {
|
|
@@ -10436,7 +11091,7 @@ class Game {
|
|
|
10436
11091
|
if (this.snapshots.length > 0 || incomingSceneTransitions[0].transition.type === TransitionType.None) {
|
|
10437
11092
|
const incomingSceneTransition = incomingSceneTransitions.shift();
|
|
10438
11093
|
if (incomingSceneTransition === void 0) {
|
|
10439
|
-
throw new
|
|
11094
|
+
throw new M2Error("no incoming scene transition");
|
|
10440
11095
|
}
|
|
10441
11096
|
const incomingScene = incomingSceneTransition.scene;
|
|
10442
11097
|
const transition = incomingSceneTransition.transition;
|
|
@@ -10452,7 +11107,7 @@ class Game {
|
|
|
10452
11107
|
}
|
|
10453
11108
|
this.currentSceneSnapshot = this.snapshots.shift();
|
|
10454
11109
|
if (!this.currentSceneSnapshot) {
|
|
10455
|
-
throw new
|
|
11110
|
+
throw new M2Error("No snapshot available for outgoing scene");
|
|
10456
11111
|
}
|
|
10457
11112
|
const outgoingScene = this.createOutgoingScene(this.currentSceneSnapshot);
|
|
10458
11113
|
outgoingScene._active = true;
|
|
@@ -10508,12 +11163,12 @@ class Game {
|
|
|
10508
11163
|
*/
|
|
10509
11164
|
async registerPlugin(plugin) {
|
|
10510
11165
|
if (plugin.type !== ActivityType.Game) {
|
|
10511
|
-
throw new
|
|
11166
|
+
throw new M2Error(
|
|
10512
11167
|
`registerPlugin(): plugin ${plugin.id} is not a game plugin. It is a ${plugin.type} plugin.`
|
|
10513
11168
|
);
|
|
10514
11169
|
}
|
|
10515
11170
|
if (this.plugins.includes(plugin) || this.plugins.map((p) => p.id).includes(plugin.id)) {
|
|
10516
|
-
throw new
|
|
11171
|
+
throw new M2Error(
|
|
10517
11172
|
`registerPlugin(): plugin ${plugin.id} already registered.`
|
|
10518
11173
|
);
|
|
10519
11174
|
}
|
|
@@ -10593,13 +11248,13 @@ class Game {
|
|
|
10593
11248
|
}
|
|
10594
11249
|
takeCurrentSceneSnapshot() {
|
|
10595
11250
|
if (this.surface === void 0) {
|
|
10596
|
-
throw new
|
|
11251
|
+
throw new M2Error("CanvasKit surface is undefined");
|
|
10597
11252
|
}
|
|
10598
11253
|
return this.surface.makeImageSnapshot();
|
|
10599
11254
|
}
|
|
10600
11255
|
handlePendingScreenshot(pendingScreenshot) {
|
|
10601
11256
|
if (!this.surface) {
|
|
10602
|
-
throw new
|
|
11257
|
+
throw new M2Error("no surface");
|
|
10603
11258
|
}
|
|
10604
11259
|
let image;
|
|
10605
11260
|
if (pendingScreenshot.rect.length == 4) {
|
|
@@ -10632,7 +11287,7 @@ class Game {
|
|
|
10632
11287
|
*/
|
|
10633
11288
|
takeScreenshot(sx, sy, sw, sh) {
|
|
10634
11289
|
if (!this.surface) {
|
|
10635
|
-
throw new
|
|
11290
|
+
throw new M2Error("no canvaskit surface. unable to take screenshot.");
|
|
10636
11291
|
}
|
|
10637
11292
|
const missingParametersCount = [sx, sy, sw, sh].map((x) => x ? 0 : 1).reduce((a, b) => a + b);
|
|
10638
11293
|
return new Promise((resolve, reject) => {
|
|
@@ -10836,12 +11491,12 @@ class Game {
|
|
|
10836
11491
|
);
|
|
10837
11492
|
break;
|
|
10838
11493
|
default:
|
|
10839
|
-
throw new
|
|
11494
|
+
throw new M2Error("unknown transition direction");
|
|
10840
11495
|
}
|
|
10841
11496
|
break;
|
|
10842
11497
|
}
|
|
10843
11498
|
default:
|
|
10844
|
-
throw new
|
|
11499
|
+
throw new M2Error("unknown transition type");
|
|
10845
11500
|
}
|
|
10846
11501
|
}
|
|
10847
11502
|
drawFps(canvas) {
|
|
@@ -10849,7 +11504,7 @@ class Game {
|
|
|
10849
11504
|
const drawScale = m2c2Globals.canvasScale;
|
|
10850
11505
|
canvas.scale(1 / drawScale, 1 / drawScale);
|
|
10851
11506
|
if (!this.fpsTextFont || !this.fpsTextPaint) {
|
|
10852
|
-
throw new
|
|
11507
|
+
throw new M2Error("fps font or paint is undefined");
|
|
10853
11508
|
}
|
|
10854
11509
|
canvas.drawText(
|
|
10855
11510
|
"FPS: " + this.fpsRate.toFixed(2),
|
|
@@ -10879,12 +11534,12 @@ class Game {
|
|
|
10879
11534
|
}
|
|
10880
11535
|
const node = nodes.filter((node2) => node2.name === nodeName).find(Boolean);
|
|
10881
11536
|
if (node === void 0) {
|
|
10882
|
-
throw new
|
|
11537
|
+
throw new M2Error(
|
|
10883
11538
|
`could not create event listener. node with name ${nodeName} could not be found in the game node tree`
|
|
10884
11539
|
);
|
|
10885
11540
|
}
|
|
10886
11541
|
if (!Object.values(M2EventType).includes(type)) {
|
|
10887
|
-
throw new
|
|
11542
|
+
throw new M2Error(
|
|
10888
11543
|
`game ${this.id}: could not create event listener. event type ${type} is not known`
|
|
10889
11544
|
);
|
|
10890
11545
|
}
|
|
@@ -10923,7 +11578,7 @@ class Game {
|
|
|
10923
11578
|
return;
|
|
10924
11579
|
}
|
|
10925
11580
|
if (!this.htmlCanvas) {
|
|
10926
|
-
throw new
|
|
11581
|
+
throw new M2Error("main html canvas is undefined");
|
|
10927
11582
|
}
|
|
10928
11583
|
const domPointerDownEvent = {
|
|
10929
11584
|
type: "DomPointerDown",
|
|
@@ -11608,7 +12263,7 @@ const _LegacyTimer = class _LegacyTimer {
|
|
|
11608
12263
|
this._timers.push(timer);
|
|
11609
12264
|
} else {
|
|
11610
12265
|
if (timer.stopped == false) {
|
|
11611
|
-
throw new
|
|
12266
|
+
throw new M2Error(
|
|
11612
12267
|
`can't start timer. timer with name ${name} is already started`
|
|
11613
12268
|
);
|
|
11614
12269
|
}
|
|
@@ -11630,12 +12285,12 @@ const _LegacyTimer = class _LegacyTimer {
|
|
|
11630
12285
|
static stop(name) {
|
|
11631
12286
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
11632
12287
|
if (timer === void 0) {
|
|
11633
|
-
throw new
|
|
12288
|
+
throw new M2Error(
|
|
11634
12289
|
`can't stop timer. timer with name ${name} does not exist`
|
|
11635
12290
|
);
|
|
11636
12291
|
}
|
|
11637
12292
|
if (timer.stopped === true) {
|
|
11638
|
-
throw new
|
|
12293
|
+
throw new M2Error(
|
|
11639
12294
|
`can't stop timer. timer with name ${name} is already stopped`
|
|
11640
12295
|
);
|
|
11641
12296
|
}
|
|
@@ -11658,7 +12313,7 @@ const _LegacyTimer = class _LegacyTimer {
|
|
|
11658
12313
|
static restart(name) {
|
|
11659
12314
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
11660
12315
|
if (timer === void 0) {
|
|
11661
|
-
throw new
|
|
12316
|
+
throw new M2Error(
|
|
11662
12317
|
`can't restart timer. timer with name ${name} does not exist`
|
|
11663
12318
|
);
|
|
11664
12319
|
}
|
|
@@ -11681,7 +12336,7 @@ const _LegacyTimer = class _LegacyTimer {
|
|
|
11681
12336
|
static elapsed(name) {
|
|
11682
12337
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
11683
12338
|
if (timer === void 0) {
|
|
11684
|
-
throw new
|
|
12339
|
+
throw new M2Error(
|
|
11685
12340
|
`can't get elapsed time. timer with name ${name} does not exist`
|
|
11686
12341
|
);
|
|
11687
12342
|
}
|
|
@@ -11705,7 +12360,7 @@ const _LegacyTimer = class _LegacyTimer {
|
|
|
11705
12360
|
static remove(name) {
|
|
11706
12361
|
const timer = this._timers.filter((t) => t.name === name).find(Boolean);
|
|
11707
12362
|
if (timer === void 0) {
|
|
11708
|
-
throw new
|
|
12363
|
+
throw new M2Error(
|
|
11709
12364
|
`can't remove timer. timer with name ${name} does not exist`
|
|
11710
12365
|
);
|
|
11711
12366
|
}
|
|
@@ -11765,7 +12420,7 @@ class RandomDraws {
|
|
|
11765
12420
|
*/
|
|
11766
12421
|
static FromRangeWithoutReplacement(n, minimumInclusive, maximumInclusive) {
|
|
11767
12422
|
if (n > maximumInclusive - minimumInclusive + 1) {
|
|
11768
|
-
throw new
|
|
12423
|
+
throw new M2Error(
|
|
11769
12424
|
`number of requested draws (n = ${n}) is greater than number of integers in range [ ${minimumInclusive}, ${maximumInclusive}]`
|
|
11770
12425
|
);
|
|
11771
12426
|
}
|
|
@@ -11900,7 +12555,7 @@ class SoundPlayer extends M2Node {
|
|
|
11900
12555
|
*/
|
|
11901
12556
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
11902
12557
|
duplicate(newName) {
|
|
11903
|
-
throw new
|
|
12558
|
+
throw new M2Error("Method not implemented.");
|
|
11904
12559
|
}
|
|
11905
12560
|
}
|
|
11906
12561
|
|
|
@@ -11958,7 +12613,7 @@ class SoundRecorder extends M2Node {
|
|
|
11958
12613
|
*/
|
|
11959
12614
|
async start() {
|
|
11960
12615
|
if (this.isRecording) {
|
|
11961
|
-
throw new
|
|
12616
|
+
throw new M2Error(
|
|
11962
12617
|
"cannot start SoundRecorder because it is already started."
|
|
11963
12618
|
);
|
|
11964
12619
|
}
|
|
@@ -11966,7 +12621,7 @@ class SoundRecorder extends M2Node {
|
|
|
11966
12621
|
this.endIso8601Timestamp = void 0;
|
|
11967
12622
|
const supportedMimeTypes = this.getMediaRecorderSupportedAudioMimeTypes();
|
|
11968
12623
|
if (supportedMimeTypes.length === 0) {
|
|
11969
|
-
throw new
|
|
12624
|
+
throw new M2Error(
|
|
11970
12625
|
"SoundRecorder found no supported MIME types for MediaRecorder."
|
|
11971
12626
|
);
|
|
11972
12627
|
}
|
|
@@ -11980,10 +12635,10 @@ class SoundRecorder extends M2Node {
|
|
|
11980
12635
|
audio: this.audioTrackConstraints ? this.audioTrackConstraints : true
|
|
11981
12636
|
});
|
|
11982
12637
|
} catch (error) {
|
|
11983
|
-
throw new
|
|
12638
|
+
throw new M2Error(`Error getting user media: ${error}.`);
|
|
11984
12639
|
}
|
|
11985
12640
|
if (!stream) {
|
|
11986
|
-
throw new
|
|
12641
|
+
throw new M2Error("no stream.");
|
|
11987
12642
|
}
|
|
11988
12643
|
const audioTracks = stream.getAudioTracks();
|
|
11989
12644
|
this.mediaTrackSettings = audioTracks?.map((track) => track.getSettings());
|
|
@@ -11992,7 +12647,7 @@ class SoundRecorder extends M2Node {
|
|
|
11992
12647
|
this.audioChunks.push(event.data);
|
|
11993
12648
|
};
|
|
11994
12649
|
this.mediaRecorder.onerror = (event) => {
|
|
11995
|
-
throw new
|
|
12650
|
+
throw new M2Error(
|
|
11996
12651
|
`MediaRecorder error: ${event?.error?.message} ${event?.message}`
|
|
11997
12652
|
);
|
|
11998
12653
|
};
|
|
@@ -12015,15 +12670,17 @@ class SoundRecorder extends M2Node {
|
|
|
12015
12670
|
*/
|
|
12016
12671
|
async stop() {
|
|
12017
12672
|
if (!this.isRecording) {
|
|
12018
|
-
throw new
|
|
12673
|
+
throw new M2Error(
|
|
12674
|
+
"cannot stop SoundRecorder because it has not started."
|
|
12675
|
+
);
|
|
12019
12676
|
}
|
|
12020
12677
|
return new Promise((resolve) => {
|
|
12021
12678
|
if (!this.mediaRecorder) {
|
|
12022
|
-
throw new
|
|
12679
|
+
throw new M2Error("no media recorder");
|
|
12023
12680
|
}
|
|
12024
12681
|
this.mediaRecorder.onstop = async () => {
|
|
12025
12682
|
if (!this.mimeType) {
|
|
12026
|
-
throw new
|
|
12683
|
+
throw new M2Error("no mimeType");
|
|
12027
12684
|
}
|
|
12028
12685
|
this._isRecording = false;
|
|
12029
12686
|
this._isPaused = false;
|
|
@@ -12050,10 +12707,12 @@ class SoundRecorder extends M2Node {
|
|
|
12050
12707
|
}
|
|
12051
12708
|
pause() {
|
|
12052
12709
|
if (!this.isRecording) {
|
|
12053
|
-
throw new
|
|
12710
|
+
throw new M2Error(
|
|
12711
|
+
"cannot pause SoundRecorder because it is not started."
|
|
12712
|
+
);
|
|
12054
12713
|
}
|
|
12055
12714
|
if (this.isPaused) {
|
|
12056
|
-
throw new
|
|
12715
|
+
throw new M2Error(
|
|
12057
12716
|
"cannot pause SoundRecorder because it is already paused."
|
|
12058
12717
|
);
|
|
12059
12718
|
}
|
|
@@ -12063,10 +12722,14 @@ class SoundRecorder extends M2Node {
|
|
|
12063
12722
|
}
|
|
12064
12723
|
resume() {
|
|
12065
12724
|
if (!this.isRecording) {
|
|
12066
|
-
throw new
|
|
12725
|
+
throw new M2Error(
|
|
12726
|
+
"cannot resume SoundRecorder because it is not started."
|
|
12727
|
+
);
|
|
12067
12728
|
}
|
|
12068
12729
|
if (!this.isPaused) {
|
|
12069
|
-
throw new
|
|
12730
|
+
throw new M2Error(
|
|
12731
|
+
"cannot resume SoundRecorder because it is not paused."
|
|
12732
|
+
);
|
|
12070
12733
|
}
|
|
12071
12734
|
this.mediaRecorder?.resume();
|
|
12072
12735
|
this._isPaused = false;
|
|
@@ -12225,7 +12888,7 @@ class SoundRecorder extends M2Node {
|
|
|
12225
12888
|
reader.onloadend = () => {
|
|
12226
12889
|
const base64WithoutPrefix = reader.result?.toString().split(",").pop();
|
|
12227
12890
|
if (base64WithoutPrefix === void 0) {
|
|
12228
|
-
throw new
|
|
12891
|
+
throw new M2Error("base64WithoutPrefix is undefined.");
|
|
12229
12892
|
}
|
|
12230
12893
|
resolve(base64WithoutPrefix);
|
|
12231
12894
|
};
|
|
@@ -12259,7 +12922,7 @@ class SoundRecorder extends M2Node {
|
|
|
12259
12922
|
* provided, name will be the new uuid
|
|
12260
12923
|
*/
|
|
12261
12924
|
duplicate(newName) {
|
|
12262
|
-
throw new
|
|
12925
|
+
throw new M2Error(`Method not implemented. ${newName}`);
|
|
12263
12926
|
}
|
|
12264
12927
|
}
|
|
12265
12928
|
|
|
@@ -12271,7 +12934,7 @@ class Story {
|
|
|
12271
12934
|
}
|
|
12272
12935
|
}
|
|
12273
12936
|
|
|
12274
|
-
console.log("\u26AA @m2c2kit/core version 0.3.
|
|
12937
|
+
console.log("\u26AA @m2c2kit/core version 0.3.30 (9f27c146)");
|
|
12275
12938
|
|
|
12276
|
-
export { Action, ActivityType, CanvasKitHelpers, ColorfulMutablePath, Composite, Constants, ConstraintType, CustomAction, Dimensions, Easings, Equal, Equals, EventStore, EventStoreMode, FadeAlphaAction, FontManager, Game, GroupAction, I18n, ImageManager, Label, LabelHorizontalAlignmentMode, LayoutConstraint, LegacyTimer, M2EventType, M2ImageStatus, M2Node, M2NodeFactory, M2NodeType, M2SoundStatus, M2c2KitHelpers, MoveAction, MutablePath, NoneTransition, PlayAction, RandomDraws, RepeatAction, RepeatForeverAction, RotateAction, ScaleAction, Scene, SceneTransition, SequenceAction, Shape, ShapeType, SlideTransition, SoundManager, SoundPlayer, SoundRecorder, Sprite, Story, TextLine, Timer, Transition, TransitionDirection, TransitionType, Uuid, WaitAction, WebColors, WebGlInfo, handleInterfaceOptions };
|
|
12939
|
+
export { Action, ActivityType, CanvasKitHelpers, ColorfulMutablePath, Composite, Constants, ConstraintType, CustomAction, Dimensions, Easings, Equal, Equals, EventStore, EventStoreMode, FadeAlphaAction, FontManager, Game, GroupAction, I18n, ImageManager, Label, LabelHorizontalAlignmentMode, LayoutConstraint, LegacyTimer, M2Error, M2EventType, M2ImageStatus, M2Node, M2NodeFactory, M2NodeType, M2SoundStatus, M2c2KitHelpers, MoveAction, MutablePath, NoneTransition, PlayAction, RandomDraws, RepeatAction, RepeatForeverAction, RotateAction, ScaleAction, Scene, SceneTransition, SequenceAction, Shape, ShapeType, SlideTransition, SoundManager, SoundPlayer, SoundRecorder, Sprite, Story, TextLine, Timer, Transition, TransitionDirection, TransitionType, Uuid, WaitAction, WebColors, WebGlInfo, handleInterfaceOptions };
|
|
12277
12940
|
//# sourceMappingURL=index.js.map
|