@yamat47/playmaker 0.1.0 → 0.2.0
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/README.md +19 -18
- package/dist/playmaker.d.ts +139 -107
- package/dist/playmaker.js +872 -770
- package/dist/playmaker.js.map +1 -1
- package/package.json +2 -2
package/dist/playmaker.js
CHANGED
|
@@ -1,8 +1,70 @@
|
|
|
1
|
+
// src/browser/i18n/ja.ts
|
|
2
|
+
var e = {
|
|
3
|
+
tool: {
|
|
4
|
+
select: "選択",
|
|
5
|
+
"add-player": "選手を追加",
|
|
6
|
+
"draw-line": "線を描く"
|
|
7
|
+
},
|
|
8
|
+
undo: "元に戻す",
|
|
9
|
+
redo: "やり直す",
|
|
10
|
+
delete: "削除",
|
|
11
|
+
finishLine: "線を確定",
|
|
12
|
+
cancel: "取消",
|
|
13
|
+
zone: {
|
|
14
|
+
"own-redzone": "自陣RZ",
|
|
15
|
+
middle: "中央",
|
|
16
|
+
redzone: "相手RZ"
|
|
17
|
+
},
|
|
18
|
+
formation: "フォーメーション",
|
|
19
|
+
loadFormation: "フォーメーション読込…",
|
|
20
|
+
side: {
|
|
21
|
+
offense: "オフェンス",
|
|
22
|
+
defense: "ディフェンス"
|
|
23
|
+
},
|
|
24
|
+
formationLimit: (e) => `置くと ${e} 人を超えるフォーメーションは読み込めません`,
|
|
25
|
+
playerLimit: (e) => `選手は ${e} 人までです`,
|
|
26
|
+
lineLimit: (e) => `線は ${e} 本までです`,
|
|
27
|
+
selectionHint: "対象を選択するとプロパティを編集できます",
|
|
28
|
+
player: "選手",
|
|
29
|
+
line: "線",
|
|
30
|
+
label: "ラベル",
|
|
31
|
+
shape: "形状",
|
|
32
|
+
color: "色",
|
|
33
|
+
kind: "種別",
|
|
34
|
+
interpolation: "補間",
|
|
35
|
+
width: "太さ",
|
|
36
|
+
shapes: {
|
|
37
|
+
circle: "丸",
|
|
38
|
+
square: "四角"
|
|
39
|
+
},
|
|
40
|
+
fills: {
|
|
41
|
+
outline: "枠線",
|
|
42
|
+
solid: "塗りつぶし"
|
|
43
|
+
},
|
|
44
|
+
kinds: {
|
|
45
|
+
route: "ルート",
|
|
46
|
+
block: "ブロック",
|
|
47
|
+
motion: "モーション"
|
|
48
|
+
},
|
|
49
|
+
interpolations: {
|
|
50
|
+
straight: "直線",
|
|
51
|
+
bezier: "曲線"
|
|
52
|
+
},
|
|
53
|
+
colors: {
|
|
54
|
+
swatch1: "黒",
|
|
55
|
+
swatch2: "赤",
|
|
56
|
+
swatch3: "青",
|
|
57
|
+
swatch4: "緑"
|
|
58
|
+
},
|
|
59
|
+
swatch: (e, t) => `${e}の${t}`,
|
|
60
|
+
reset: "既定",
|
|
61
|
+
resetField: (e) => `${e}を既定に戻す`
|
|
62
|
+
};
|
|
1
63
|
// src/common/base/lifecycle.ts
|
|
2
|
-
function
|
|
64
|
+
function t(e) {
|
|
3
65
|
return { dispose: e };
|
|
4
66
|
}
|
|
5
|
-
var
|
|
67
|
+
var n = class {
|
|
6
68
|
items = /* @__PURE__ */ new Set();
|
|
7
69
|
disposed = !1;
|
|
8
70
|
get isDisposed() {
|
|
@@ -18,8 +80,8 @@ var t = class {
|
|
|
18
80
|
this.items.clear();
|
|
19
81
|
}
|
|
20
82
|
}
|
|
21
|
-
},
|
|
22
|
-
_store = new
|
|
83
|
+
}, r = class {
|
|
84
|
+
_store = new n();
|
|
23
85
|
get isDisposed() {
|
|
24
86
|
return this._store.isDisposed;
|
|
25
87
|
}
|
|
@@ -29,30 +91,30 @@ var t = class {
|
|
|
29
91
|
dispose() {
|
|
30
92
|
this._store.dispose();
|
|
31
93
|
}
|
|
32
|
-
},
|
|
33
|
-
function i(e) {
|
|
34
|
-
return Math.round(e / r) * r + 0;
|
|
35
|
-
}
|
|
94
|
+
}, i = .5;
|
|
36
95
|
function a(e) {
|
|
96
|
+
return Math.round(e / i) * i + 0;
|
|
97
|
+
}
|
|
98
|
+
function o(e) {
|
|
37
99
|
return {
|
|
38
|
-
lateralYard:
|
|
39
|
-
downfieldYard:
|
|
100
|
+
lateralYard: a(e.lateralYard),
|
|
101
|
+
downfieldYard: a(e.downfieldYard)
|
|
40
102
|
};
|
|
41
103
|
}
|
|
42
104
|
// src/common/model/guards.ts
|
|
43
|
-
function
|
|
105
|
+
function s(e) {
|
|
44
106
|
return typeof e == "object" && !!e;
|
|
45
107
|
}
|
|
46
|
-
function
|
|
108
|
+
function c(e) {
|
|
47
109
|
return typeof e == "number" && Number.isFinite(e);
|
|
48
110
|
}
|
|
49
|
-
function
|
|
111
|
+
function l(e) {
|
|
50
112
|
return typeof e == "string" && e.trim() !== "";
|
|
51
113
|
}
|
|
52
|
-
function
|
|
114
|
+
function u(e, t) {
|
|
53
115
|
return t.some((t) => t === e);
|
|
54
116
|
}
|
|
55
|
-
function
|
|
117
|
+
function d(e, t, n) {
|
|
56
118
|
if (!Array.isArray(e)) return [];
|
|
57
119
|
let r = [], i = Math.min(e.length, t);
|
|
58
120
|
for (let t = 0; t < i; t += 1) {
|
|
@@ -62,37 +124,37 @@ function u(e, t, n) {
|
|
|
62
124
|
return r;
|
|
63
125
|
}
|
|
64
126
|
// src/common/model/player.ts
|
|
65
|
-
var
|
|
66
|
-
function h(e) {
|
|
67
|
-
return l(e, d);
|
|
68
|
-
}
|
|
127
|
+
var f = ["circle", "square"], p = "circle", m = ["outline", "solid"], h = .93;
|
|
69
128
|
function ee(e) {
|
|
70
|
-
return
|
|
129
|
+
return u(e, f);
|
|
71
130
|
}
|
|
72
131
|
function te(e) {
|
|
73
|
-
|
|
132
|
+
return u(e, m);
|
|
133
|
+
}
|
|
134
|
+
function ne(e) {
|
|
135
|
+
if (!s(e)) return null;
|
|
74
136
|
let { lateralYard: t, downfieldYard: n } = e;
|
|
75
|
-
return !
|
|
137
|
+
return !c(t) || !c(n) ? null : o({
|
|
76
138
|
lateralYard: t,
|
|
77
139
|
downfieldYard: n
|
|
78
140
|
});
|
|
79
141
|
}
|
|
80
|
-
function
|
|
81
|
-
if (!
|
|
82
|
-
let n =
|
|
142
|
+
function re(e, t) {
|
|
143
|
+
if (!s(e)) return null;
|
|
144
|
+
let n = ne(e.position);
|
|
83
145
|
return n === null ? null : {
|
|
84
|
-
id:
|
|
146
|
+
id: l(e.id) ? e.id : `p${t}`,
|
|
85
147
|
position: n,
|
|
86
|
-
shape:
|
|
148
|
+
shape: ee(e.shape) ? e.shape : p,
|
|
87
149
|
label: typeof e.label == "string" ? e.label : "",
|
|
88
|
-
...
|
|
89
|
-
...
|
|
150
|
+
...l(e.color) ? { color: e.color } : {},
|
|
151
|
+
...te(e.fill) ? { fill: e.fill } : {}
|
|
90
152
|
};
|
|
91
153
|
}
|
|
92
|
-
function re(e) {
|
|
93
|
-
return u(e, 64, ne);
|
|
94
|
-
}
|
|
95
154
|
function ie(e) {
|
|
155
|
+
return d(e, 64, re);
|
|
156
|
+
}
|
|
157
|
+
function ae(e) {
|
|
96
158
|
return {
|
|
97
159
|
id: e.id,
|
|
98
160
|
position: { ...e.position },
|
|
@@ -103,41 +165,41 @@ function ie(e) {
|
|
|
103
165
|
};
|
|
104
166
|
}
|
|
105
167
|
// src/common/design/metrics.ts
|
|
106
|
-
var
|
|
107
|
-
function
|
|
108
|
-
let n = Math.max(0, e), r = Math.max(0, t), i = Math.max(
|
|
168
|
+
var oe = 1, se = .0021, ce = .375, le = 2.4, ue = 10, de = 1.5, fe = .45, pe = 3, me = 1.85, he = 1.2, ge = .2, _e = 2, ve = .5, ye = 8, be = .11, xe = 1.5, Se = .4, Ce = .72, we = .24, Te = 1.1, Ee = .7, De = .08, Oe = .75;
|
|
169
|
+
function ke(e, t) {
|
|
170
|
+
let n = Math.max(0, e), r = Math.max(0, t), i = Math.max(oe, se * n), a = 2 * h * r, o = Math.max(xe, be * a);
|
|
109
171
|
return {
|
|
110
172
|
yardLineWidth: i,
|
|
111
173
|
goalLineWidth: 2 * i,
|
|
112
|
-
midfieldLineWidth:
|
|
113
|
-
hashTickLength:
|
|
114
|
-
numberHeight: Math.max(
|
|
115
|
-
pylonSize: Math.max(
|
|
116
|
-
goalpostCrossbarHalfLength:
|
|
117
|
-
goalpostUprightLength:
|
|
118
|
-
goalpostStroke: Math.max(
|
|
174
|
+
midfieldLineWidth: de * i,
|
|
175
|
+
hashTickLength: ce * r,
|
|
176
|
+
numberHeight: Math.max(ue, le * r),
|
|
177
|
+
pylonSize: Math.max(pe, fe * r),
|
|
178
|
+
goalpostCrossbarHalfLength: me * r,
|
|
179
|
+
goalpostUprightLength: he * r,
|
|
180
|
+
goalpostStroke: Math.max(_e, ge * a),
|
|
119
181
|
tokenDiameter: a,
|
|
120
182
|
markerStroke: o,
|
|
121
|
-
markerLabelFont: Math.max(
|
|
183
|
+
markerLabelFont: Math.max(ye, ve * a),
|
|
122
184
|
routeWidth: o,
|
|
123
185
|
blockWidth: o,
|
|
124
|
-
blockCapLength:
|
|
125
|
-
arrowLength:
|
|
126
|
-
arrowHalfWidth:
|
|
127
|
-
motionDash: [
|
|
128
|
-
gridDotRadius: Math.max(
|
|
186
|
+
blockCapLength: Se * a,
|
|
187
|
+
arrowLength: Ce * a,
|
|
188
|
+
arrowHalfWidth: we * a,
|
|
189
|
+
motionDash: [Te * r, Ee * r],
|
|
190
|
+
gridDotRadius: Math.max(Oe, De * r)
|
|
129
191
|
};
|
|
130
192
|
}
|
|
131
193
|
// src/common/editing/editor.ts
|
|
132
|
-
var
|
|
194
|
+
var Ae = [
|
|
133
195
|
"select",
|
|
134
196
|
"add-player",
|
|
135
197
|
"draw-line"
|
|
136
198
|
], g = { kind: "none" };
|
|
137
|
-
function
|
|
199
|
+
function je(e, t) {
|
|
138
200
|
return e.kind === "none" || t.kind === "none" ? e.kind === t.kind : e.kind === t.kind && e.id === t.id;
|
|
139
201
|
}
|
|
140
|
-
function
|
|
202
|
+
function _(e, t) {
|
|
141
203
|
switch (e) {
|
|
142
204
|
case "add-player": return t.remainingPlayerSlots > 0;
|
|
143
205
|
case "draw-line": return t.canStartLine;
|
|
@@ -148,15 +210,15 @@ function Me(e, t) {
|
|
|
148
210
|
return e.players.length <= t.remainingPlayerSlots;
|
|
149
211
|
}
|
|
150
212
|
// src/common/base/event.ts
|
|
151
|
-
var
|
|
213
|
+
var v = class {
|
|
152
214
|
listeners = /* @__PURE__ */ new Set();
|
|
153
215
|
disposed = !1;
|
|
154
216
|
onListenerError;
|
|
155
217
|
constructor(e = console.error) {
|
|
156
218
|
this.onListenerError = e;
|
|
157
219
|
}
|
|
158
|
-
event = (
|
|
159
|
-
this.listeners.delete(
|
|
220
|
+
event = (e) => this.disposed ? t(() => {}) : (this.listeners.add(e), t(() => {
|
|
221
|
+
this.listeners.delete(e);
|
|
160
222
|
}));
|
|
161
223
|
fire(e) {
|
|
162
224
|
if (!this.disposed) for (let t of [...this.listeners]) try {
|
|
@@ -214,31 +276,31 @@ var _ = class {
|
|
|
214
276
|
}
|
|
215
277
|
}, Fe = ["offense", "defense"];
|
|
216
278
|
function Ie(e) {
|
|
217
|
-
return
|
|
279
|
+
return u(e, Fe);
|
|
218
280
|
}
|
|
219
|
-
function
|
|
281
|
+
function y(e) {
|
|
220
282
|
if (typeof e == "object" && e && !Object.isFrozen(e)) {
|
|
221
283
|
Object.freeze(e);
|
|
222
|
-
for (let t of Object.values(e))
|
|
284
|
+
for (let t of Object.values(e)) y(t);
|
|
223
285
|
}
|
|
224
286
|
return e;
|
|
225
287
|
}
|
|
226
288
|
// src/common/formations/formation.ts
|
|
227
|
-
function
|
|
228
|
-
let { id: t, ...n } =
|
|
289
|
+
function Le(e) {
|
|
290
|
+
let { id: t, ...n } = ae(e);
|
|
229
291
|
return n;
|
|
230
292
|
}
|
|
231
|
-
function
|
|
232
|
-
if (!
|
|
233
|
-
let t =
|
|
293
|
+
function Re(e) {
|
|
294
|
+
if (!s(e)) return null;
|
|
295
|
+
let t = ie(e.players).map(Le);
|
|
234
296
|
return t.length === 0 ? null : {
|
|
235
|
-
id:
|
|
236
|
-
name:
|
|
297
|
+
id: l(e.id) ? e.id : "formation",
|
|
298
|
+
name: l(e.name) ? e.name : "Formation",
|
|
237
299
|
side: Ie(e.side) ? e.side : "offense",
|
|
238
300
|
players: t
|
|
239
301
|
};
|
|
240
302
|
}
|
|
241
|
-
function
|
|
303
|
+
function ze(e, t, n) {
|
|
242
304
|
let r = new Set(n);
|
|
243
305
|
return e.players.map((e) => {
|
|
244
306
|
let n = t.next("player", r);
|
|
@@ -249,7 +311,7 @@ function Be(e, t, n) {
|
|
|
249
311
|
});
|
|
250
312
|
}
|
|
251
313
|
// src/common/model/id-factory.ts
|
|
252
|
-
var
|
|
314
|
+
var Be = class {
|
|
253
315
|
counters = /* @__PURE__ */ new Map();
|
|
254
316
|
next(e, t) {
|
|
255
317
|
let n = this.counters.get(e) ?? 0, r;
|
|
@@ -258,38 +320,38 @@ var Ve = class {
|
|
|
258
320
|
while (t.has(r));
|
|
259
321
|
return this.counters.set(e, n), r;
|
|
260
322
|
}
|
|
261
|
-
},
|
|
323
|
+
}, Ve = [
|
|
262
324
|
"route",
|
|
263
325
|
"block",
|
|
264
326
|
"motion"
|
|
265
|
-
],
|
|
327
|
+
], He = ["straight", "bezier"], Ue = "route", We = "straight";
|
|
328
|
+
function Ge(e) {
|
|
329
|
+
return u(e, Ve);
|
|
330
|
+
}
|
|
266
331
|
function Ke(e) {
|
|
267
|
-
return
|
|
332
|
+
return u(e, He);
|
|
268
333
|
}
|
|
269
334
|
function qe(e) {
|
|
270
|
-
return
|
|
335
|
+
return c(e) && e > 0;
|
|
271
336
|
}
|
|
272
|
-
function Je(e) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
function Ye(e, t, n) {
|
|
276
|
-
if (!o(e) || !c(e.startPlayerId) || !n.has(e.startPlayerId)) return null;
|
|
277
|
-
let r = te(e.end);
|
|
337
|
+
function Je(e, t, n) {
|
|
338
|
+
if (!s(e) || !l(e.startPlayerId) || !n.has(e.startPlayerId)) return null;
|
|
339
|
+
let r = ne(e.end);
|
|
278
340
|
return r === null ? null : {
|
|
279
|
-
id:
|
|
280
|
-
kind:
|
|
341
|
+
id: l(e.id) ? e.id : `l${t}`,
|
|
342
|
+
kind: Ge(e.kind) ? e.kind : Ue,
|
|
281
343
|
startPlayerId: e.startPlayerId,
|
|
282
|
-
waypoints:
|
|
344
|
+
waypoints: d(e.waypoints, 32, ne),
|
|
283
345
|
end: r,
|
|
284
|
-
interpolation:
|
|
285
|
-
...
|
|
286
|
-
...
|
|
346
|
+
interpolation: Ke(e.interpolation) ? e.interpolation : We,
|
|
347
|
+
...l(e.color) ? { color: e.color } : {},
|
|
348
|
+
...qe(e.thickness) ? { thickness: e.thickness } : {}
|
|
287
349
|
};
|
|
288
350
|
}
|
|
289
|
-
function
|
|
290
|
-
return
|
|
351
|
+
function Ye(e, t) {
|
|
352
|
+
return d(e, 128, (e, n) => Je(e, n, t));
|
|
291
353
|
}
|
|
292
|
-
function
|
|
354
|
+
function Xe(e) {
|
|
293
355
|
return {
|
|
294
356
|
id: e.id,
|
|
295
357
|
kind: e.kind,
|
|
@@ -301,7 +363,7 @@ function Ze(e) {
|
|
|
301
363
|
...e.thickness === void 0 ? {} : { thickness: e.thickness }
|
|
302
364
|
};
|
|
303
365
|
}
|
|
304
|
-
function
|
|
366
|
+
function Ze(e, t) {
|
|
305
367
|
let n = t.get(e.startPlayerId);
|
|
306
368
|
if (n !== void 0) return [
|
|
307
369
|
{ ...n.position },
|
|
@@ -309,52 +371,52 @@ function Qe(e, t) {
|
|
|
309
371
|
{ ...e.end }
|
|
310
372
|
];
|
|
311
373
|
}
|
|
312
|
-
function
|
|
374
|
+
function Qe(e) {
|
|
313
375
|
let t = /* @__PURE__ */ new Map();
|
|
314
376
|
for (let n of e) t.set(n.id, n);
|
|
315
377
|
return t;
|
|
316
378
|
}
|
|
317
379
|
// src/common/model/play-data.ts
|
|
318
|
-
var
|
|
380
|
+
var $e = [
|
|
319
381
|
"own-redzone",
|
|
320
382
|
"middle",
|
|
321
383
|
"redzone"
|
|
322
|
-
],
|
|
323
|
-
"own-redzone": "
|
|
324
|
-
middle: "
|
|
325
|
-
redzone: "
|
|
326
|
-
},
|
|
384
|
+
], et = "middle", tt = {
|
|
385
|
+
"own-redzone": "Own red zone",
|
|
386
|
+
middle: "Midfield",
|
|
387
|
+
redzone: "Red zone"
|
|
388
|
+
}, nt = {
|
|
327
389
|
"own-redzone": 10,
|
|
328
390
|
middle: 50,
|
|
329
391
|
redzone: 85
|
|
330
|
-
},
|
|
331
|
-
function
|
|
332
|
-
return
|
|
392
|
+
}, rt = 2;
|
|
393
|
+
function it(e) {
|
|
394
|
+
return u(e, $e);
|
|
333
395
|
}
|
|
334
|
-
function
|
|
396
|
+
function b(e) {
|
|
335
397
|
return {
|
|
336
398
|
zone: e,
|
|
337
|
-
losYard:
|
|
399
|
+
losYard: nt[e]
|
|
338
400
|
};
|
|
339
401
|
}
|
|
340
|
-
function
|
|
402
|
+
function at(e) {
|
|
341
403
|
return {
|
|
342
404
|
version: 2,
|
|
343
405
|
field: { ...e.field },
|
|
344
|
-
players: e.players.map(
|
|
345
|
-
lines: e.lines.map(
|
|
406
|
+
players: e.players.map(ae),
|
|
407
|
+
lines: e.lines.map(Xe)
|
|
346
408
|
};
|
|
347
409
|
}
|
|
348
|
-
function
|
|
349
|
-
let t =
|
|
410
|
+
function ot(e) {
|
|
411
|
+
let t = s(e) ? e : {}, n = s(t.field) ? t.field.zone : void 0, r = st(ie(t.players)), i = new Set(r.map((e) => e.id));
|
|
350
412
|
return {
|
|
351
413
|
version: 2,
|
|
352
|
-
field:
|
|
414
|
+
field: b(it(n) ? n : et),
|
|
353
415
|
players: r,
|
|
354
|
-
lines:
|
|
416
|
+
lines: st(Ye(t.lines, i))
|
|
355
417
|
};
|
|
356
418
|
}
|
|
357
|
-
function
|
|
419
|
+
function st(e) {
|
|
358
420
|
let t = new Set(e.map((e) => e.id)), n = /* @__PURE__ */ new Set();
|
|
359
421
|
return e.map((e) => {
|
|
360
422
|
if (!n.has(e.id)) return n.add(e.id), e;
|
|
@@ -367,30 +429,30 @@ function ct(e) {
|
|
|
367
429
|
};
|
|
368
430
|
});
|
|
369
431
|
}
|
|
370
|
-
function
|
|
371
|
-
if (!
|
|
432
|
+
function ct(e, t) {
|
|
433
|
+
if (!s(e)) return e;
|
|
372
434
|
let { absoluteYard: n, ...r } = e;
|
|
373
|
-
return
|
|
435
|
+
return c(n) ? {
|
|
374
436
|
...r,
|
|
375
437
|
downfieldYard: n - t
|
|
376
438
|
} : e;
|
|
377
439
|
}
|
|
378
440
|
function lt(e, t) {
|
|
379
|
-
return
|
|
441
|
+
return s(e) ? {
|
|
380
442
|
...e,
|
|
381
|
-
position:
|
|
443
|
+
position: ct(e.position, t)
|
|
382
444
|
} : e;
|
|
383
445
|
}
|
|
384
446
|
function ut(e, t) {
|
|
385
|
-
return
|
|
447
|
+
return s(e) ? {
|
|
386
448
|
...e,
|
|
387
|
-
waypoints: Array.isArray(e.waypoints) ? e.waypoints.slice(0, 32).map((e) =>
|
|
388
|
-
end:
|
|
389
|
-
thickness:
|
|
449
|
+
waypoints: Array.isArray(e.waypoints) ? e.waypoints.slice(0, 32).map((e) => ct(e, t)) : e.waypoints,
|
|
450
|
+
end: ct(e.end, t),
|
|
451
|
+
thickness: c(e.thickness) ? e.thickness / 2 : e.thickness
|
|
390
452
|
} : e;
|
|
391
453
|
}
|
|
392
454
|
function dt(e) {
|
|
393
|
-
let t =
|
|
455
|
+
let t = b(s(e.field) && it(e.field.zone) ? e.field.zone : et), { losYard: n } = t;
|
|
394
456
|
return {
|
|
395
457
|
...e,
|
|
396
458
|
field: t,
|
|
@@ -404,19 +466,19 @@ var ft = [{
|
|
|
404
466
|
migrate: dt
|
|
405
467
|
}];
|
|
406
468
|
function pt(e) {
|
|
407
|
-
return
|
|
469
|
+
return s(e) && c(e.version) ? e.version : 0;
|
|
408
470
|
}
|
|
409
471
|
function mt(e, t, n) {
|
|
410
|
-
if (!
|
|
472
|
+
if (!s(e)) return e;
|
|
411
473
|
let r = e;
|
|
412
474
|
for (let e of n) e.to > t && (r = e.migrate(r));
|
|
413
475
|
return r;
|
|
414
476
|
}
|
|
415
477
|
function ht(e) {
|
|
416
|
-
return
|
|
478
|
+
return ot(mt(e, pt(e), ft));
|
|
417
479
|
}
|
|
418
480
|
// src/common/model/play-model.ts
|
|
419
|
-
function
|
|
481
|
+
function gt(e, t, n, r) {
|
|
420
482
|
if (!Number.isInteger(t) || t < 0 || t > e.length) throw Error(`PlayModel: ${r} index out of range: ${t} (0..${e.length})`);
|
|
421
483
|
return [
|
|
422
484
|
...e.slice(0, t),
|
|
@@ -424,25 +486,25 @@ function b(e, t, n, r) {
|
|
|
424
486
|
...e.slice(t)
|
|
425
487
|
];
|
|
426
488
|
}
|
|
427
|
-
function
|
|
489
|
+
function _t(e, t, n) {
|
|
428
490
|
if (e.some((e) => e.id === t)) throw Error(`${n} "${t}"`);
|
|
429
491
|
}
|
|
430
|
-
function
|
|
492
|
+
function vt(e, t, n) {
|
|
431
493
|
if (e > t) throw Error(`PlayModel: too many ${n}: ${e} > ${t}`);
|
|
432
494
|
}
|
|
433
|
-
function
|
|
434
|
-
|
|
435
|
-
for (let t of e.lines)
|
|
495
|
+
function yt(e) {
|
|
496
|
+
vt(e.players.length, 64, "players"), vt(e.lines.length, 128, "lines");
|
|
497
|
+
for (let t of e.lines) vt(t.waypoints.length, 32, "waypoints");
|
|
436
498
|
}
|
|
437
|
-
var
|
|
438
|
-
_onDidChange = this._register(new
|
|
499
|
+
var bt = class extends r {
|
|
500
|
+
_onDidChange = this._register(new v());
|
|
439
501
|
onDidChange = this._onDidChange.event;
|
|
440
502
|
state;
|
|
441
503
|
constructor(e) {
|
|
442
504
|
super(), this.state = ht(e);
|
|
443
505
|
}
|
|
444
506
|
getData() {
|
|
445
|
-
return
|
|
507
|
+
return at(this.state);
|
|
446
508
|
}
|
|
447
509
|
getSnapshot() {
|
|
448
510
|
return this.state;
|
|
@@ -469,7 +531,7 @@ var vt = class extends n {
|
|
|
469
531
|
setFieldZone(e) {
|
|
470
532
|
this.commit({
|
|
471
533
|
...this.state,
|
|
472
|
-
field:
|
|
534
|
+
field: b(e)
|
|
473
535
|
});
|
|
474
536
|
}
|
|
475
537
|
addPlayer(e) {
|
|
@@ -516,9 +578,9 @@ var vt = class extends n {
|
|
|
516
578
|
return this.emitChange(), n;
|
|
517
579
|
}
|
|
518
580
|
restorePlayer(e) {
|
|
519
|
-
|
|
520
|
-
let t =
|
|
521
|
-
for (let { line: t, index: r } of [...e.removedLines].sort((e, t) => e.index - t.index)) n =
|
|
581
|
+
_t(this.state.players, e.player.id, "PlayModel.restorePlayer: duplicate player id");
|
|
582
|
+
let t = gt(this.state.players, e.index, e.player, "player"), n = this.state.lines;
|
|
583
|
+
for (let { line: t, index: r } of [...e.removedLines].sort((e, t) => e.index - t.index)) n = gt(n, r, t, "line");
|
|
522
584
|
this.commit({
|
|
523
585
|
...this.state,
|
|
524
586
|
players: t,
|
|
@@ -536,9 +598,9 @@ var vt = class extends n {
|
|
|
536
598
|
this.insertLine(e, this.state.lines.length);
|
|
537
599
|
}
|
|
538
600
|
insertLine(e, t) {
|
|
539
|
-
|
|
601
|
+
_t(this.state.lines, e.id, "PlayModel: duplicate line id"), this.commit({
|
|
540
602
|
...this.state,
|
|
541
|
-
lines:
|
|
603
|
+
lines: gt(this.state.lines, t, e, "line")
|
|
542
604
|
});
|
|
543
605
|
}
|
|
544
606
|
removeLine(e) {
|
|
@@ -561,22 +623,22 @@ var vt = class extends n {
|
|
|
561
623
|
}), t;
|
|
562
624
|
}
|
|
563
625
|
commit(e) {
|
|
564
|
-
|
|
626
|
+
yt(e), this.state = e, this.emitChange();
|
|
565
627
|
}
|
|
566
628
|
emitChange() {
|
|
567
629
|
this._onDidChange.fire(this.state);
|
|
568
630
|
}
|
|
569
631
|
};
|
|
570
632
|
// src/common/commands/command.ts
|
|
571
|
-
function
|
|
572
|
-
/* v8 ignore start --
|
|
573
|
-
if (e === void 0) throw Error(`${t.label}:
|
|
633
|
+
function x(e, t) {
|
|
634
|
+
/* v8 ignore start -- Only applied commands enter the history, so edits never get here. */
|
|
635
|
+
if (e === void 0) throw Error(`${t.label}: undone before apply`);
|
|
574
636
|
/* v8 ignore stop */
|
|
575
637
|
return e;
|
|
576
638
|
}
|
|
577
639
|
// src/common/commands/field-commands.ts
|
|
578
|
-
var
|
|
579
|
-
label = "
|
|
640
|
+
var xt = class {
|
|
641
|
+
label = "Switch field zone";
|
|
580
642
|
zone;
|
|
581
643
|
previous;
|
|
582
644
|
constructor(e) {
|
|
@@ -586,10 +648,10 @@ var yt = class {
|
|
|
586
648
|
return this.previous = e.getFieldZone(), this.previous !== this.zone && (e.setFieldZone(this.zone), !0);
|
|
587
649
|
}
|
|
588
650
|
undo(e) {
|
|
589
|
-
e.setFieldZone(
|
|
651
|
+
e.setFieldZone(x(this.previous, this));
|
|
590
652
|
}
|
|
591
|
-
},
|
|
592
|
-
label = "
|
|
653
|
+
}, St = class {
|
|
654
|
+
label = "Load formation";
|
|
593
655
|
players;
|
|
594
656
|
constructor(e) {
|
|
595
657
|
this.players = e;
|
|
@@ -602,24 +664,24 @@ var yt = class {
|
|
|
602
664
|
}
|
|
603
665
|
};
|
|
604
666
|
// src/common/commands/patch.ts
|
|
605
|
-
function
|
|
667
|
+
function Ct(e) {
|
|
606
668
|
return e;
|
|
607
669
|
}
|
|
608
|
-
function
|
|
609
|
-
let n = { ...
|
|
670
|
+
function wt(e, t) {
|
|
671
|
+
let n = { ...Ct(e) };
|
|
610
672
|
for (let [e, r] of Object.entries(t)) r === null ? delete n[e] : n[e] = r;
|
|
611
673
|
return n;
|
|
612
674
|
}
|
|
613
|
-
function
|
|
614
|
-
let n =
|
|
675
|
+
function Tt(e, t) {
|
|
676
|
+
let n = Ct(e);
|
|
615
677
|
return Object.entries(t).some(([e, t]) => (t ?? void 0) !== n[e]);
|
|
616
678
|
}
|
|
617
679
|
// src/common/commands/line-commands.ts
|
|
618
|
-
function
|
|
619
|
-
return
|
|
680
|
+
function Et(e, t) {
|
|
681
|
+
return wt(e, t);
|
|
620
682
|
}
|
|
621
|
-
var
|
|
622
|
-
label = "
|
|
683
|
+
var Dt = class {
|
|
684
|
+
label = "Add line";
|
|
623
685
|
line;
|
|
624
686
|
constructor(e) {
|
|
625
687
|
this.line = e;
|
|
@@ -630,8 +692,8 @@ var Tt = class {
|
|
|
630
692
|
undo(e) {
|
|
631
693
|
e.removeLine(this.line.id);
|
|
632
694
|
}
|
|
633
|
-
},
|
|
634
|
-
label = "
|
|
695
|
+
}, Ot = class {
|
|
696
|
+
label = "Delete line";
|
|
635
697
|
lineId;
|
|
636
698
|
removal;
|
|
637
699
|
constructor(e) {
|
|
@@ -641,11 +703,11 @@ var Tt = class {
|
|
|
641
703
|
return this.removal = e.removeLine(this.lineId), !0;
|
|
642
704
|
}
|
|
643
705
|
undo(e) {
|
|
644
|
-
let { line: t, index: n } =
|
|
706
|
+
let { line: t, index: n } = x(this.removal, this);
|
|
645
707
|
e.insertLine(t, n);
|
|
646
708
|
}
|
|
647
|
-
},
|
|
648
|
-
label = "
|
|
709
|
+
}, kt = class {
|
|
710
|
+
label = "Update line";
|
|
649
711
|
lineId;
|
|
650
712
|
patch;
|
|
651
713
|
previous;
|
|
@@ -654,18 +716,18 @@ var Tt = class {
|
|
|
654
716
|
}
|
|
655
717
|
apply(e) {
|
|
656
718
|
let t = e.getLine(this.lineId);
|
|
657
|
-
return
|
|
719
|
+
return Tt(t, this.patch) ? (this.previous = e.updateLine(Et(t, this.patch)), !0) : !1;
|
|
658
720
|
}
|
|
659
721
|
undo(e) {
|
|
660
|
-
e.updateLine(
|
|
722
|
+
e.updateLine(x(this.previous, this));
|
|
661
723
|
}
|
|
662
724
|
};
|
|
663
725
|
// src/common/commands/player-commands.ts
|
|
664
|
-
function
|
|
665
|
-
return
|
|
726
|
+
function At(e, t) {
|
|
727
|
+
return wt(e, t);
|
|
666
728
|
}
|
|
667
|
-
var
|
|
668
|
-
label = "
|
|
729
|
+
var jt = class {
|
|
730
|
+
label = "Add player";
|
|
669
731
|
player;
|
|
670
732
|
constructor(e) {
|
|
671
733
|
this.player = e;
|
|
@@ -676,8 +738,8 @@ var kt = class {
|
|
|
676
738
|
undo(e) {
|
|
677
739
|
e.removePlayer(this.player.id);
|
|
678
740
|
}
|
|
679
|
-
},
|
|
680
|
-
label = "
|
|
741
|
+
}, Mt = class {
|
|
742
|
+
label = "Delete player";
|
|
681
743
|
playerId;
|
|
682
744
|
removal;
|
|
683
745
|
constructor(e) {
|
|
@@ -687,10 +749,10 @@ var kt = class {
|
|
|
687
749
|
return this.removal = e.removePlayer(this.playerId), !0;
|
|
688
750
|
}
|
|
689
751
|
undo(e) {
|
|
690
|
-
e.restorePlayer(
|
|
752
|
+
e.restorePlayer(x(this.removal, this));
|
|
691
753
|
}
|
|
692
|
-
},
|
|
693
|
-
label = "
|
|
754
|
+
}, Nt = class {
|
|
755
|
+
label = "Update player";
|
|
694
756
|
playerId;
|
|
695
757
|
patch;
|
|
696
758
|
previous;
|
|
@@ -699,17 +761,17 @@ var kt = class {
|
|
|
699
761
|
}
|
|
700
762
|
apply(e) {
|
|
701
763
|
let t = e.getPlayer(this.playerId);
|
|
702
|
-
return
|
|
764
|
+
return Tt(t, this.patch) ? (this.previous = e.updatePlayer(At(t, this.patch)), !0) : !1;
|
|
703
765
|
}
|
|
704
766
|
undo(e) {
|
|
705
|
-
e.updatePlayer(
|
|
767
|
+
e.updatePlayer(x(this.previous, this));
|
|
706
768
|
}
|
|
707
|
-
},
|
|
769
|
+
}, Pt = 53, Ft = {
|
|
708
770
|
ncaa: 6.5,
|
|
709
771
|
nfl: 3,
|
|
710
772
|
nfhs: 9
|
|
711
|
-
},
|
|
712
|
-
function
|
|
773
|
+
}, It = "ncaa";
|
|
774
|
+
function S(e) {
|
|
713
775
|
switch (e) {
|
|
714
776
|
case "own-redzone": return {
|
|
715
777
|
startYard: -10,
|
|
@@ -725,30 +787,30 @@ function C(e) {
|
|
|
725
787
|
};
|
|
726
788
|
}
|
|
727
789
|
}
|
|
728
|
-
function
|
|
729
|
-
let { startYard: t, endYard: n } =
|
|
790
|
+
function Lt(e) {
|
|
791
|
+
let { startYard: t, endYard: n } = S(e);
|
|
730
792
|
return n - t;
|
|
731
793
|
}
|
|
732
|
-
function
|
|
733
|
-
return 53 /
|
|
794
|
+
function Rt(e) {
|
|
795
|
+
return 53 / Lt(e);
|
|
734
796
|
}
|
|
735
|
-
function
|
|
736
|
-
let { startYard: n, endYard: r } =
|
|
797
|
+
function zt(e, t) {
|
|
798
|
+
let { startYard: n, endYard: r } = S(t.zone);
|
|
737
799
|
return {
|
|
738
800
|
lateralYard: Math.min(Math.max(e.lateralYard, 0), 53),
|
|
739
801
|
downfieldYard: Math.min(Math.max(e.downfieldYard, n - t.losYard), r - t.losYard)
|
|
740
802
|
};
|
|
741
803
|
}
|
|
742
|
-
function
|
|
804
|
+
function Bt(e) {
|
|
743
805
|
return e <= 0 || e >= 100 ? null : 50 - Math.abs(50 - e);
|
|
744
806
|
}
|
|
745
|
-
function
|
|
746
|
-
if (t <= 0) throw Error("Playmaker: stepYards
|
|
747
|
-
let { startYard: n, endYard: r } =
|
|
807
|
+
function C(e, t) {
|
|
808
|
+
if (t <= 0) throw Error("Playmaker: stepYards must be a positive number.");
|
|
809
|
+
let { startYard: n, endYard: r } = S(e), i = [], a = Math.ceil(n / t) * t;
|
|
748
810
|
for (let e = a; e <= r + 1e-9; e += t) i.push(e);
|
|
749
811
|
return i;
|
|
750
812
|
}
|
|
751
|
-
var
|
|
813
|
+
var Vt = class {
|
|
752
814
|
viewportWidth;
|
|
753
815
|
viewportHeight;
|
|
754
816
|
zone;
|
|
@@ -760,7 +822,7 @@ var zt = class {
|
|
|
760
822
|
offsetX;
|
|
761
823
|
offsetY;
|
|
762
824
|
constructor(e, t, n) {
|
|
763
|
-
this.viewportWidth = e, this.viewportHeight = t, this.zone = n.zone, this.losYard = n.losYard, this.yardWindow =
|
|
825
|
+
this.viewportWidth = e, this.viewportHeight = t, this.zone = n.zone, this.losYard = n.losYard, this.yardWindow = S(n.zone);
|
|
764
826
|
let r = this.yardWindow.endYard - this.yardWindow.startYard, i = Math.max(0, e), a = Math.max(0, t);
|
|
765
827
|
this.scale = Math.min(i / 53, a / r), this.fieldPixelWidth = 53 * this.scale, this.fieldPixelHeight = r * this.scale, this.offsetX = (i - this.fieldPixelWidth) / 2, this.offsetY = (a - this.fieldPixelHeight) / 2;
|
|
766
828
|
}
|
|
@@ -793,22 +855,22 @@ var zt = class {
|
|
|
793
855
|
}
|
|
794
856
|
};
|
|
795
857
|
// src/common/geometry/polyline.ts
|
|
796
|
-
function*
|
|
858
|
+
function* w(e) {
|
|
797
859
|
let t;
|
|
798
860
|
for (let n of e) t !== void 0 && (yield [t.point, n]), t = { point: n };
|
|
799
861
|
}
|
|
800
|
-
function
|
|
862
|
+
function Ht(e) {
|
|
801
863
|
let t = 0;
|
|
802
|
-
for (let [n, r] of
|
|
864
|
+
for (let [n, r] of w(e)) t += Math.hypot(r.x - n.x, r.y - n.y);
|
|
803
865
|
return t;
|
|
804
866
|
}
|
|
805
|
-
function
|
|
867
|
+
function Ut(e, t, n = 1) {
|
|
806
868
|
if (e.length < 2 || t <= 0) return [...e];
|
|
807
|
-
let r = n >= 1 ? t : Math.min(t,
|
|
869
|
+
let r = n >= 1 ? t : Math.min(t, Ht(e) * n);
|
|
808
870
|
if (r <= 0) return [...e];
|
|
809
871
|
for (let t = e.length - 1; t > 0; t--) {
|
|
810
872
|
let n = e[t - 1], i = e[t];
|
|
811
|
-
/* v8 ignore start -- i
|
|
873
|
+
/* v8 ignore start -- i runs from 1 to path.length - 1, so both a and b are inside the range. */
|
|
812
874
|
if (n === void 0 || i === void 0) break;
|
|
813
875
|
/* v8 ignore stop */
|
|
814
876
|
let a = Math.hypot(i.x - n.x, i.y - n.y);
|
|
@@ -823,14 +885,14 @@ function Ht(e, t, n = 1) {
|
|
|
823
885
|
}
|
|
824
886
|
return e.slice(0, 1);
|
|
825
887
|
}
|
|
826
|
-
function
|
|
888
|
+
function Wt(e, t, n, r, i) {
|
|
827
889
|
let a = 1 - i, o = a * a * a, s = 3 * a * a * i, c = 3 * a * i * i, l = i * i * i;
|
|
828
890
|
return {
|
|
829
891
|
lateralYard: o * e.lateralYard + s * t.lateralYard + c * n.lateralYard + l * r.lateralYard,
|
|
830
892
|
downfieldYard: o * e.downfieldYard + s * t.downfieldYard + c * n.downfieldYard + l * r.downfieldYard
|
|
831
893
|
};
|
|
832
894
|
}
|
|
833
|
-
function
|
|
895
|
+
function Gt(e, t, n, r) {
|
|
834
896
|
return [{
|
|
835
897
|
lateralYard: t.lateralYard + (n.lateralYard - e.lateralYard) / 6,
|
|
836
898
|
downfieldYard: t.downfieldYard + (n.downfieldYard - e.downfieldYard) / 6
|
|
@@ -839,7 +901,7 @@ function Wt(e, t, n, r) {
|
|
|
839
901
|
downfieldYard: n.downfieldYard - (r.downfieldYard - t.downfieldYard) / 6
|
|
840
902
|
}];
|
|
841
903
|
}
|
|
842
|
-
function
|
|
904
|
+
function Kt(e) {
|
|
843
905
|
let t = [];
|
|
844
906
|
for (let n of e) {
|
|
845
907
|
let e = t[t.length - 1];
|
|
@@ -850,51 +912,51 @@ function Gt(e) {
|
|
|
850
912
|
}
|
|
851
913
|
return t;
|
|
852
914
|
}
|
|
853
|
-
function
|
|
854
|
-
let r =
|
|
915
|
+
function qt(e, t, n = 16) {
|
|
916
|
+
let r = Kt(e);
|
|
855
917
|
if (t === "straight" || r.length < 3) return r;
|
|
856
918
|
let i = Math.max(1, Math.floor(n)), a = r.slice(0, 1);
|
|
857
|
-
for (let [e, [t, n]] of [...
|
|
858
|
-
let [o, s] =
|
|
859
|
-
for (let e = 1; e <= i; e++) a.push(
|
|
919
|
+
for (let [e, [t, n]] of [...w(r)].entries()) {
|
|
920
|
+
let [o, s] = Gt(r[e - 1] ?? t, t, n, r[e + 2] ?? n);
|
|
921
|
+
for (let e = 1; e <= i; e++) a.push(Wt(t, o, s, n, e / i));
|
|
860
922
|
}
|
|
861
923
|
return a;
|
|
862
924
|
}
|
|
863
925
|
// src/common/geometry/hit-test.ts
|
|
864
|
-
function
|
|
865
|
-
if (n <= 0) throw Error("Playmaker: radiusYards
|
|
926
|
+
function Jt(e, t, n = h) {
|
|
927
|
+
if (n <= 0) throw Error("Playmaker: radiusYards must be a positive number.");
|
|
866
928
|
let r = n * n;
|
|
867
929
|
for (let n of [...e].reverse()) {
|
|
868
930
|
let e = n.position.lateralYard - t.lateralYard, i = n.position.downfieldYard - t.downfieldYard;
|
|
869
931
|
if (e * e + i * i <= r) return n;
|
|
870
932
|
}
|
|
871
933
|
}
|
|
872
|
-
var
|
|
873
|
-
function
|
|
934
|
+
var Yt = .6;
|
|
935
|
+
function Xt(e, t, n) {
|
|
874
936
|
let r = n.lateralYard - t.lateralYard, i = n.downfieldYard - t.downfieldYard, a = e.lateralYard - t.lateralYard, o = e.downfieldYard - t.downfieldYard, s = r * r + i * i, c = s > 0 ? Math.max(0, Math.min(1, (a * r + o * i) / s)) : 0, l = a - c * r, u = o - c * i;
|
|
875
937
|
return Math.sqrt(l * l + u * u);
|
|
876
938
|
}
|
|
877
|
-
function
|
|
939
|
+
function Zt(e, t) {
|
|
878
940
|
let n = t.length === 1 ? t[0] : void 0;
|
|
879
|
-
if (n !== void 0) return
|
|
941
|
+
if (n !== void 0) return en(e, n);
|
|
880
942
|
let r = Infinity;
|
|
881
|
-
for (let [n, i] of
|
|
943
|
+
for (let [n, i] of w(t)) r = Math.min(r, Xt(e, n, i));
|
|
882
944
|
return r;
|
|
883
945
|
}
|
|
884
|
-
function
|
|
885
|
-
if (r <= 0) throw Error("Playmaker: toleranceYards
|
|
886
|
-
let i =
|
|
946
|
+
function Qt(e, t, n, r = Yt) {
|
|
947
|
+
if (r <= 0) throw Error("Playmaker: toleranceYards must be a positive number.");
|
|
948
|
+
let i = Qe(t);
|
|
887
949
|
for (let t of [...e].reverse()) {
|
|
888
|
-
let e =
|
|
889
|
-
if (e !== void 0 &&
|
|
950
|
+
let e = Ze(t, i);
|
|
951
|
+
if (e !== void 0 && Zt(n, qt(e, t.interpolation)) <= r) return t;
|
|
890
952
|
}
|
|
891
953
|
}
|
|
892
|
-
var
|
|
893
|
-
function
|
|
954
|
+
var $t = .9;
|
|
955
|
+
function en(e, t) {
|
|
894
956
|
return Math.hypot(e.lateralYard - t.lateralYard, e.downfieldYard - t.downfieldYard);
|
|
895
957
|
}
|
|
896
|
-
function
|
|
897
|
-
let n = (e) =>
|
|
958
|
+
function tn(e, t) {
|
|
959
|
+
let n = (e) => en(t, e) <= $t;
|
|
898
960
|
if (n(e.end)) return {
|
|
899
961
|
kind: "endpoint",
|
|
900
962
|
point: e.end
|
|
@@ -906,26 +968,26 @@ function en(e, t) {
|
|
|
906
968
|
};
|
|
907
969
|
}
|
|
908
970
|
// src/common/editing/editor-notifier.ts
|
|
909
|
-
var
|
|
971
|
+
var nn = {
|
|
910
972
|
tool: Object.is,
|
|
911
|
-
selection:
|
|
973
|
+
selection: je,
|
|
912
974
|
canUndo: Object.is,
|
|
913
975
|
canRedo: Object.is,
|
|
914
976
|
fieldZone: Object.is,
|
|
915
977
|
isDrawing: Object.is,
|
|
916
978
|
remainingPlayerSlots: Object.is,
|
|
917
979
|
canStartLine: Object.is
|
|
918
|
-
},
|
|
919
|
-
function
|
|
920
|
-
return
|
|
980
|
+
}, rn = Object.keys(nn);
|
|
981
|
+
function an(e, t, n) {
|
|
982
|
+
return nn[e](t[e], n[e]);
|
|
921
983
|
}
|
|
922
|
-
function
|
|
923
|
-
return
|
|
984
|
+
function on(e, t) {
|
|
985
|
+
return rn.every((n) => an(n, e.state, t.state)) && e.player === t.player && e.line === t.line;
|
|
924
986
|
}
|
|
925
|
-
var
|
|
926
|
-
_onDidChangeScene = this._register(new
|
|
987
|
+
var sn = class extends r {
|
|
988
|
+
_onDidChangeScene = this._register(new v());
|
|
927
989
|
onDidChangeScene = this._onDidChangeScene.event;
|
|
928
|
-
_onDidChangeViewState = this._register(new
|
|
990
|
+
_onDidChangeViewState = this._register(new v());
|
|
929
991
|
onDidChangeViewState = this._onDidChangeViewState.event;
|
|
930
992
|
readView;
|
|
931
993
|
depth = 0;
|
|
@@ -953,15 +1015,15 @@ var on = class extends n {
|
|
|
953
1015
|
flush() {
|
|
954
1016
|
this.sceneChanged && (this.sceneChanged = !1, this._onDidChangeScene.fire());
|
|
955
1017
|
let e = this.readView();
|
|
956
|
-
|
|
1018
|
+
on(e, this.lastView) || (this.lastView = e, this._onDidChangeViewState.fire());
|
|
957
1019
|
}
|
|
958
1020
|
};
|
|
959
1021
|
// src/common/editing/interaction.ts
|
|
960
1022
|
function T(e, t) {
|
|
961
1023
|
return e.lateralYard === t.lateralYard && e.downfieldYard === t.downfieldYard;
|
|
962
1024
|
}
|
|
963
|
-
var
|
|
964
|
-
function
|
|
1025
|
+
var cn = 33;
|
|
1026
|
+
function ln(e, t, n) {
|
|
965
1027
|
return {
|
|
966
1028
|
type: "drag",
|
|
967
1029
|
target: e,
|
|
@@ -973,13 +1035,13 @@ function cn(e, t, n) {
|
|
|
973
1035
|
current: t
|
|
974
1036
|
};
|
|
975
1037
|
}
|
|
976
|
-
function
|
|
1038
|
+
function un(e, t) {
|
|
977
1039
|
return {
|
|
978
1040
|
lateralYard: t.lateralYard + e.grabOffset.lateralYard,
|
|
979
1041
|
downfieldYard: t.downfieldYard + e.grabOffset.downfieldYard
|
|
980
1042
|
};
|
|
981
1043
|
}
|
|
982
|
-
function
|
|
1044
|
+
function dn(e, t, n) {
|
|
983
1045
|
switch (t.kind) {
|
|
984
1046
|
case "player": return e.players.some((e) => e.id === t.playerId) ? {
|
|
985
1047
|
kind: "player",
|
|
@@ -1001,14 +1063,14 @@ function un(e, t, n) {
|
|
|
1001
1063
|
}
|
|
1002
1064
|
}
|
|
1003
1065
|
}
|
|
1004
|
-
function
|
|
1066
|
+
function fn(e) {
|
|
1005
1067
|
let t = e.at(-1);
|
|
1006
1068
|
return t === void 0 ? void 0 : {
|
|
1007
1069
|
waypoints: e.slice(0, -1),
|
|
1008
1070
|
end: t
|
|
1009
1071
|
};
|
|
1010
1072
|
}
|
|
1011
|
-
function
|
|
1073
|
+
function pn(e) {
|
|
1012
1074
|
return {
|
|
1013
1075
|
type: "draw-line",
|
|
1014
1076
|
startPlayerId: e.id,
|
|
@@ -1017,62 +1079,62 @@ function fn(e) {
|
|
|
1017
1079
|
cursor: e.position
|
|
1018
1080
|
};
|
|
1019
1081
|
}
|
|
1020
|
-
function
|
|
1021
|
-
let n = !T(e.points.at(-1) ?? e.start, t) && e.points.length <
|
|
1082
|
+
function mn(e, t) {
|
|
1083
|
+
let n = !T(e.points.at(-1) ?? e.start, t) && e.points.length < cn;
|
|
1022
1084
|
return {
|
|
1023
1085
|
...e,
|
|
1024
1086
|
points: n ? [...e.points, t] : e.points,
|
|
1025
1087
|
cursor: t
|
|
1026
1088
|
};
|
|
1027
1089
|
}
|
|
1028
|
-
function
|
|
1029
|
-
let n =
|
|
1090
|
+
function hn(e, t) {
|
|
1091
|
+
let n = fn(e.points);
|
|
1030
1092
|
if (n !== void 0) return e.points.every((e) => T(e, t)) ? void 0 : n;
|
|
1031
1093
|
}
|
|
1032
|
-
function
|
|
1094
|
+
function gn(e, t, n) {
|
|
1033
1095
|
return {
|
|
1034
1096
|
id: t,
|
|
1035
|
-
kind:
|
|
1097
|
+
kind: Ue,
|
|
1036
1098
|
startPlayerId: e.startPlayerId,
|
|
1037
1099
|
waypoints: n.waypoints,
|
|
1038
1100
|
end: n.end,
|
|
1039
|
-
interpolation:
|
|
1101
|
+
interpolation: We
|
|
1040
1102
|
};
|
|
1041
1103
|
}
|
|
1042
1104
|
// src/common/editing/preview.ts
|
|
1043
|
-
var
|
|
1044
|
-
function
|
|
1105
|
+
var _n = "__playmaker_draft_line__";
|
|
1106
|
+
function vn(e, t) {
|
|
1045
1107
|
switch (t.kind) {
|
|
1046
1108
|
case "player": return {
|
|
1047
1109
|
...e,
|
|
1048
|
-
players: e.players.map((e) => e.id === t.playerId ?
|
|
1110
|
+
players: e.players.map((e) => e.id === t.playerId ? At(e, t.patch) : e)
|
|
1049
1111
|
};
|
|
1050
1112
|
case "line": return {
|
|
1051
1113
|
...e,
|
|
1052
|
-
lines: e.lines.map((e) => e.id === t.lineId ?
|
|
1114
|
+
lines: e.lines.map((e) => e.id === t.lineId ? Et(e, t.patch) : e)
|
|
1053
1115
|
};
|
|
1054
1116
|
}
|
|
1055
1117
|
}
|
|
1056
|
-
function
|
|
1057
|
-
return
|
|
1118
|
+
function yn(e) {
|
|
1119
|
+
return gn(e, _n, (e.points.length >= cn ? fn(e.points) : void 0) ?? {
|
|
1058
1120
|
waypoints: e.points,
|
|
1059
1121
|
end: e.cursor
|
|
1060
1122
|
});
|
|
1061
1123
|
}
|
|
1062
|
-
function
|
|
1124
|
+
function bn(e, t) {
|
|
1063
1125
|
if (t === void 0) return e;
|
|
1064
1126
|
switch (t.type) {
|
|
1065
1127
|
case "drag": {
|
|
1066
|
-
let n =
|
|
1067
|
-
return n === void 0 ? e :
|
|
1128
|
+
let n = dn(e, t.target, t.current);
|
|
1129
|
+
return n === void 0 ? e : vn(e, n);
|
|
1068
1130
|
}
|
|
1069
1131
|
case "draw-line": return {
|
|
1070
1132
|
...e,
|
|
1071
|
-
lines: [...e.lines,
|
|
1133
|
+
lines: [...e.lines, yn(t)]
|
|
1072
1134
|
};
|
|
1073
1135
|
}
|
|
1074
1136
|
}
|
|
1075
|
-
function
|
|
1137
|
+
function xn(e, t) {
|
|
1076
1138
|
if (t.kind === "player") return {
|
|
1077
1139
|
kind: "player",
|
|
1078
1140
|
playerId: t.id
|
|
@@ -1085,7 +1147,7 @@ function bn(e, t) {
|
|
|
1085
1147
|
};
|
|
1086
1148
|
}
|
|
1087
1149
|
// src/common/editing/editor-controller.ts
|
|
1088
|
-
var
|
|
1150
|
+
var Sn = class extends r {
|
|
1089
1151
|
model;
|
|
1090
1152
|
commands;
|
|
1091
1153
|
ids;
|
|
@@ -1096,7 +1158,7 @@ var xn = class extends n {
|
|
|
1096
1158
|
selection = g;
|
|
1097
1159
|
interaction;
|
|
1098
1160
|
constructor(e, t, n) {
|
|
1099
|
-
super(), this.model = e, this.commands = t, this.ids = n, this.notifier = this._register(new
|
|
1161
|
+
super(), this.model = e, this.commands = t, this.ids = n, this.notifier = this._register(new sn(() => ({
|
|
1100
1162
|
state: this.getViewState(),
|
|
1101
1163
|
player: this.getSelectedPlayer(),
|
|
1102
1164
|
line: this.getSelectedLine()
|
|
@@ -1124,10 +1186,10 @@ var xn = class extends n {
|
|
|
1124
1186
|
return e.kind === "line" ? this.model.findLine(e.id) : void 0;
|
|
1125
1187
|
}
|
|
1126
1188
|
getFrame() {
|
|
1127
|
-
let e =
|
|
1189
|
+
let e = bn(this.model.getSnapshot(), this.interaction);
|
|
1128
1190
|
return {
|
|
1129
1191
|
scene: e,
|
|
1130
|
-
overlay:
|
|
1192
|
+
overlay: xn(e, this.selection)
|
|
1131
1193
|
};
|
|
1132
1194
|
}
|
|
1133
1195
|
setTool(e) {
|
|
@@ -1157,14 +1219,14 @@ var xn = class extends n {
|
|
|
1157
1219
|
cursor: this.clampToField(e)
|
|
1158
1220
|
} : {
|
|
1159
1221
|
...t,
|
|
1160
|
-
current: this.clampToField(
|
|
1222
|
+
current: this.clampToField(un(t, e))
|
|
1161
1223
|
}));
|
|
1162
1224
|
}
|
|
1163
1225
|
pointerUp(e) {
|
|
1164
1226
|
let t = this.interaction;
|
|
1165
1227
|
t?.type === "drag" && this.notifier.batch(() => {
|
|
1166
1228
|
this.setInteraction(void 0);
|
|
1167
|
-
let n =
|
|
1229
|
+
let n = un(t, e);
|
|
1168
1230
|
if (T(n, t.origin)) return;
|
|
1169
1231
|
let r = this.clampToField(n);
|
|
1170
1232
|
if (T(r, t.origin)) return;
|
|
@@ -1180,7 +1242,7 @@ var xn = class extends n {
|
|
|
1180
1242
|
e?.type === "draw-line" && this.notifier.batch(() => {
|
|
1181
1243
|
this.setInteraction(void 0);
|
|
1182
1244
|
let t = this.lineFromDraft(e);
|
|
1183
|
-
t !== void 0 && (this.commands.execute(new
|
|
1245
|
+
t !== void 0 && (this.commands.execute(new Dt(t)), this.setTool("select"), this.setSelection({
|
|
1184
1246
|
kind: "line",
|
|
1185
1247
|
id: t.id
|
|
1186
1248
|
}));
|
|
@@ -1189,30 +1251,30 @@ var xn = class extends n {
|
|
|
1189
1251
|
deleteSelection() {
|
|
1190
1252
|
let e = this.getSelectedPlayer(), t = this.getSelectedLine();
|
|
1191
1253
|
this.notifier.batch(() => {
|
|
1192
|
-
if (e !== void 0) this.commands.execute(new
|
|
1193
|
-
else if (t !== void 0) this.commands.execute(new
|
|
1254
|
+
if (e !== void 0) this.commands.execute(new Mt(e.id));
|
|
1255
|
+
else if (t !== void 0) this.commands.execute(new Ot(t.id));
|
|
1194
1256
|
else return;
|
|
1195
1257
|
this.setSelection(g);
|
|
1196
1258
|
});
|
|
1197
1259
|
}
|
|
1198
1260
|
updateSelectedPlayer(e) {
|
|
1199
1261
|
let t = this.getSelectedPlayer();
|
|
1200
|
-
t !== void 0 && this.notifier.batch(() => this.commands.execute(new
|
|
1262
|
+
t !== void 0 && this.notifier.batch(() => this.commands.execute(new Nt(t.id, e)));
|
|
1201
1263
|
}
|
|
1202
1264
|
updateSelectedLine(e) {
|
|
1203
1265
|
let t = this.getSelectedLine();
|
|
1204
|
-
t !== void 0 && this.notifier.batch(() => this.commands.execute(new
|
|
1266
|
+
t !== void 0 && this.notifier.batch(() => this.commands.execute(new kt(t.id, e)));
|
|
1205
1267
|
}
|
|
1206
1268
|
setFieldZone(e) {
|
|
1207
1269
|
this.notifier.batch(() => {
|
|
1208
|
-
this.commands.execute(new
|
|
1270
|
+
this.commands.execute(new xt(e)) && this.setInteraction(void 0);
|
|
1209
1271
|
});
|
|
1210
1272
|
}
|
|
1211
1273
|
loadFormation(e) {
|
|
1212
1274
|
if (!Me(e, this.getViewState())) return !1;
|
|
1213
|
-
let { players: t } = this.model.getSnapshot(), n =
|
|
1275
|
+
let { players: t } = this.model.getSnapshot(), n = ze(e, this.ids, t.map((e) => e.id));
|
|
1214
1276
|
return this.notifier.batch(() => {
|
|
1215
|
-
let e = this.commands.execute(new
|
|
1277
|
+
let e = this.commands.execute(new St(n));
|
|
1216
1278
|
return e && (this.setInteraction(void 0), this.setSelection(g)), e;
|
|
1217
1279
|
});
|
|
1218
1280
|
}
|
|
@@ -1231,21 +1293,21 @@ var xn = class extends n {
|
|
|
1231
1293
|
});
|
|
1232
1294
|
}
|
|
1233
1295
|
setSelection(e) {
|
|
1234
|
-
|
|
1296
|
+
je(this.selection, e) || (this.selection = e, this.notifier.markSceneChanged());
|
|
1235
1297
|
}
|
|
1236
1298
|
setInteraction(e) {
|
|
1237
1299
|
e !== this.interaction && (this.interaction = e, this.notifier.markSceneChanged());
|
|
1238
1300
|
}
|
|
1239
1301
|
clampToField(e) {
|
|
1240
|
-
return
|
|
1302
|
+
return o(zt(e, this.model.getSnapshot().field));
|
|
1241
1303
|
}
|
|
1242
1304
|
dropCommand(e, t) {
|
|
1243
|
-
let n =
|
|
1244
|
-
if (n !== void 0) return n.kind === "player" ? new
|
|
1305
|
+
let n = dn(this.model.getSnapshot(), e.target, t);
|
|
1306
|
+
if (n !== void 0) return n.kind === "player" ? new Nt(n.playerId, n.patch) : new kt(n.lineId, n.patch);
|
|
1245
1307
|
}
|
|
1246
1308
|
lineFromDraft(e) {
|
|
1247
|
-
let t = this.model.findPlayer(e.startPlayerId), n = t === void 0 ? void 0 :
|
|
1248
|
-
return n === void 0 ? void 0 :
|
|
1309
|
+
let t = this.model.findPlayer(e.startPlayerId), n = t === void 0 ? void 0 : hn(e, t.position);
|
|
1310
|
+
return n === void 0 ? void 0 : gn(e, this.ids.next("line", new Set(this.model.getSnapshot().lines.map((e) => e.id))), n);
|
|
1249
1311
|
}
|
|
1250
1312
|
selectPointerDown(e) {
|
|
1251
1313
|
let t = this.model.getSnapshot(), n = this.hitSelectedLineHandle(e);
|
|
@@ -1253,26 +1315,26 @@ var xn = class extends n {
|
|
|
1253
1315
|
this.setInteraction(n);
|
|
1254
1316
|
return;
|
|
1255
1317
|
}
|
|
1256
|
-
let r =
|
|
1318
|
+
let r = Jt(t.players, e);
|
|
1257
1319
|
if (r !== void 0) {
|
|
1258
1320
|
this.setSelection({
|
|
1259
1321
|
kind: "player",
|
|
1260
1322
|
id: r.id
|
|
1261
|
-
}), this.setInteraction(
|
|
1323
|
+
}), this.setInteraction(ln({
|
|
1262
1324
|
kind: "player",
|
|
1263
1325
|
playerId: r.id
|
|
1264
1326
|
}, r.position, e));
|
|
1265
1327
|
return;
|
|
1266
1328
|
}
|
|
1267
|
-
let i =
|
|
1329
|
+
let i = Qt(t.lines, t.players, e);
|
|
1268
1330
|
this.setSelection(i === void 0 ? g : {
|
|
1269
1331
|
kind: "line",
|
|
1270
1332
|
id: i.id
|
|
1271
1333
|
});
|
|
1272
1334
|
}
|
|
1273
1335
|
hitSelectedLineHandle(e) {
|
|
1274
|
-
let t = this.getSelectedLine(), n = t === void 0 ? void 0 :
|
|
1275
|
-
return t === void 0 || n === void 0 ? void 0 :
|
|
1336
|
+
let t = this.getSelectedLine(), n = t === void 0 ? void 0 : tn(t, e);
|
|
1337
|
+
return t === void 0 || n === void 0 ? void 0 : ln(n.kind === "endpoint" ? {
|
|
1276
1338
|
kind: "endpoint",
|
|
1277
1339
|
lineId: t.id
|
|
1278
1340
|
} : {
|
|
@@ -1284,20 +1346,20 @@ var xn = class extends n {
|
|
|
1284
1346
|
drawLinePointerDown(e) {
|
|
1285
1347
|
let t = this.interaction;
|
|
1286
1348
|
if (t?.type === "draw-line") {
|
|
1287
|
-
this.setInteraction(
|
|
1349
|
+
this.setInteraction(mn(t, this.clampToField(e)));
|
|
1288
1350
|
return;
|
|
1289
1351
|
}
|
|
1290
|
-
if (!
|
|
1291
|
-
let n =
|
|
1292
|
-
n !== void 0 && this.setInteraction(
|
|
1352
|
+
if (!_("draw-line", this.getViewState())) return;
|
|
1353
|
+
let n = Jt(this.model.getSnapshot().players, e);
|
|
1354
|
+
n !== void 0 && this.setInteraction(pn(n));
|
|
1293
1355
|
}
|
|
1294
1356
|
addPlayerAt(e) {
|
|
1295
|
-
if (!
|
|
1357
|
+
if (!_("add-player", this.getViewState())) return;
|
|
1296
1358
|
let { players: t } = this.model.getSnapshot(), n = this.ids.next("player", new Set(t.map((e) => e.id)));
|
|
1297
|
-
this.commands.execute(new
|
|
1359
|
+
this.commands.execute(new jt({
|
|
1298
1360
|
id: n,
|
|
1299
1361
|
position: this.clampToField(e),
|
|
1300
|
-
shape:
|
|
1362
|
+
shape: p,
|
|
1301
1363
|
label: ""
|
|
1302
1364
|
})), this.setSelection({
|
|
1303
1365
|
kind: "player",
|
|
@@ -1306,22 +1368,22 @@ var xn = class extends n {
|
|
|
1306
1368
|
}
|
|
1307
1369
|
};
|
|
1308
1370
|
// src/common/editing/play-session.ts
|
|
1309
|
-
function
|
|
1310
|
-
let
|
|
1371
|
+
function Cn(e) {
|
|
1372
|
+
let t = new n(), r = t.add(new bt(e)), i = new Ne(r, new Pe());
|
|
1311
1373
|
return {
|
|
1312
|
-
store:
|
|
1374
|
+
store: t,
|
|
1313
1375
|
model: r,
|
|
1314
|
-
controller:
|
|
1376
|
+
controller: t.add(new Sn(r, i, new Be()))
|
|
1315
1377
|
};
|
|
1316
1378
|
}
|
|
1317
|
-
var
|
|
1318
|
-
_onDidReset = this._register(new
|
|
1379
|
+
var wn = class extends r {
|
|
1380
|
+
_onDidReset = this._register(new v());
|
|
1319
1381
|
onDidReset = this._onDidReset.event;
|
|
1320
|
-
_onDidEdit = this._register(new
|
|
1382
|
+
_onDidEdit = this._register(new v());
|
|
1321
1383
|
onDidChange = (e) => this._onDidEdit.event(() => e(this.getPlayData()));
|
|
1322
|
-
_onDidChangeScene = this._register(new
|
|
1384
|
+
_onDidChangeScene = this._register(new v());
|
|
1323
1385
|
onDidChangeScene = this._onDidChangeScene.event;
|
|
1324
|
-
_onDidChangeViewState = this._register(new
|
|
1386
|
+
_onDidChangeViewState = this._register(new v());
|
|
1325
1387
|
onDidChangeViewState = this._onDidChangeViewState.event;
|
|
1326
1388
|
document;
|
|
1327
1389
|
constructor(e) {
|
|
@@ -1343,28 +1405,28 @@ var Cn = class extends n {
|
|
|
1343
1405
|
this.document.controller.setFieldZone(e);
|
|
1344
1406
|
}
|
|
1345
1407
|
loadFormation(e) {
|
|
1346
|
-
let t =
|
|
1408
|
+
let t = Re(e);
|
|
1347
1409
|
return t !== null && this.document.controller.loadFormation(t);
|
|
1348
1410
|
}
|
|
1349
1411
|
setPlayData(e) {
|
|
1350
1412
|
this.document.store.dispose(), this.document = this.open(e), this._onDidReset.fire(), this._onDidChangeScene.fire(), this._onDidChangeViewState.fire();
|
|
1351
1413
|
}
|
|
1352
1414
|
open(e) {
|
|
1353
|
-
let t =
|
|
1415
|
+
let t = Cn(e), { store: n, model: r, controller: i } = t;
|
|
1354
1416
|
return n.add(r.onDidChange(() => this._onDidEdit.fire())), n.add(i.onDidChangeScene(() => this._onDidChangeScene.fire())), n.add(i.onDidChangeViewState(() => this._onDidChangeViewState.fire())), t;
|
|
1355
1417
|
}
|
|
1356
1418
|
dispose() {
|
|
1357
1419
|
this.document.store.dispose(), super.dispose();
|
|
1358
1420
|
}
|
|
1359
|
-
},
|
|
1360
|
-
function
|
|
1361
|
-
return !
|
|
1421
|
+
}, Tn = 1600, En = 4096;
|
|
1422
|
+
function Dn(e) {
|
|
1423
|
+
return !c(e) || e < 1 ? Tn : Math.min(Math.round(e), En);
|
|
1362
1424
|
}
|
|
1363
|
-
function
|
|
1364
|
-
let n =
|
|
1425
|
+
function On(e, t = {}) {
|
|
1426
|
+
let n = Dn(t.width);
|
|
1365
1427
|
return {
|
|
1366
1428
|
width: n,
|
|
1367
|
-
height: Math.round(n /
|
|
1429
|
+
height: Math.round(n / Rt(e))
|
|
1368
1430
|
};
|
|
1369
1431
|
}
|
|
1370
1432
|
// src/common/presets/alignments.ts
|
|
@@ -1399,26 +1461,26 @@ var A = {
|
|
|
1399
1461
|
n: E(25.5, 1.5),
|
|
1400
1462
|
t: E(30, 1.5),
|
|
1401
1463
|
eR: E(32.5, 1.5)
|
|
1402
|
-
}, M = E(35.5, 1.5),
|
|
1464
|
+
}, M = E(35.5, 1.5), kn = {
|
|
1403
1465
|
eL: E(22.5, 1.5),
|
|
1404
1466
|
n: E(26.5, 1.5),
|
|
1405
1467
|
eR: E(30.5, 1.5)
|
|
1406
|
-
},
|
|
1468
|
+
}, N = {
|
|
1407
1469
|
w: E(22.5, 5),
|
|
1408
1470
|
m: E(27, 5),
|
|
1409
1471
|
s: E(34.5, 5)
|
|
1410
|
-
},
|
|
1472
|
+
}, P = {
|
|
1411
1473
|
m: E(24, 5),
|
|
1412
1474
|
w: E(30, 5),
|
|
1413
1475
|
nb: E(14, 5)
|
|
1414
1476
|
};
|
|
1415
|
-
function
|
|
1477
|
+
function F(e) {
|
|
1416
1478
|
return {
|
|
1417
1479
|
left: E(6.5, e),
|
|
1418
1480
|
right: E(46.5, e)
|
|
1419
1481
|
};
|
|
1420
1482
|
}
|
|
1421
|
-
function
|
|
1483
|
+
function I() {
|
|
1422
1484
|
return [
|
|
1423
1485
|
D("lt", "LT", A.lt, "square"),
|
|
1424
1486
|
D("lg", "LG", A.lg, "square"),
|
|
@@ -1427,7 +1489,7 @@ function L() {
|
|
|
1427
1489
|
D("rt", "RT", A.rt, "square")
|
|
1428
1490
|
];
|
|
1429
1491
|
}
|
|
1430
|
-
function
|
|
1492
|
+
function L(e = j.eR) {
|
|
1431
1493
|
return [
|
|
1432
1494
|
D("de-l", "E", j.eL),
|
|
1433
1495
|
D("dt-l", "N", j.n),
|
|
@@ -1435,20 +1497,20 @@ function R(e = j.eR) {
|
|
|
1435
1497
|
D("de-r", "E", e)
|
|
1436
1498
|
];
|
|
1437
1499
|
}
|
|
1438
|
-
function
|
|
1500
|
+
function An() {
|
|
1439
1501
|
return [
|
|
1440
|
-
D("de-l", "E",
|
|
1441
|
-
D("nt", "N",
|
|
1442
|
-
D("de-r", "E",
|
|
1502
|
+
D("de-l", "E", kn.eL),
|
|
1503
|
+
D("nt", "N", kn.n),
|
|
1504
|
+
D("de-r", "E", kn.eR)
|
|
1443
1505
|
];
|
|
1444
1506
|
}
|
|
1445
|
-
function
|
|
1446
|
-
let { left: t, right: n } =
|
|
1507
|
+
function R(e) {
|
|
1508
|
+
let { left: t, right: n } = F(e);
|
|
1447
1509
|
return [D("cb-l", "CB", t), D("cb-r", "CB", n)];
|
|
1448
1510
|
}
|
|
1449
|
-
function
|
|
1511
|
+
function jn() {
|
|
1450
1512
|
return [
|
|
1451
|
-
...
|
|
1513
|
+
...I(),
|
|
1452
1514
|
D("y", "Y", E(34.5, -1), "square"),
|
|
1453
1515
|
D("qb", "QB", E(26.5, -3)),
|
|
1454
1516
|
D("fb", "FB", E(26.5, -6)),
|
|
@@ -1457,9 +1519,9 @@ function B() {
|
|
|
1457
1519
|
D("z", "Z", E(46.5, -2))
|
|
1458
1520
|
];
|
|
1459
1521
|
}
|
|
1460
|
-
function
|
|
1522
|
+
function z() {
|
|
1461
1523
|
return [
|
|
1462
|
-
...
|
|
1524
|
+
...I(),
|
|
1463
1525
|
D("y", "Y", E(34.5, -1), "square"),
|
|
1464
1526
|
D("qb", "QB", E(26.5, -3)),
|
|
1465
1527
|
D("rb", "RB", E(26.5, -7.5)),
|
|
@@ -1468,9 +1530,9 @@ function V() {
|
|
|
1468
1530
|
D("z", "Z", E(47, -1))
|
|
1469
1531
|
];
|
|
1470
1532
|
}
|
|
1471
|
-
function
|
|
1533
|
+
function B() {
|
|
1472
1534
|
return [
|
|
1473
|
-
...
|
|
1535
|
+
...I(),
|
|
1474
1536
|
D("qb", "QB", E(26.5, -5)),
|
|
1475
1537
|
D("rb", "RB", E(29.5, -5)),
|
|
1476
1538
|
D("x", "X", E(5.5, -1)),
|
|
@@ -1479,9 +1541,9 @@ function H() {
|
|
|
1479
1541
|
D("z", "Z", E(47.5, -1))
|
|
1480
1542
|
];
|
|
1481
1543
|
}
|
|
1482
|
-
function
|
|
1544
|
+
function Mn() {
|
|
1483
1545
|
return [
|
|
1484
|
-
...
|
|
1546
|
+
...I(),
|
|
1485
1547
|
D("qb", "QB", E(26.5, -5)),
|
|
1486
1548
|
D("rb", "RB", E(24, -5)),
|
|
1487
1549
|
D("x", "X", E(5.5, -1)),
|
|
@@ -1490,9 +1552,9 @@ function kn() {
|
|
|
1490
1552
|
D("z", "Z", E(47.5, -1))
|
|
1491
1553
|
];
|
|
1492
1554
|
}
|
|
1493
|
-
function
|
|
1555
|
+
function Nn() {
|
|
1494
1556
|
return [
|
|
1495
|
-
...
|
|
1557
|
+
...I(),
|
|
1496
1558
|
D("qb", "QB", E(26.5, -5)),
|
|
1497
1559
|
D("x", "X", E(5, -1)),
|
|
1498
1560
|
D("f", "F", E(12, -2)),
|
|
@@ -1501,9 +1563,9 @@ function An() {
|
|
|
1501
1563
|
D("z", "Z", E(48, -1))
|
|
1502
1564
|
];
|
|
1503
1565
|
}
|
|
1504
|
-
function
|
|
1566
|
+
function Pn() {
|
|
1505
1567
|
return [
|
|
1506
|
-
...
|
|
1568
|
+
...I(),
|
|
1507
1569
|
D("y", "Y", E(34.5, -1), "square"),
|
|
1508
1570
|
D("qb", "QB", E(26.5, -4.5)),
|
|
1509
1571
|
D("rb", "RB", E(26.5, -7.5)),
|
|
@@ -1512,9 +1574,9 @@ function jn() {
|
|
|
1512
1574
|
D("z", "Z", E(47, -1))
|
|
1513
1575
|
];
|
|
1514
1576
|
}
|
|
1515
|
-
function
|
|
1577
|
+
function Fn() {
|
|
1516
1578
|
return [
|
|
1517
|
-
...
|
|
1579
|
+
...I(),
|
|
1518
1580
|
D("qb", "QB", E(26.5, -5)),
|
|
1519
1581
|
D("rb", "RB", E(24, -5)),
|
|
1520
1582
|
D("x", "X", E(5.5, -1)),
|
|
@@ -1523,114 +1585,114 @@ function Mn() {
|
|
|
1523
1585
|
D("y", "Y", E(39.5, -2))
|
|
1524
1586
|
];
|
|
1525
1587
|
}
|
|
1526
|
-
function
|
|
1588
|
+
function V() {
|
|
1527
1589
|
return [
|
|
1528
|
-
...
|
|
1529
|
-
D("wlb", "W",
|
|
1530
|
-
D("mlb", "M",
|
|
1531
|
-
D("slb", "S",
|
|
1532
|
-
...
|
|
1590
|
+
...L(M),
|
|
1591
|
+
D("wlb", "W", N.w),
|
|
1592
|
+
D("mlb", "M", N.m),
|
|
1593
|
+
D("slb", "S", N.s),
|
|
1594
|
+
...R(6),
|
|
1533
1595
|
D("fs", "FS", E(23, 11)),
|
|
1534
1596
|
D("ss", "SS", E(32, 9))
|
|
1535
1597
|
];
|
|
1536
1598
|
}
|
|
1537
|
-
function
|
|
1599
|
+
function In() {
|
|
1538
1600
|
return [
|
|
1539
|
-
...
|
|
1601
|
+
...An(),
|
|
1540
1602
|
D("wlb", "W", E(19, 2.5)),
|
|
1541
1603
|
D("mlb", "M", E(24.5, 5)),
|
|
1542
1604
|
D("tlb", "T", E(29, 5)),
|
|
1543
1605
|
D("slb", "S", E(34.5, 2.5)),
|
|
1544
|
-
...
|
|
1606
|
+
...R(6),
|
|
1545
1607
|
D("fs", "FS", E(23, 11)),
|
|
1546
1608
|
D("ss", "SS", E(30, 11))
|
|
1547
1609
|
];
|
|
1548
1610
|
}
|
|
1549
|
-
function
|
|
1611
|
+
function Ln(e = j.eR) {
|
|
1550
1612
|
return [
|
|
1551
|
-
...
|
|
1552
|
-
D("mlb", "M",
|
|
1553
|
-
D("wlb", "W",
|
|
1613
|
+
...L(e),
|
|
1614
|
+
D("mlb", "M", P.m),
|
|
1615
|
+
D("wlb", "W", P.w)
|
|
1554
1616
|
];
|
|
1555
1617
|
}
|
|
1556
|
-
var
|
|
1618
|
+
var H = {
|
|
1557
1619
|
cornerDepth: 6,
|
|
1558
1620
|
fs: E(22, 11),
|
|
1559
1621
|
ss: E(31, 11)
|
|
1560
1622
|
};
|
|
1561
|
-
function
|
|
1623
|
+
function U(e, t = j.eR) {
|
|
1562
1624
|
return [
|
|
1563
|
-
...
|
|
1564
|
-
D("nb", "NB",
|
|
1565
|
-
...
|
|
1625
|
+
...Ln(t),
|
|
1626
|
+
D("nb", "NB", P.nb),
|
|
1627
|
+
...R(e.cornerDepth),
|
|
1566
1628
|
D("fs", "FS", e.fs),
|
|
1567
1629
|
D("ss", "SS", e.ss)
|
|
1568
1630
|
];
|
|
1569
1631
|
}
|
|
1570
|
-
function
|
|
1632
|
+
function Rn() {
|
|
1571
1633
|
return [
|
|
1572
|
-
...
|
|
1634
|
+
...L(),
|
|
1573
1635
|
D("mlb", "M", E(27, 5)),
|
|
1574
|
-
D("nb", "NB",
|
|
1636
|
+
D("nb", "NB", P.nb),
|
|
1575
1637
|
D("db", "$", E(39, 5)),
|
|
1576
|
-
...
|
|
1638
|
+
...R(6),
|
|
1577
1639
|
D("fs", "FS", E(22, 11)),
|
|
1578
1640
|
D("ss", "SS", E(31, 11))
|
|
1579
1641
|
];
|
|
1580
1642
|
}
|
|
1581
|
-
function
|
|
1643
|
+
function zn() {
|
|
1582
1644
|
return [
|
|
1583
|
-
...
|
|
1645
|
+
...L(),
|
|
1584
1646
|
D("mlb", "M", E(24.5, 5)),
|
|
1585
|
-
D("wlb", "W",
|
|
1647
|
+
D("wlb", "W", P.w),
|
|
1586
1648
|
D("nb", "NB", E(39, 5)),
|
|
1587
|
-
...
|
|
1649
|
+
...R(6),
|
|
1588
1650
|
D("fs", "FS", E(23, 11)),
|
|
1589
1651
|
D("ss", "SS", E(31, 9))
|
|
1590
1652
|
];
|
|
1591
1653
|
}
|
|
1592
|
-
function
|
|
1654
|
+
function Bn() {
|
|
1593
1655
|
return [
|
|
1594
|
-
...
|
|
1656
|
+
...An(),
|
|
1595
1657
|
D("wlb", "W", E(20.5, 5)),
|
|
1596
1658
|
D("mlb", "M", E(26.5, 5)),
|
|
1597
1659
|
D("slb", "S", E(32.5, 5)),
|
|
1598
|
-
D("nb", "NB",
|
|
1599
|
-
...
|
|
1660
|
+
D("nb", "NB", P.nb),
|
|
1661
|
+
...R(6),
|
|
1600
1662
|
D("fs", "FS", E(23, 11)),
|
|
1601
1663
|
D("ss", "SS", E(31, 9))
|
|
1602
1664
|
];
|
|
1603
1665
|
}
|
|
1604
1666
|
// src/common/formations/presets.ts
|
|
1605
|
-
function
|
|
1667
|
+
function W(e, t, n, r) {
|
|
1606
1668
|
return {
|
|
1607
1669
|
id: e,
|
|
1608
1670
|
name: t,
|
|
1609
1671
|
side: n,
|
|
1610
|
-
players: r.map(
|
|
1672
|
+
players: r.map(Le)
|
|
1611
1673
|
};
|
|
1612
1674
|
}
|
|
1613
|
-
var
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1675
|
+
var Vn = /* @__PURE__ */ y([
|
|
1676
|
+
W("i-formation", "I-Formation", "offense", jn()),
|
|
1677
|
+
W("singleback-ace", "Singleback Ace", "offense", z()),
|
|
1678
|
+
W("shotgun-spread", "Shotgun Spread", "offense", B()),
|
|
1679
|
+
W("trips", "Trips", "offense", Mn()),
|
|
1680
|
+
W("empty", "Empty", "offense", Nn()),
|
|
1681
|
+
W("pistol", "Pistol", "offense", Pn()),
|
|
1682
|
+
W("bunch", "Bunch", "offense", Fn()),
|
|
1683
|
+
W("defense-4-3", "4-3 Over", "defense", V()),
|
|
1684
|
+
W("defense-3-4", "3-4", "defense", In()),
|
|
1685
|
+
W("defense-nickel", "Nickel", "defense", U(H)),
|
|
1686
|
+
W("defense-dime", "Dime", "defense", Rn()),
|
|
1687
|
+
W("defense-4-2-5", "4-2-5", "defense", zn()),
|
|
1688
|
+
W("defense-3-3-5", "3-3-5", "defense", Bn())
|
|
1627
1689
|
]);
|
|
1628
|
-
function
|
|
1629
|
-
return
|
|
1690
|
+
function Hn(e) {
|
|
1691
|
+
return Vn.find((t) => t.id === e);
|
|
1630
1692
|
}
|
|
1631
1693
|
// src/common/geometry/line-decoration.ts
|
|
1632
|
-
var
|
|
1633
|
-
function
|
|
1694
|
+
var Un = .9;
|
|
1695
|
+
function Wn(e) {
|
|
1634
1696
|
let t = e.at(-1);
|
|
1635
1697
|
if (t !== void 0) for (let n = e.length - 2; n >= 0; n--) {
|
|
1636
1698
|
let r = e[n];
|
|
@@ -1644,11 +1706,11 @@ function Vn(e) {
|
|
|
1644
1706
|
}
|
|
1645
1707
|
}
|
|
1646
1708
|
}
|
|
1647
|
-
function
|
|
1648
|
-
return
|
|
1709
|
+
function Gn(e, t) {
|
|
1710
|
+
return Ut(e, t, Un);
|
|
1649
1711
|
}
|
|
1650
|
-
function
|
|
1651
|
-
let r =
|
|
1712
|
+
function Kn(e, t, n) {
|
|
1713
|
+
let r = Wn(e);
|
|
1652
1714
|
if (r === void 0) return;
|
|
1653
1715
|
let { tip: i, ux: a, uy: o } = r, s = i.x - t * a, c = i.y - t * o;
|
|
1654
1716
|
return [
|
|
@@ -1663,8 +1725,8 @@ function Un(e, t, n) {
|
|
|
1663
1725
|
}
|
|
1664
1726
|
];
|
|
1665
1727
|
}
|
|
1666
|
-
function
|
|
1667
|
-
let n =
|
|
1728
|
+
function qn(e, t) {
|
|
1729
|
+
let n = Wn(e);
|
|
1668
1730
|
if (n === void 0) return;
|
|
1669
1731
|
let { tip: r, ux: i, uy: a } = n, o = t / 2;
|
|
1670
1732
|
return [{
|
|
@@ -1676,12 +1738,12 @@ function Wn(e, t) {
|
|
|
1676
1738
|
}];
|
|
1677
1739
|
}
|
|
1678
1740
|
// src/common/geometry/player-marker.ts
|
|
1679
|
-
var
|
|
1680
|
-
function
|
|
1741
|
+
var Jn = .82;
|
|
1742
|
+
function Yn(e, t) {
|
|
1681
1743
|
switch (e) {
|
|
1682
1744
|
case "circle": return {
|
|
1683
1745
|
kind: "circle",
|
|
1684
|
-
radius: t *
|
|
1746
|
+
radius: t * Jn
|
|
1685
1747
|
};
|
|
1686
1748
|
case "square": return {
|
|
1687
1749
|
kind: "square",
|
|
@@ -1690,12 +1752,12 @@ function Kn(e, t) {
|
|
|
1690
1752
|
}
|
|
1691
1753
|
}
|
|
1692
1754
|
// src/common/input/keymap.ts
|
|
1693
|
-
function
|
|
1755
|
+
function Xn(e) {
|
|
1694
1756
|
let t = e.metaKey || e.ctrlKey, n = e.key.toLowerCase();
|
|
1695
1757
|
return e.key === "Escape" ? "cancel-interaction" : e.key === "Enter" ? "commit-line" : t && n === "z" ? e.shiftKey ? "redo" : "undo" : t && n === "y" ? "redo" : null;
|
|
1696
1758
|
}
|
|
1697
1759
|
// src/common/plays/presets.ts
|
|
1698
|
-
function
|
|
1760
|
+
function G(e, t, n, r, i, a) {
|
|
1699
1761
|
return {
|
|
1700
1762
|
id: e,
|
|
1701
1763
|
kind: t,
|
|
@@ -1705,7 +1767,7 @@ function q(e, t, n, r, i, a) {
|
|
|
1705
1767
|
interpolation: a
|
|
1706
1768
|
};
|
|
1707
1769
|
}
|
|
1708
|
-
function
|
|
1770
|
+
function K(e, t, n, r, i, a, o, s) {
|
|
1709
1771
|
return {
|
|
1710
1772
|
id: e,
|
|
1711
1773
|
name: t,
|
|
@@ -1715,267 +1777,331 @@ function J(e, t, n, r, i, a, o, s) {
|
|
|
1715
1777
|
summary: a,
|
|
1716
1778
|
data: {
|
|
1717
1779
|
version: 2,
|
|
1718
|
-
field:
|
|
1780
|
+
field: b("middle"),
|
|
1719
1781
|
players: o,
|
|
1720
1782
|
lines: s
|
|
1721
1783
|
}
|
|
1722
1784
|
};
|
|
1723
1785
|
}
|
|
1724
|
-
var
|
|
1786
|
+
var Zn = {
|
|
1725
1787
|
cornerDepth: 5,
|
|
1726
1788
|
fs: E(18, 12),
|
|
1727
1789
|
ss: E(35, 12)
|
|
1728
|
-
},
|
|
1790
|
+
}, q = {
|
|
1729
1791
|
cornerDepth: 7,
|
|
1730
1792
|
fs: E(26.5, 12),
|
|
1731
1793
|
ss: E(34, 6)
|
|
1732
|
-
},
|
|
1733
|
-
|
|
1734
|
-
...
|
|
1794
|
+
}, Qn = /* @__PURE__ */ y([
|
|
1795
|
+
K("play-inside-zone", "Inside Zone", "offense", "run-zone", "11 pers", "Zone blocking, hitting inside in one motion. The RB aims inside the RG and cuts to the B gap or the backside A gap off the 3-technique's movement.", [
|
|
1796
|
+
...I(),
|
|
1735
1797
|
D("y", "Y", E(34.5, -1), "square"),
|
|
1736
1798
|
D("qb", "QB", E(26.5, -5)),
|
|
1737
1799
|
D("rb", "RB", E(24, -5)),
|
|
1738
1800
|
D("x", "X", E(6, -1)),
|
|
1739
1801
|
D("h", "H", E(40, -2)),
|
|
1740
1802
|
D("z", "Z", E(47, -1)),
|
|
1741
|
-
...
|
|
1803
|
+
...V()
|
|
1742
1804
|
], [
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1805
|
+
G("bl-lt", "block", "lt", [], O(j.eL), "straight"),
|
|
1806
|
+
G("bl-lg", "block", "lg", [], O(j.n), "straight"),
|
|
1807
|
+
G("bl-c", "block", "c", [k(j.n, 1)], O(N.m), "bezier"),
|
|
1808
|
+
G("bl-rg", "block", "rg", [], O(j.t), "straight"),
|
|
1809
|
+
G("bl-rt", "block", "rt", [k(j.t, 1.5)], O(N.s), "bezier"),
|
|
1810
|
+
G("bl-y", "block", "y", [], O(M), "straight"),
|
|
1811
|
+
G("run-rb", "route", "rb", [E(27.5, -2)], E(28, 3.5), "bezier")
|
|
1750
1812
|
]),
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1813
|
+
K("play-outside-zone", "Outside Zone", "offense", "run-zone", "11 pers", "Wide zone, stretching the defense sideways. The RB aims outside the TE and bounces out or cuts upfield off the E and S.", [...z(), ...V()], [
|
|
1814
|
+
G("bl-lt", "block", "lt", [], O(j.eL), "straight"),
|
|
1815
|
+
G("bl-lg", "block", "lg", [], O(j.n), "straight"),
|
|
1816
|
+
G("bl-c", "block", "c", [k(j.n, 1)], O(N.m, .5), "bezier"),
|
|
1817
|
+
G("bl-rg", "block", "rg", [], O(j.t, .5), "straight"),
|
|
1818
|
+
G("bl-rt", "block", "rt", [k(j.t, 1.5)], O(N.s, .5), "bezier"),
|
|
1819
|
+
G("bl-y", "block", "y", [], O(M, .5), "straight"),
|
|
1820
|
+
G("run-rb", "route", "rb", [E(31, -5), E(35.5, -2)], E(37.5, 3), "bezier")
|
|
1759
1821
|
]),
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1822
|
+
K("play-power", "Power", "offense", "run-gap", "21 pers", "Down blocks on the play side, the FB kicks out the 9-technique E, and the backside guard pulls to lead through the C gap.", [...jn(), ...V()], [
|
|
1823
|
+
G("bl-y", "block", "y", [], O(N.s), "straight"),
|
|
1824
|
+
G("bl-rt", "block", "rt", [], O(j.t, .5), "straight"),
|
|
1825
|
+
G("bl-rg", "block", "rg", [k(j.t, -1.5)], O(N.m), "bezier"),
|
|
1826
|
+
G("bl-c", "block", "c", [], O(j.n), "straight"),
|
|
1827
|
+
G("bl-lt", "block", "lt", [], O(j.eL), "straight"),
|
|
1828
|
+
G("lead-fb", "block", "fb", [E(31, -3.5), E(33.5, -.5)], O(M, -.5), "bezier"),
|
|
1829
|
+
G("pull-lg", "block", "lg", [
|
|
1768
1830
|
E(25, -4),
|
|
1769
1831
|
E(31, -4),
|
|
1770
1832
|
E(32.5, -2),
|
|
1771
1833
|
E(32.5, 1)
|
|
1772
1834
|
], E(31.5, 3.5), "bezier"),
|
|
1773
|
-
|
|
1835
|
+
G("run-rb", "route", "rb", [E(30, -6), E(33, -3)], E(33.5, 4), "bezier")
|
|
1774
1836
|
]),
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1837
|
+
K("play-counter", "Counter (GT)", "offense", "run-gap", "21 pers", "The backside guard kicks out the 9-technique E, the tackle wraps through the C gap, and the FB fills where the tackle left (GT counter).", [...jn(), ...V()], [
|
|
1838
|
+
G("bl-y", "block", "y", [], O(N.s), "straight"),
|
|
1839
|
+
G("bl-rt", "block", "rt", [], O(j.t, .5), "straight"),
|
|
1840
|
+
G("bl-rg", "block", "rg", [k(j.t, -1.5)], O(N.m), "bezier"),
|
|
1841
|
+
G("bl-c", "block", "c", [], O(j.n), "straight"),
|
|
1842
|
+
G("pull-lg", "block", "lg", [
|
|
1781
1843
|
E(25, -4),
|
|
1782
1844
|
E(32, -4),
|
|
1783
1845
|
E(33.5, -.5)
|
|
1784
1846
|
], O(M, -.5), "straight"),
|
|
1785
|
-
|
|
1847
|
+
G("pull-lt", "block", "lt", [
|
|
1786
1848
|
E(23, -5),
|
|
1787
1849
|
E(31, -5),
|
|
1788
1850
|
E(32.5, -2),
|
|
1789
1851
|
E(32.5, 1)
|
|
1790
1852
|
], E(31.5, 3.5), "straight"),
|
|
1791
|
-
|
|
1792
|
-
|
|
1853
|
+
G("fill-fb", "block", "fb", [E(24, -3), E(22.5, -.5)], O(j.eL, 1), "bezier"),
|
|
1854
|
+
G("run-rb", "route", "rb", [
|
|
1793
1855
|
E(24, -7.5),
|
|
1794
1856
|
E(30, -6.5),
|
|
1795
1857
|
E(33, -3)
|
|
1796
1858
|
], E(33.5, 4), "bezier")
|
|
1797
1859
|
]),
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1860
|
+
K("play-four-verticals", "Four Verticals", "offense", "pass-deep", "10 pers", "Four verticals from trips, attacking the seams against a single-high safety.", [...Mn(), ...U(q, M)], [
|
|
1861
|
+
G("go-x", "route", "x", [E(4, 4)], E(4, 13), "straight"),
|
|
1862
|
+
G("seam-y", "route", "y", [E(33, 5)], E(31, 13), "bezier"),
|
|
1863
|
+
G("seam-h", "route", "h", [E(40, 5)], E(38, 13), "bezier"),
|
|
1864
|
+
G("go-z", "route", "z", [E(49, 4)], E(49, 13), "straight"),
|
|
1865
|
+
G("chk-rb", "route", "rb", [], E(20, -3), "straight")
|
|
1804
1866
|
]),
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1867
|
+
K("play-mesh", "Mesh", "offense", "pass-dropback", "10 pers", "Shallow crossers that mesh. Works against man and zone by running to the open spot.", [...B(), ...U(H)], [
|
|
1868
|
+
G("cross-y", "route", "y", [E(20, 3.5)], E(38, 4), "straight"),
|
|
1869
|
+
G("cross-h", "route", "h", [E(33, 3)], E(15, 3.5), "straight"),
|
|
1870
|
+
G("corner-x", "route", "x", [E(5, 5)], E(2, 9), "bezier"),
|
|
1871
|
+
G("sit-z", "route", "z", [], E(47, 5), "straight"),
|
|
1872
|
+
G("swing-rb", "route", "rb", [E(33, -4)], E(41, -3), "straight")
|
|
1811
1873
|
]),
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1874
|
+
K("play-smash", "Smash", "offense", "pass-dropback", "11 pers", "A corner and hitch high-low that attacks the corner against Cover 2.", [...z(), ...U(Zn, M)], [
|
|
1875
|
+
G("hitch-z", "route", "z", [], E(47, 3), "straight"),
|
|
1876
|
+
G("corner-h", "route", "h", [E(41, 4)], E(46, 10), "bezier"),
|
|
1877
|
+
G("dig-y", "route", "y", [E(34.5, 8)], E(27, 9), "straight"),
|
|
1878
|
+
G("hitch-x", "route", "x", [], E(6, 3), "straight"),
|
|
1879
|
+
G("flat-rb", "route", "rb", [], E(22, -4), "straight")
|
|
1818
1880
|
]),
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1881
|
+
K("play-stick", "Stick", "offense", "pass-quick", "11 pers", "A three-step quick game. Stick (sit down) and flat for a fast distribution.", [...z(), ...U(H, M)], [
|
|
1882
|
+
G("stick-y", "route", "y", [], E(34.5, 4), "straight"),
|
|
1883
|
+
G("flat-h", "route", "h", [], E(45, 0), "straight"),
|
|
1884
|
+
G("hitch-z", "route", "z", [], E(47, 3), "straight"),
|
|
1885
|
+
G("slant-x", "route", "x", [E(6, 2)], E(10, 3), "bezier"),
|
|
1886
|
+
G("chk-rb", "route", "rb", [], E(21, -5), "straight")
|
|
1825
1887
|
]),
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1888
|
+
K("play-rpo-bubble", "RPO (IZ + Bubble)", "offense", "rpo", "11 pers", "Reads the W on the bubble side: bubble if the W enters the box, inside zone if he stays.", [...B(), ...U(H)], [
|
|
1889
|
+
G("bl-lt", "block", "lt", [], O(j.eL), "straight"),
|
|
1890
|
+
G("bl-lg", "block", "lg", [k(j.n, -1)], O(P.m), "bezier"),
|
|
1891
|
+
G("bl-c", "block", "c", [], O(j.n), "straight"),
|
|
1892
|
+
G("bl-rg", "block", "rg", [], O(j.t), "straight"),
|
|
1893
|
+
G("bl-rt", "block", "rt", [], O(j.eR), "straight"),
|
|
1894
|
+
G("run-rb", "route", "rb", [E(26, -2.5)], E(23, 3), "straight"),
|
|
1895
|
+
G("bubble-h", "route", "h", [E(43, -3)], E(46, -.5), "bezier"),
|
|
1896
|
+
G("bl-z", "block", "z", [], O(F(H.cornerDepth).right), "straight"),
|
|
1897
|
+
G("glance-y", "route", "y", [E(15, 1)], E(19, 3), "bezier")
|
|
1836
1898
|
]),
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1899
|
+
K("play-pa-boot", "PA Boot (Sail)", "offense", "pa", "11 pers", "Play action with the QB booting out, attacking in three levels: flat, sail, and vertical.", [...z(), ...V()], [
|
|
1900
|
+
G("fake-rb", "motion", "rb", [E(24, -6)], E(20.5, -4.5), "straight"),
|
|
1901
|
+
G("boot-qb", "route", "qb", [E(31, -4)], E(36.5, -5), "bezier"),
|
|
1902
|
+
G("bl-lt", "block", "lt", [], O(j.eL), "straight"),
|
|
1903
|
+
G("bl-c", "block", "c", [], O(j.n), "straight"),
|
|
1904
|
+
G("bl-rg", "block", "rg", [], O(j.t), "straight"),
|
|
1905
|
+
G("flat-y", "route", "y", [E(37, -.5)], E(43, .5), "bezier"),
|
|
1906
|
+
G("sail-h", "route", "h", [E(41, 3)], E(46, 8), "bezier"),
|
|
1907
|
+
G("go-z", "route", "z", [E(49, 3)], E(49, 13), "straight"),
|
|
1908
|
+
G("comeback-x", "route", "x", [E(5, 9)], E(7.5, 7.5), "bezier")
|
|
1847
1909
|
]),
|
|
1848
|
-
|
|
1910
|
+
K("play-cover-1", "Cover 1 (Man Free)", "defense", "coverage", "Nickel", "One deep free safety, everyone else in man. The W waits in the hole (rat).", [...U({
|
|
1849
1911
|
cornerDepth: 6,
|
|
1850
1912
|
fs: E(26.5, 11),
|
|
1851
1913
|
ss: E(38, 6)
|
|
1852
|
-
}), ...
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1914
|
+
}), ...B()], [
|
|
1915
|
+
G("man-cbl", "motion", "cb-l", [], E(5.5, .5), "straight"),
|
|
1916
|
+
G("man-cbr", "motion", "cb-r", [], E(47.5, .5), "straight"),
|
|
1917
|
+
G("man-nb", "motion", "nb", [], E(13, -.5), "straight"),
|
|
1918
|
+
G("man-ss", "motion", "ss", [], E(40, -.5), "straight"),
|
|
1919
|
+
G("man-mlb", "motion", "mlb", [E(27.5, 2.5), E(27.5, -2.5)], E(29, -3.5), "straight"),
|
|
1920
|
+
G("rat-wlb", "motion", "wlb", [], E(27.5, 3.5), "straight"),
|
|
1921
|
+
G("free-fs", "motion", "fs", [], E(26.5, 13), "straight")
|
|
1860
1922
|
]),
|
|
1861
|
-
|
|
1923
|
+
K("play-cover-2", "Cover 2", "defense", "coverage", "Nickel", "Two-deep, five-under zone. Two safeties split the deep halves, and the CBs sit in the flats.", [...U({
|
|
1862
1924
|
cornerDepth: 5,
|
|
1863
1925
|
fs: E(15, 11),
|
|
1864
1926
|
ss: E(38, 11)
|
|
1865
|
-
}), ...
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1927
|
+
}), ...B()], [
|
|
1928
|
+
G("half-fs", "motion", "fs", [], E(13, 14), "straight"),
|
|
1929
|
+
G("half-ss", "motion", "ss", [], E(40, 14), "straight"),
|
|
1930
|
+
G("flat-cbl", "motion", "cb-l", [], E(9.5, 4), "straight"),
|
|
1931
|
+
G("flat-cbr", "motion", "cb-r", [], E(43.5, 4), "straight"),
|
|
1932
|
+
G("hook-mlb", "motion", "mlb", [], E(21.5, 10), "straight"),
|
|
1933
|
+
G("hook-wlb", "motion", "wlb", [], E(32.5, 10), "straight"),
|
|
1934
|
+
G("curl-nb", "motion", "nb", [], E(16, 9), "straight")
|
|
1873
1935
|
]),
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1936
|
+
K("play-cover-3", "Cover 3", "defense", "coverage", "Nickel", "Three-deep, four-under. The single-high zone that is today's baseline.", [...U(q), ...B()], [
|
|
1937
|
+
G("deep-cbl", "motion", "cb-l", [], E(7, 13), "straight"),
|
|
1938
|
+
G("deep-cbr", "motion", "cb-r", [], E(46, 13), "straight"),
|
|
1939
|
+
G("deep-fs", "motion", "fs", [], E(26.5, 14), "straight"),
|
|
1940
|
+
G("curl-nb", "motion", "nb", [], E(15.5, 9), "straight"),
|
|
1941
|
+
G("hook-mlb", "motion", "mlb", [], E(22, 10), "straight"),
|
|
1942
|
+
G("hook-wlb", "motion", "wlb", [], E(31, 10), "straight"),
|
|
1943
|
+
G("flat-ss", "motion", "ss", [], E(39, 4), "straight")
|
|
1882
1944
|
]),
|
|
1883
|
-
|
|
1945
|
+
K("play-cover-4", "Cover 4 (Quarters)", "defense", "coverage", "Nickel", "Four-deep quarters, stamping out vertical passes from above.", [...U({
|
|
1884
1946
|
cornerDepth: 7,
|
|
1885
1947
|
fs: E(20, 11),
|
|
1886
1948
|
ss: E(33, 11)
|
|
1887
|
-
}), ...
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1949
|
+
}), ...B()], [
|
|
1950
|
+
G("qtr-cbl", "motion", "cb-l", [], E(6, 13), "straight"),
|
|
1951
|
+
G("qtr-cbr", "motion", "cb-r", [], E(47, 13), "straight"),
|
|
1952
|
+
G("qtr-fs", "motion", "fs", [], E(18, 14), "straight"),
|
|
1953
|
+
G("qtr-ss", "motion", "ss", [], E(35, 14), "straight"),
|
|
1954
|
+
G("under-nb", "motion", "nb", [], E(16, 8), "straight"),
|
|
1955
|
+
G("under-mlb", "motion", "mlb", [], E(23, 9), "straight"),
|
|
1956
|
+
G("under-wlb", "motion", "wlb", [], E(31, 9), "straight")
|
|
1895
1957
|
]),
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1958
|
+
K("play-fire-zone", "Fire Zone", "defense", "pressure", "Nickel", "A five-man blitz with one lineman dropping, covered by three-deep, three-under.", [...U(q), ...B()], [
|
|
1959
|
+
G("rush-dtl", "route", "dt-l", [], E(25, 0), "straight"),
|
|
1960
|
+
G("rush-dtr", "route", "dt-r", [], E(28.5, 0), "straight"),
|
|
1961
|
+
G("rush-der", "route", "de-r", [], E(33, 0), "straight"),
|
|
1962
|
+
G("blz-wlb", "route", "wlb", [E(31.5, 2.5)], E(31, 0), "bezier"),
|
|
1963
|
+
G("blz-nb", "route", "nb", [E(17, 2.5)], E(20, 0), "bezier"),
|
|
1964
|
+
G("drop-del", "motion", "de-l", [E(19, 4)], E(17, 7), "straight"),
|
|
1965
|
+
G("deep-cbl", "motion", "cb-l", [], E(7, 13), "straight"),
|
|
1966
|
+
G("deep-cbr", "motion", "cb-r", [], E(46, 13), "straight"),
|
|
1967
|
+
G("deep-fs", "motion", "fs", [], E(26.5, 14), "straight"),
|
|
1968
|
+
G("hook-mlb", "motion", "mlb", [], E(23, 9), "straight"),
|
|
1969
|
+
G("flat-ss", "motion", "ss", [], E(39, 4), "straight")
|
|
1908
1970
|
]),
|
|
1909
|
-
|
|
1971
|
+
K("play-cover-0", "Cover 0 Blitz", "defense", "pressure", "Nickel", "All-out man with no safety deep, six rushers for maximum pressure. The FS takes the RB in man.", [...U({
|
|
1910
1972
|
cornerDepth: 5,
|
|
1911
1973
|
fs: E(22, 9),
|
|
1912
1974
|
ss: E(31, 9)
|
|
1913
|
-
}), ...
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1975
|
+
}), ...B()], [
|
|
1976
|
+
G("rush-del", "route", "de-l", [], E(20, 0), "straight"),
|
|
1977
|
+
G("rush-dtl", "route", "dt-l", [], E(25, 0), "straight"),
|
|
1978
|
+
G("rush-dtr", "route", "dt-r", [], E(30.5, 0), "straight"),
|
|
1979
|
+
G("rush-der", "route", "de-r", [], E(33, 0), "straight"),
|
|
1980
|
+
G("blz-mlb", "route", "mlb", [E(27, 2.5)], E(27.5, 0), "bezier"),
|
|
1981
|
+
G("blz-wlb", "route", "wlb", [E(31.5, 2.5)], E(31, 0), "bezier"),
|
|
1982
|
+
G("man-cbl", "motion", "cb-l", [], E(5.5, .5), "straight"),
|
|
1983
|
+
G("man-cbr", "motion", "cb-r", [], E(47.5, .5), "straight"),
|
|
1984
|
+
G("man-nb", "motion", "nb", [], E(13, -.5), "straight"),
|
|
1985
|
+
G("man-fs", "motion", "fs", [E(22, 2.5), E(23, -2.5)], E(28, -4), "straight"),
|
|
1986
|
+
G("man-ss", "motion", "ss", [E(37, 4)], E(39.5, -.5), "straight")
|
|
1925
1987
|
]),
|
|
1926
|
-
|
|
1988
|
+
K("play-double-a", "Double-A Gap", "defense", "pressure", "Nickel", "Two defenders shown in both A gaps. It can turn into a real pressure or a simulated one.", [
|
|
1927
1989
|
D("de-l", "E", j.eL),
|
|
1928
1990
|
D("dt-l", "T", E(23, 1.5)),
|
|
1929
1991
|
D("dt-r", "T", j.t),
|
|
1930
1992
|
D("de-r", "E", j.eR),
|
|
1931
1993
|
D("mlb", "M", E(25.5, 3)),
|
|
1932
1994
|
D("wlb", "W", E(27.5, 3)),
|
|
1933
|
-
D("nb", "NB",
|
|
1934
|
-
D("cb-l", "CB",
|
|
1935
|
-
D("cb-r", "CB",
|
|
1936
|
-
D("fs", "FS",
|
|
1937
|
-
D("ss", "SS",
|
|
1938
|
-
...
|
|
1995
|
+
D("nb", "NB", P.nb),
|
|
1996
|
+
D("cb-l", "CB", F(7).left),
|
|
1997
|
+
D("cb-r", "CB", F(7).right),
|
|
1998
|
+
D("fs", "FS", q.fs),
|
|
1999
|
+
D("ss", "SS", q.ss),
|
|
2000
|
+
...B()
|
|
1939
2001
|
], [
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
2002
|
+
G("aim-mlb", "route", "mlb", [], E(25.5, .5), "straight"),
|
|
2003
|
+
G("aim-wlb", "route", "wlb", [], E(27.5, .5), "straight"),
|
|
2004
|
+
G("rush-del", "route", "de-l", [], E(20, 0), "straight"),
|
|
2005
|
+
G("rush-dtl", "route", "dt-l", [], E(22.5, 0), "straight"),
|
|
2006
|
+
G("rush-dtr", "route", "dt-r", [], E(30.5, 0), "straight"),
|
|
2007
|
+
G("rush-der", "route", "de-r", [], E(33, 0), "straight"),
|
|
2008
|
+
G("bail-cbl", "motion", "cb-l", [], E(7, 12), "straight"),
|
|
2009
|
+
G("bail-cbr", "motion", "cb-r", [], E(46, 12), "straight"),
|
|
2010
|
+
G("deep-fs", "motion", "fs", [], E(26.5, 14), "straight"),
|
|
2011
|
+
G("curl-nb", "motion", "nb", [], E(15.5, 9), "straight"),
|
|
2012
|
+
G("flat-ss", "motion", "ss", [], E(39, 4), "straight")
|
|
1951
2013
|
]),
|
|
1952
|
-
|
|
1953
|
-
...
|
|
2014
|
+
K("play-cover-6", "Cover 6", "defense", "coverage", "Nickel", "Split coverage: two quarters plus a half. Quarters to the field, Cover 2 to the boundary.", [
|
|
2015
|
+
...Ln(),
|
|
1954
2016
|
D("nb", "NB", E(39, 5)),
|
|
1955
|
-
D("cb-l", "CB",
|
|
1956
|
-
D("cb-r", "CB",
|
|
2017
|
+
D("cb-l", "CB", F(5).left),
|
|
2018
|
+
D("cb-r", "CB", F(7).right),
|
|
1957
2019
|
D("fs", "FS", E(15, 11)),
|
|
1958
2020
|
D("ss", "SS", E(35, 10)),
|
|
1959
|
-
...
|
|
2021
|
+
...B()
|
|
1960
2022
|
], [
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
2023
|
+
G("flat-cbl", "motion", "cb-l", [], E(10, 4), "straight"),
|
|
2024
|
+
G("half-fs", "motion", "fs", [], E(12, 14), "straight"),
|
|
2025
|
+
G("qtr-cbr", "motion", "cb-r", [], E(47, 13), "straight"),
|
|
2026
|
+
G("qtr-ss", "motion", "ss", [], E(38, 14), "straight"),
|
|
2027
|
+
G("curl-nb", "motion", "nb", [], E(41, 9), "straight"),
|
|
2028
|
+
G("hook-mlb", "motion", "mlb", [], E(22, 10), "straight"),
|
|
2029
|
+
G("hook-wlb", "motion", "wlb", [], E(31, 10), "straight")
|
|
1968
2030
|
])
|
|
1969
2031
|
]);
|
|
1970
|
-
function
|
|
1971
|
-
return
|
|
2032
|
+
function $n(e) {
|
|
2033
|
+
return Qn.find((t) => t.id === e);
|
|
2034
|
+
}
|
|
2035
|
+
// src/browser/i18n/messages.ts
|
|
2036
|
+
var er = ["en", "ja"], tr = {
|
|
2037
|
+
en: {
|
|
2038
|
+
tool: {
|
|
2039
|
+
select: "Select",
|
|
2040
|
+
"add-player": "Add player",
|
|
2041
|
+
"draw-line": "Draw line"
|
|
2042
|
+
},
|
|
2043
|
+
undo: "Undo",
|
|
2044
|
+
redo: "Redo",
|
|
2045
|
+
delete: "Delete",
|
|
2046
|
+
finishLine: "Finish line",
|
|
2047
|
+
cancel: "Cancel",
|
|
2048
|
+
zone: tt,
|
|
2049
|
+
formation: "Formation",
|
|
2050
|
+
loadFormation: "Load formation…",
|
|
2051
|
+
side: {
|
|
2052
|
+
offense: "Offense",
|
|
2053
|
+
defense: "Defense"
|
|
2054
|
+
},
|
|
2055
|
+
formationLimit: (e) => `Formations that would put more than ${e} players on the field cannot be loaded`,
|
|
2056
|
+
playerLimit: (e) => `Up to ${e} players`,
|
|
2057
|
+
lineLimit: (e) => `Up to ${e} lines`,
|
|
2058
|
+
selectionHint: "Select a player or a line to edit its properties",
|
|
2059
|
+
player: "Player",
|
|
2060
|
+
line: "Line",
|
|
2061
|
+
label: "Label",
|
|
2062
|
+
shape: "Shape",
|
|
2063
|
+
color: "Color",
|
|
2064
|
+
kind: "Kind",
|
|
2065
|
+
interpolation: "Interpolation",
|
|
2066
|
+
width: "Width",
|
|
2067
|
+
shapes: {
|
|
2068
|
+
circle: "Circle",
|
|
2069
|
+
square: "Square"
|
|
2070
|
+
},
|
|
2071
|
+
fills: {
|
|
2072
|
+
outline: "Outline",
|
|
2073
|
+
solid: "Solid"
|
|
2074
|
+
},
|
|
2075
|
+
kinds: {
|
|
2076
|
+
route: "Route",
|
|
2077
|
+
block: "Block",
|
|
2078
|
+
motion: "Motion"
|
|
2079
|
+
},
|
|
2080
|
+
interpolations: {
|
|
2081
|
+
straight: "Straight",
|
|
2082
|
+
bezier: "Curved"
|
|
2083
|
+
},
|
|
2084
|
+
colors: {
|
|
2085
|
+
swatch1: "Black",
|
|
2086
|
+
swatch2: "Red",
|
|
2087
|
+
swatch3: "Blue",
|
|
2088
|
+
swatch4: "Green"
|
|
2089
|
+
},
|
|
2090
|
+
swatch: (e, t) => `${e} ${t.toLowerCase()}`,
|
|
2091
|
+
reset: "Default",
|
|
2092
|
+
resetField: (e) => `Reset ${e.toLowerCase()} to default`
|
|
2093
|
+
},
|
|
2094
|
+
ja: e
|
|
2095
|
+
};
|
|
2096
|
+
function nr(e) {
|
|
2097
|
+
return tr[e];
|
|
1972
2098
|
}
|
|
1973
2099
|
// src/browser/input/pointer-input.ts
|
|
1974
|
-
function
|
|
2100
|
+
function rr(e) {
|
|
1975
2101
|
return e instanceof HTMLInputElement || e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement;
|
|
1976
2102
|
}
|
|
1977
|
-
var
|
|
1978
|
-
constructor(
|
|
2103
|
+
var ir = class extends r {
|
|
2104
|
+
constructor(e, n, r) {
|
|
1979
2105
|
super();
|
|
1980
2106
|
let i = n.canvas;
|
|
1981
2107
|
i.tabIndex = 0;
|
|
@@ -1988,7 +2114,7 @@ var Qn = class extends n {
|
|
|
1988
2114
|
}, d = (e) => {
|
|
1989
2115
|
l(e) && !r.getViewState().isDrawing && r.cancelInteraction();
|
|
1990
2116
|
}, f = () => r.commitLine(), p = (e) => {
|
|
1991
|
-
if (!
|
|
2117
|
+
if (!rr(e.target)) switch (Xn(e)) {
|
|
1992
2118
|
case "cancel-interaction":
|
|
1993
2119
|
r.cancelInteraction();
|
|
1994
2120
|
return;
|
|
@@ -2004,39 +2130,39 @@ var Qn = class extends n {
|
|
|
2004
2130
|
case null: return;
|
|
2005
2131
|
}
|
|
2006
2132
|
}, m = new AbortController(), { signal: h } = m;
|
|
2007
|
-
i.addEventListener("pointerdown", s, { signal: h }), i.addEventListener("pointermove", c, { signal: h }), i.addEventListener("pointerup", u, { signal: h }), i.addEventListener("pointercancel", d, { signal: h }), i.addEventListener("lostpointercapture", d, { signal: h }), i.addEventListener("dblclick", f, { signal: h }),
|
|
2133
|
+
i.addEventListener("pointerdown", s, { signal: h }), i.addEventListener("pointermove", c, { signal: h }), i.addEventListener("pointerup", u, { signal: h }), i.addEventListener("pointercancel", d, { signal: h }), i.addEventListener("lostpointercapture", d, { signal: h }), i.addEventListener("dblclick", f, { signal: h }), e.addEventListener("keydown", p, { signal: h }), this._register(t(() => {
|
|
2008
2134
|
m.abort(), i.removeAttribute("tabindex");
|
|
2009
2135
|
}));
|
|
2010
2136
|
}
|
|
2011
|
-
}, $n = "data:font/woff2;base64,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", er = "Playmaker Saira", tr = `"${er}", sans-serif`;
|
|
2012
|
-
function
|
|
2013
|
-
return `700 ${e}px ${
|
|
2137
|
+
}, ar = "data:font/woff2;base64,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", or = "Playmaker Saira", sr = `"${or}", sans-serif`;
|
|
2138
|
+
function cr(e) {
|
|
2139
|
+
return `700 ${e}px ${sr}`;
|
|
2014
2140
|
}
|
|
2015
2141
|
// src/browser/theme/field-font-face.ts
|
|
2016
|
-
var
|
|
2017
|
-
function
|
|
2018
|
-
return
|
|
2142
|
+
var lr;
|
|
2143
|
+
function ur() {
|
|
2144
|
+
return lr ??= dr(), lr;
|
|
2019
2145
|
}
|
|
2020
|
-
async function
|
|
2146
|
+
async function dr() {
|
|
2021
2147
|
try {
|
|
2022
|
-
let e = new FontFace(
|
|
2148
|
+
let e = new FontFace(or, `url("${ar}")`, { weight: "700" });
|
|
2023
2149
|
document.fonts.add(e), await e.load();
|
|
2024
2150
|
} catch {}
|
|
2025
2151
|
}
|
|
2026
2152
|
// src/browser/theme/css-color.ts
|
|
2027
|
-
var
|
|
2028
|
-
function
|
|
2029
|
-
if (
|
|
2153
|
+
var fr = { status: "unresolved" };
|
|
2154
|
+
function pr() {
|
|
2155
|
+
if (fr.status === "unresolved") {
|
|
2030
2156
|
let e = document.createElement("canvas").getContext("2d");
|
|
2031
|
-
|
|
2157
|
+
fr = e === null ? { status: "unavailable" } : {
|
|
2032
2158
|
status: "ready",
|
|
2033
2159
|
ctx: e
|
|
2034
2160
|
};
|
|
2035
2161
|
}
|
|
2036
|
-
return
|
|
2162
|
+
return fr;
|
|
2037
2163
|
}
|
|
2038
|
-
function
|
|
2039
|
-
let t =
|
|
2164
|
+
function J(e) {
|
|
2165
|
+
let t = pr();
|
|
2040
2166
|
if (t.status !== "ready") return e;
|
|
2041
2167
|
let { ctx: n } = t;
|
|
2042
2168
|
n.fillStyle = "#000000", n.fillStyle = e;
|
|
@@ -2044,26 +2170,26 @@ function cr(e) {
|
|
|
2044
2170
|
return n.fillStyle = "#ffffff", n.fillStyle = e, typeof r == "string" && n.fillStyle === r ? r : void 0;
|
|
2045
2171
|
}
|
|
2046
2172
|
// src/browser/theme/tokens.ts
|
|
2047
|
-
var
|
|
2173
|
+
var mr = "#ffffff", Y = "#212121", hr = "#d32f2f", gr = "#1976d2", _r = "#388e3c", vr = "#ff9800", yr = "#f5f5f5", br = "#eeeeee", xr = "#bdbdbd", X = "#9e9e9e", Sr = {
|
|
2048
2174
|
fieldGrass: {
|
|
2049
2175
|
property: "--playmaker-field-grass",
|
|
2050
|
-
fallback:
|
|
2176
|
+
fallback: mr
|
|
2051
2177
|
},
|
|
2052
2178
|
fieldOob: {
|
|
2053
2179
|
property: "--playmaker-field-oob",
|
|
2054
|
-
fallback:
|
|
2180
|
+
fallback: br
|
|
2055
2181
|
},
|
|
2056
2182
|
fieldEndzone: {
|
|
2057
2183
|
property: "--playmaker-field-endzone",
|
|
2058
|
-
fallback:
|
|
2184
|
+
fallback: yr
|
|
2059
2185
|
},
|
|
2060
2186
|
fieldLine: {
|
|
2061
2187
|
property: "--playmaker-field-line",
|
|
2062
|
-
fallback:
|
|
2188
|
+
fallback: X
|
|
2063
2189
|
},
|
|
2064
2190
|
fieldNumber: {
|
|
2065
2191
|
property: "--playmaker-field-number",
|
|
2066
|
-
fallback:
|
|
2192
|
+
fallback: xr
|
|
2067
2193
|
},
|
|
2068
2194
|
fieldGoalLine: {
|
|
2069
2195
|
property: "--playmaker-field-goal-line",
|
|
@@ -2071,11 +2197,11 @@ var lr = "#ffffff", X = "#212121", ur = "#d32f2f", dr = "#1976d2", fr = "#388e3c
|
|
|
2071
2197
|
},
|
|
2072
2198
|
fieldPylon: {
|
|
2073
2199
|
property: "--playmaker-field-pylon",
|
|
2074
|
-
fallback:
|
|
2200
|
+
fallback: X
|
|
2075
2201
|
},
|
|
2076
2202
|
fieldGoalpost: {
|
|
2077
2203
|
property: "--playmaker-field-goalpost",
|
|
2078
|
-
fallback:
|
|
2204
|
+
fallback: X
|
|
2079
2205
|
},
|
|
2080
2206
|
fieldGrid: {
|
|
2081
2207
|
property: "--playmaker-field-grid",
|
|
@@ -2083,64 +2209,64 @@ var lr = "#ffffff", X = "#212121", ur = "#d32f2f", dr = "#1976d2", fr = "#388e3c
|
|
|
2083
2209
|
},
|
|
2084
2210
|
playerColor: {
|
|
2085
2211
|
property: "--playmaker-player-color",
|
|
2086
|
-
fallback:
|
|
2212
|
+
fallback: Y
|
|
2087
2213
|
},
|
|
2088
2214
|
playerLabel: {
|
|
2089
2215
|
property: "--playmaker-player-label",
|
|
2090
|
-
fallback:
|
|
2216
|
+
fallback: mr
|
|
2091
2217
|
},
|
|
2092
2218
|
lineRoute: {
|
|
2093
2219
|
property: "--playmaker-line-route",
|
|
2094
|
-
fallback:
|
|
2220
|
+
fallback: Y
|
|
2095
2221
|
},
|
|
2096
2222
|
lineBlock: {
|
|
2097
2223
|
property: "--playmaker-line-block",
|
|
2098
|
-
fallback:
|
|
2224
|
+
fallback: Y
|
|
2099
2225
|
},
|
|
2100
2226
|
lineMotion: {
|
|
2101
2227
|
property: "--playmaker-line-motion",
|
|
2102
|
-
fallback:
|
|
2228
|
+
fallback: Y
|
|
2103
2229
|
},
|
|
2104
2230
|
swatch1: {
|
|
2105
2231
|
property: "--playmaker-swatch-1",
|
|
2106
|
-
fallback:
|
|
2232
|
+
fallback: Y
|
|
2107
2233
|
},
|
|
2108
2234
|
swatch2: {
|
|
2109
2235
|
property: "--playmaker-swatch-2",
|
|
2110
|
-
fallback:
|
|
2236
|
+
fallback: hr
|
|
2111
2237
|
},
|
|
2112
2238
|
swatch3: {
|
|
2113
2239
|
property: "--playmaker-swatch-3",
|
|
2114
|
-
fallback:
|
|
2240
|
+
fallback: gr
|
|
2115
2241
|
},
|
|
2116
2242
|
swatch4: {
|
|
2117
2243
|
property: "--playmaker-swatch-4",
|
|
2118
|
-
fallback:
|
|
2244
|
+
fallback: _r
|
|
2119
2245
|
},
|
|
2120
2246
|
selection: {
|
|
2121
2247
|
property: "--playmaker-selection",
|
|
2122
|
-
fallback:
|
|
2248
|
+
fallback: vr
|
|
2123
2249
|
},
|
|
2124
2250
|
selectionOutline: {
|
|
2125
2251
|
property: "--playmaker-selection-outline",
|
|
2126
|
-
fallback:
|
|
2252
|
+
fallback: mr
|
|
2127
2253
|
}
|
|
2128
2254
|
};
|
|
2129
|
-
function
|
|
2255
|
+
function Cr(e) {
|
|
2130
2256
|
return (t) => {
|
|
2131
|
-
let { property: n, fallback: r } =
|
|
2257
|
+
let { property: n, fallback: r } = Sr[t], i = e(n).trim();
|
|
2132
2258
|
return i === "" ? r : i;
|
|
2133
2259
|
};
|
|
2134
2260
|
}
|
|
2135
2261
|
// src/browser/theme/theme-reader.ts
|
|
2136
2262
|
function Z(e) {
|
|
2137
2263
|
let t = getComputedStyle(e), n = /* @__PURE__ */ new Map();
|
|
2138
|
-
for (let { property: e } of Object.values(
|
|
2139
|
-
return
|
|
2264
|
+
for (let { property: e } of Object.values(Sr)) n.set(e, J(t.getPropertyValue(e).trim()) ?? "");
|
|
2265
|
+
return Cr((e) => n.get(e) ?? "");
|
|
2140
2266
|
}
|
|
2141
2267
|
// src/browser/rendering/field-renderer.ts
|
|
2142
|
-
var
|
|
2143
|
-
function
|
|
2268
|
+
var wr = .8, Tr = .3, Er = 2.5, Dr = 6, Or = .18;
|
|
2269
|
+
function kr(e) {
|
|
2144
2270
|
return {
|
|
2145
2271
|
fieldColor: e("fieldGrass"),
|
|
2146
2272
|
oobColor: e("fieldOob"),
|
|
@@ -2152,9 +2278,9 @@ function Tr(e) {
|
|
|
2152
2278
|
goalpostColor: e("fieldGoalpost")
|
|
2153
2279
|
};
|
|
2154
2280
|
}
|
|
2155
|
-
var
|
|
2281
|
+
var Ar = class {
|
|
2156
2282
|
draw(e, t) {
|
|
2157
|
-
let { geometry: n, metrics: r } = t, i =
|
|
2283
|
+
let { geometry: n, metrics: r } = t, i = kr(t.theme), { viewportWidth: a, viewportHeight: o, yardWindow: s } = n, c = {
|
|
2158
2284
|
left: n.xForLateralYard(0),
|
|
2159
2285
|
right: n.xForLateralYard(53),
|
|
2160
2286
|
top: n.yForAbsoluteYard(s.endYard),
|
|
@@ -2174,9 +2300,9 @@ var Er = class {
|
|
|
2174
2300
|
}
|
|
2175
2301
|
}
|
|
2176
2302
|
drawHashes(e, t, { left: n, right: r }, i, a) {
|
|
2177
|
-
let o =
|
|
2303
|
+
let o = Ft[It], s = 53 / 2, c = t.xForLateralYard(s - o), l = t.xForLateralYard(s + o), u = i.hashTickLength, d = u / 2;
|
|
2178
2304
|
e.strokeStyle = a.lineColor, e.lineWidth = i.yardLineWidth, e.beginPath();
|
|
2179
|
-
for (let i of
|
|
2305
|
+
for (let i of C(t.zone, 1)) {
|
|
2180
2306
|
if (i < 0 || i > 100 || i % 5 == 0) continue;
|
|
2181
2307
|
let a = t.yForAbsoluteYard(i);
|
|
2182
2308
|
e.moveTo(n, a), e.lineTo(n + u, a), e.moveTo(r - u, a), e.lineTo(r, a), e.moveTo(c - d, a), e.lineTo(c + d, a), e.moveTo(l - d, a), e.lineTo(l + d, a);
|
|
@@ -2185,7 +2311,7 @@ var Er = class {
|
|
|
2185
2311
|
}
|
|
2186
2312
|
drawYardLines(e, t, { left: n, right: r, top: i, bottom: a }, o, s) {
|
|
2187
2313
|
let c = new Path2D(), l = new Path2D(), u = new Path2D();
|
|
2188
|
-
for (let e of
|
|
2314
|
+
for (let e of C(t.zone, 5)) {
|
|
2189
2315
|
if (e < 0 || e > 100) continue;
|
|
2190
2316
|
let i = t.yForAbsoluteYard(e), a = e === 0 || e === 100 ? c : e === 50 ? l : u;
|
|
2191
2317
|
a.moveTo(n, i), a.lineTo(r, i);
|
|
@@ -2193,20 +2319,20 @@ var Er = class {
|
|
|
2193
2319
|
e.strokeStyle = s.lineColor, e.lineWidth = o.yardLineWidth, e.stroke(u), e.lineWidth = o.midfieldLineWidth, e.stroke(l), e.lineWidth = o.goalLineWidth, e.beginPath(), e.moveTo(n, i), e.lineTo(n, a), e.moveTo(r, i), e.lineTo(r, a), e.moveTo(n, i), e.lineTo(r, i), e.moveTo(n, a), e.lineTo(r, a), e.stroke(), e.strokeStyle = s.goalLineColor, e.lineWidth = o.goalLineWidth, e.stroke(c);
|
|
2194
2320
|
}
|
|
2195
2321
|
drawNumbers(e, t, n, r) {
|
|
2196
|
-
let i = t.xForLateralYard(
|
|
2197
|
-
e.font =
|
|
2198
|
-
let c = n.numberHeight *
|
|
2322
|
+
let i = t.xForLateralYard(Dr), a = t.xForLateralYard(53 - Dr), o = Tr * t.scale, s = wr / 2;
|
|
2323
|
+
e.font = cr(n.numberHeight), e.textBaseline = "middle", e.textAlign = "center";
|
|
2324
|
+
let c = n.numberHeight * Or, l = (t, n, r, i) => {
|
|
2199
2325
|
let [a, o] = [...t];
|
|
2200
2326
|
e.save(), e.translate(n, r), e.rotate(i), t.length === 2 && a !== void 0 && o !== void 0 ? (e.fillText(a, -c / 2 - e.measureText(a).width / 2, 0), e.fillText(o, c / 2 + e.measureText(o).width / 2, 0)) : e.fillText(t, 0, 0), e.restore();
|
|
2201
2327
|
}, u = (t, n, r) => {
|
|
2202
2328
|
e.beginPath(), e.moveTo(t, n), e.lineTo(t - o, r), e.lineTo(t + o, r), e.closePath(), e.fill();
|
|
2203
2329
|
};
|
|
2204
|
-
for (let n of
|
|
2205
|
-
let o =
|
|
2330
|
+
for (let n of C(t.zone, 10)) {
|
|
2331
|
+
let o = Bt(n);
|
|
2206
2332
|
if (o === null) continue;
|
|
2207
2333
|
let c = t.yForAbsoluteYard(n);
|
|
2208
2334
|
if (e.fillStyle = r.numberColor, l(String(o), i, c, Math.PI / 2), l(String(o), a, c, -Math.PI / 2), n === 50) continue;
|
|
2209
|
-
let d = n < 50 ? -1 : 1, f = n + d *
|
|
2335
|
+
let d = n < 50 ? -1 : 1, f = n + d * Er, p = t.yForAbsoluteYard(f + d * s), m = t.yForAbsoluteYard(f - d * s);
|
|
2210
2336
|
e.fillStyle = r.lineColor, u(i, p, m), u(a, p, m);
|
|
2211
2337
|
}
|
|
2212
2338
|
}
|
|
@@ -2227,7 +2353,7 @@ var Er = class {
|
|
|
2227
2353
|
let o = t.xForLateralYard(53 / 2), s = i.goalpostCrossbarHalfLength, c = i.goalpostUprightLength, l = r === "toward-top" ? -1 : 1;
|
|
2228
2354
|
e.save(), e.strokeStyle = a.goalpostColor, e.lineWidth = i.goalpostStroke, e.lineCap = "round", e.beginPath(), e.moveTo(o - s, n), e.lineTo(o + s, n), e.moveTo(o - s, n), e.lineTo(o - s, n + l * c), e.moveTo(o + s, n), e.lineTo(o + s, n + l * c), e.stroke(), e.restore();
|
|
2229
2355
|
}
|
|
2230
|
-
},
|
|
2356
|
+
}, jr = class {
|
|
2231
2357
|
cached;
|
|
2232
2358
|
draw(e, t) {
|
|
2233
2359
|
let { geometry: n, metrics: r } = t, i = [
|
|
@@ -2239,38 +2365,38 @@ var Er = class {
|
|
|
2239
2365
|
].join(":");
|
|
2240
2366
|
this.cached?.key !== i && (this.cached = {
|
|
2241
2367
|
key: i,
|
|
2242
|
-
dots:
|
|
2368
|
+
dots: Mr(n, r.gridDotRadius)
|
|
2243
2369
|
}), e.fillStyle = t.theme("fieldGrid"), e.fill(this.cached.dots);
|
|
2244
2370
|
}
|
|
2245
2371
|
};
|
|
2246
|
-
function
|
|
2247
|
-
let n = new Path2D(),
|
|
2248
|
-
for (let a of
|
|
2372
|
+
function Mr(e, t) {
|
|
2373
|
+
let n = new Path2D(), r = 2 * t;
|
|
2374
|
+
for (let a of C(e.zone, i)) {
|
|
2249
2375
|
let { startYard: o, endYard: s } = e.yardWindow;
|
|
2250
2376
|
if (a >= 0 && a <= 100 && a % 5 == 0 || a === o || a === s) continue;
|
|
2251
2377
|
let c = e.yForAbsoluteYard(a);
|
|
2252
|
-
for (let a =
|
|
2378
|
+
for (let a = i; a < 53; a += i) n.rect(e.xForLateralYard(a) - t, c - t, r, r);
|
|
2253
2379
|
}
|
|
2254
2380
|
return n;
|
|
2255
2381
|
}
|
|
2256
2382
|
// src/browser/rendering/line-renderer.ts
|
|
2257
|
-
var
|
|
2383
|
+
var Nr = {
|
|
2258
2384
|
route: "lineRoute",
|
|
2259
2385
|
block: "lineBlock",
|
|
2260
2386
|
motion: "lineMotion"
|
|
2261
|
-
},
|
|
2387
|
+
}, Pr = class {
|
|
2262
2388
|
draw(e, t) {
|
|
2263
2389
|
let { geometry: n, metrics: r } = t, { lines: i, players: a } = t.scene;
|
|
2264
2390
|
if (n.scale <= 0 || i.length === 0) return;
|
|
2265
|
-
let o =
|
|
2391
|
+
let o = Qe(a);
|
|
2266
2392
|
for (let a of i) {
|
|
2267
|
-
let i =
|
|
2393
|
+
let i = Ze(a, o);
|
|
2268
2394
|
if (i === void 0) continue;
|
|
2269
|
-
let s =
|
|
2395
|
+
let s = qt(i, a.interpolation).map((e) => n.toCanvas(e));
|
|
2270
2396
|
if (s.length < 2) continue;
|
|
2271
|
-
let c = a.color ?? t.theme(
|
|
2397
|
+
let c = a.color ?? t.theme(Nr[a.kind]), l = this.widthFor(a.kind, r) * (a.thickness ?? 1), u = a.kind === "block";
|
|
2272
2398
|
e.save(), e.strokeStyle = c, e.lineWidth = l, e.lineJoin = "round", e.lineCap = "round", a.kind === "motion" && e.setLineDash([...r.motionDash]);
|
|
2273
|
-
let d = u ? s :
|
|
2399
|
+
let d = u ? s : Gn(s, r.arrowLength);
|
|
2274
2400
|
e.beginPath();
|
|
2275
2401
|
for (let t of d) e.lineTo(t.x, t.y);
|
|
2276
2402
|
e.stroke(), e.setLineDash([]), u ? this.drawBlockCap(e, s, c, r, l) : this.drawArrowHead(e, s, c, r), e.restore();
|
|
@@ -2280,39 +2406,39 @@ var kr = {
|
|
|
2280
2406
|
return e === "block" ? t.blockWidth : t.routeWidth;
|
|
2281
2407
|
}
|
|
2282
2408
|
drawArrowHead(e, t, n, r) {
|
|
2283
|
-
let i =
|
|
2409
|
+
let i = Kn(t, r.arrowLength, r.arrowHalfWidth);
|
|
2284
2410
|
if (i === void 0) return;
|
|
2285
2411
|
let [a, o, s] = i;
|
|
2286
2412
|
e.beginPath(), e.moveTo(a.x, a.y), e.lineTo(o.x, o.y), e.lineTo(s.x, s.y), e.closePath(), e.fillStyle = n, e.fill();
|
|
2287
2413
|
}
|
|
2288
2414
|
drawBlockCap(e, t, n, r, i) {
|
|
2289
|
-
let a =
|
|
2415
|
+
let a = qn(t, r.blockCapLength);
|
|
2290
2416
|
if (a === void 0) return;
|
|
2291
2417
|
let [o, s] = a;
|
|
2292
2418
|
e.beginPath(), e.strokeStyle = n, e.lineWidth = i * 1.2, e.lineCap = "round", e.moveTo(o.x, o.y), e.lineTo(s.x, s.y), e.stroke();
|
|
2293
2419
|
}
|
|
2294
|
-
},
|
|
2420
|
+
}, Fr = class {
|
|
2295
2421
|
draw(e, t) {
|
|
2296
2422
|
let { overlay: n } = t;
|
|
2297
2423
|
switch (n.kind) {
|
|
2298
2424
|
case "none": return;
|
|
2299
2425
|
case "player":
|
|
2300
|
-
|
|
2426
|
+
Ir(e, t, n.playerId);
|
|
2301
2427
|
return;
|
|
2302
2428
|
case "line":
|
|
2303
|
-
|
|
2429
|
+
Lr(e, t, n);
|
|
2304
2430
|
return;
|
|
2305
2431
|
}
|
|
2306
2432
|
}
|
|
2307
2433
|
};
|
|
2308
|
-
function
|
|
2434
|
+
function Ir(e, t, n) {
|
|
2309
2435
|
let r = t.scene.players.find((e) => e.id === n);
|
|
2310
2436
|
if (r === void 0) return;
|
|
2311
|
-
let { x: i, y: a } = t.geometry.toCanvas(r.position), o =
|
|
2437
|
+
let { x: i, y: a } = t.geometry.toCanvas(r.position), o = h * t.geometry.scale + 4;
|
|
2312
2438
|
e.beginPath(), e.arc(i, a, o, 0, Math.PI * 2), e.strokeStyle = t.theme("selection"), e.lineWidth = 2, e.stroke();
|
|
2313
2439
|
}
|
|
2314
|
-
function
|
|
2315
|
-
let { geometry: r } = t, i = t.theme("selection"), a = t.theme("selectionOutline"), o = Math.max(3, .45 *
|
|
2440
|
+
function Lr(e, t, n) {
|
|
2441
|
+
let { geometry: r } = t, i = t.theme("selection"), a = t.theme("selectionOutline"), o = Math.max(3, .45 * $t * r.scale), s = () => {
|
|
2316
2442
|
e.fillStyle = i, e.fill(), e.lineWidth = 1.5, e.strokeStyle = a, e.stroke();
|
|
2317
2443
|
};
|
|
2318
2444
|
for (let t of n.waypointHandles) {
|
|
@@ -2323,22 +2449,22 @@ function Nr(e, t, n) {
|
|
|
2323
2449
|
e.beginPath(), e.arc(c, l, o + 1, 0, Math.PI * 2), s();
|
|
2324
2450
|
}
|
|
2325
2451
|
// src/browser/rendering/player-renderer.ts
|
|
2326
|
-
var
|
|
2452
|
+
var Rr = class {
|
|
2327
2453
|
draw(e, t) {
|
|
2328
|
-
let { geometry: n, metrics: r } = t, { players: i } = t.scene, a = t.theme("playerColor"), o = t.theme("fieldGrass"), s = t.theme("playerLabel"), c =
|
|
2454
|
+
let { geometry: n, metrics: r } = t, { players: i } = t.scene, a = t.theme("playerColor"), o = t.theme("fieldGrass"), s = t.theme("playerLabel"), c = h * n.scale;
|
|
2329
2455
|
if (c <= 0) return;
|
|
2330
2456
|
let l = r.markerLabelFont;
|
|
2331
2457
|
for (let t of i) {
|
|
2332
2458
|
let i = n.toCanvas(t.position), u = t.color ?? a, d = (t.fill ?? "outline") === "solid";
|
|
2333
2459
|
e.beginPath();
|
|
2334
|
-
let f =
|
|
2460
|
+
let f = Yn(t.shape, c);
|
|
2335
2461
|
if (f.kind === "circle") e.arc(i.x, i.y, f.radius, 0, Math.PI * 2);
|
|
2336
2462
|
else {
|
|
2337
2463
|
let { halfSide: t } = f;
|
|
2338
2464
|
e.rect(i.x - t, i.y - t, t * 2, t * 2);
|
|
2339
2465
|
}
|
|
2340
2466
|
if (e.fillStyle = d ? u : o, e.fill(), e.lineWidth = r.markerStroke, e.strokeStyle = u, e.stroke(), t.label !== "") {
|
|
2341
|
-
e.fillStyle = d ? s : u, e.font =
|
|
2467
|
+
e.fillStyle = d ? s : u, e.font = cr(l), e.textAlign = "center", e.textBaseline = "alphabetic";
|
|
2342
2468
|
let n = e.measureText(t.label), r = i.y + (n.actualBoundingBoxAscent - n.actualBoundingBoxDescent) / 2;
|
|
2343
2469
|
e.fillText(t.label, i.x, r);
|
|
2344
2470
|
}
|
|
@@ -2346,19 +2472,19 @@ var Pr = class {
|
|
|
2346
2472
|
}
|
|
2347
2473
|
};
|
|
2348
2474
|
// src/browser/rendering/layer.ts
|
|
2349
|
-
function
|
|
2475
|
+
function zr() {
|
|
2350
2476
|
return {
|
|
2351
|
-
field: [new
|
|
2352
|
-
backdrop: [new
|
|
2353
|
-
play: [new
|
|
2354
|
-
editor: [new
|
|
2477
|
+
field: [new Ar()],
|
|
2478
|
+
backdrop: [new jr()],
|
|
2479
|
+
play: [new Pr(), new Rr()],
|
|
2480
|
+
editor: [new Fr()]
|
|
2355
2481
|
};
|
|
2356
2482
|
}
|
|
2357
2483
|
function Q(e, t, n) {
|
|
2358
2484
|
for (let r of n) e.save(), r.draw(e, t), e.restore();
|
|
2359
2485
|
}
|
|
2360
2486
|
// src/browser/rendering/canvas-surface.ts
|
|
2361
|
-
var
|
|
2487
|
+
var Br = class extends r {
|
|
2362
2488
|
canvas;
|
|
2363
2489
|
ctx;
|
|
2364
2490
|
layers;
|
|
@@ -2367,13 +2493,13 @@ var Ir = class extends n {
|
|
|
2367
2493
|
frameRequest;
|
|
2368
2494
|
dpr = 0;
|
|
2369
2495
|
lifetime = new AbortController();
|
|
2370
|
-
constructor(
|
|
2371
|
-
super(), this.scene = n, this.overlay = r, this.layers = i, this.canvas = document.createElement("canvas"), this.canvas.className = "playmaker-canvas",
|
|
2496
|
+
constructor(e, n, r, i = zr()) {
|
|
2497
|
+
super(), this.scene = n, this.overlay = r, this.layers = i, this.canvas = document.createElement("canvas"), this.canvas.className = "playmaker-canvas", e.appendChild(this.canvas), this._register(t(() => this.canvas.remove()));
|
|
2372
2498
|
let a = this.canvas.getContext("2d");
|
|
2373
|
-
if (!a) throw Error("Playmaker: 2D canvas context
|
|
2499
|
+
if (!a) throw Error("Playmaker: could not get a 2D canvas context.");
|
|
2374
2500
|
this.ctx = a;
|
|
2375
2501
|
let o = new ResizeObserver(() => this.resize());
|
|
2376
|
-
o.observe(
|
|
2502
|
+
o.observe(e), this._register(t(() => {
|
|
2377
2503
|
o.disconnect(), this.lifetime.abort(), this.cancelFrame();
|
|
2378
2504
|
})), this.watchDevicePixelRatio(), this.redrawWhenFontLoads();
|
|
2379
2505
|
}
|
|
@@ -2391,21 +2517,21 @@ var Ir = class extends n {
|
|
|
2391
2517
|
});
|
|
2392
2518
|
}
|
|
2393
2519
|
async exportToPngBlob(e, t) {
|
|
2394
|
-
let { width: n, height: r } =
|
|
2395
|
-
await
|
|
2520
|
+
let { width: n, height: r } = On(e.field.zone, t), i = Z(this.host);
|
|
2521
|
+
await ur();
|
|
2396
2522
|
let a = document.createElement("canvas");
|
|
2397
2523
|
a.width = n, a.height = r;
|
|
2398
2524
|
let o = a.getContext("2d");
|
|
2399
|
-
if (!o) throw Error("Playmaker:
|
|
2400
|
-
let s = new
|
|
2525
|
+
if (!o) throw Error("Playmaker: could not get a 2D canvas context for the export.");
|
|
2526
|
+
let s = new Vt(n, r, e.field);
|
|
2401
2527
|
return this.paint(o, this.frameFor(s, e, i), void 0), new Promise((e, t) => {
|
|
2402
2528
|
a.toBlob((n) => {
|
|
2403
|
-
n ? e(n) : t(/* @__PURE__ */ Error("Playmaker: PNG
|
|
2529
|
+
n ? e(n) : t(/* @__PURE__ */ Error("Playmaker: could not convert the canvas to a PNG."));
|
|
2404
2530
|
}, "image/png");
|
|
2405
2531
|
});
|
|
2406
2532
|
}
|
|
2407
2533
|
redrawWhenFontLoads() {
|
|
2408
|
-
|
|
2534
|
+
ur().then(() => {
|
|
2409
2535
|
this.isDisposed || this.invalidate();
|
|
2410
2536
|
});
|
|
2411
2537
|
}
|
|
@@ -2443,74 +2569,51 @@ var Ir = class extends n {
|
|
|
2443
2569
|
frameFor(e, t, n) {
|
|
2444
2570
|
return {
|
|
2445
2571
|
geometry: e,
|
|
2446
|
-
metrics:
|
|
2572
|
+
metrics: ke(e.fieldPixelWidth, e.scale),
|
|
2447
2573
|
scene: t,
|
|
2448
2574
|
theme: n
|
|
2449
2575
|
};
|
|
2450
2576
|
}
|
|
2451
2577
|
measure() {
|
|
2452
2578
|
let { clientWidth: e, clientHeight: t } = this.host;
|
|
2453
|
-
return new
|
|
2579
|
+
return new Vt(e, t, this.scene.field);
|
|
2454
2580
|
}
|
|
2455
2581
|
get host() {
|
|
2456
2582
|
return this.canvas.parentElement ?? this.canvas;
|
|
2457
2583
|
}
|
|
2458
2584
|
};
|
|
2459
2585
|
// src/browser/ui/focus.ts
|
|
2460
|
-
function
|
|
2586
|
+
function Vr(e, t, n) {
|
|
2461
2587
|
let r = e.ownerDocument, i = e.contains(r.activeElement);
|
|
2462
2588
|
n(), i && !e.contains(r.activeElement) && t.focus({ preventScroll: !0 });
|
|
2463
2589
|
}
|
|
2464
2590
|
// src/browser/theme/palette.ts
|
|
2465
|
-
var
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
token: "swatch2"
|
|
2473
|
-
},
|
|
2474
|
-
{
|
|
2475
|
-
label: "青",
|
|
2476
|
-
token: "swatch3"
|
|
2477
|
-
},
|
|
2478
|
-
{
|
|
2479
|
-
label: "緑",
|
|
2480
|
-
token: "swatch4"
|
|
2481
|
-
}
|
|
2482
|
-
], zr = {
|
|
2483
|
-
circle: "丸",
|
|
2484
|
-
square: "四角"
|
|
2485
|
-
}, Br = {
|
|
2486
|
-
outline: "枠線",
|
|
2487
|
-
solid: "塗りつぶし"
|
|
2488
|
-
}, Vr = {
|
|
2489
|
-
route: "ルート",
|
|
2490
|
-
block: "ブロック",
|
|
2491
|
-
motion: "モーション"
|
|
2492
|
-
}, Hr = {
|
|
2493
|
-
straight: "直線",
|
|
2494
|
-
bezier: "曲線"
|
|
2495
|
-
};
|
|
2591
|
+
var Hr = [
|
|
2592
|
+
"swatch1",
|
|
2593
|
+
"swatch2",
|
|
2594
|
+
"swatch3",
|
|
2595
|
+
"swatch4"
|
|
2596
|
+
];
|
|
2597
|
+
// src/browser/ui/property-panel.ts
|
|
2496
2598
|
function Ur({ name: e, color: t, fill: n }) {
|
|
2497
2599
|
let r = document.createElement("button");
|
|
2498
2600
|
return r.type = "button", r.className = "playmaker-panel__swatch", r.title = e, r.setAttribute("aria-label", e), n === "outline" ? (r.classList.add("playmaker-panel__swatch--outline"), r.style.borderColor = t) : r.style.backgroundColor = t, r;
|
|
2499
2601
|
}
|
|
2500
|
-
var Wr = class extends
|
|
2602
|
+
var Wr = class extends r {
|
|
2501
2603
|
element;
|
|
2502
2604
|
controller;
|
|
2503
2605
|
focusFallback;
|
|
2606
|
+
messages;
|
|
2504
2607
|
shown;
|
|
2505
|
-
constructor(
|
|
2506
|
-
super(), this.controller = n, this.focusFallback = r, this.element = document.createElement("div"), this.element.className = "playmaker-panel",
|
|
2608
|
+
constructor(e, n, r, i) {
|
|
2609
|
+
super(), this.controller = n, this.focusFallback = r, this.messages = i, this.element = document.createElement("div"), this.element.className = "playmaker-panel", e.appendChild(this.element), this._register(t(() => this.element.remove())), this._register(n.onDidChangeViewState(() => this.sync())), this.sync();
|
|
2507
2610
|
}
|
|
2508
2611
|
refresh() {
|
|
2509
2612
|
this.shown = void 0, this.sync();
|
|
2510
2613
|
}
|
|
2511
2614
|
sync() {
|
|
2512
2615
|
let e = this.selectedItem(), t = this.shown;
|
|
2513
|
-
e.kind === "player" && t?.kind === "player" && t.id === e.player.id ? t.update(e.player) : e.kind === "line" && t?.kind === "line" && t.id === e.line.id ? t.update(e.line) : (e.kind !== "none" || t?.kind !== "hint") &&
|
|
2616
|
+
e.kind === "player" && t?.kind === "player" && t.id === e.player.id ? t.update(e.player) : e.kind === "line" && t?.kind === "line" && t.id === e.line.id ? t.update(e.line) : (e.kind !== "none" || t?.kind !== "hint") && Vr(this.element, this.focusFallback, () => {
|
|
2514
2617
|
this.shown = this.rebuild(e);
|
|
2515
2618
|
});
|
|
2516
2619
|
}
|
|
@@ -2546,21 +2649,21 @@ var Wr = class extends n {
|
|
|
2546
2649
|
}
|
|
2547
2650
|
case "none": {
|
|
2548
2651
|
let e = document.createElement("p");
|
|
2549
|
-
return e.className = "playmaker-panel__hint", e.textContent =
|
|
2652
|
+
return e.className = "playmaker-panel__hint", e.textContent = this.messages.selectionHint, this.element.appendChild(e), { kind: "hint" };
|
|
2550
2653
|
}
|
|
2551
2654
|
}
|
|
2552
2655
|
}
|
|
2553
2656
|
addPlayerFields() {
|
|
2554
|
-
let e = this
|
|
2555
|
-
this.addTitle(
|
|
2556
|
-
let
|
|
2557
|
-
label:
|
|
2657
|
+
let { controller: e, messages: t } = this;
|
|
2658
|
+
this.addTitle(t.player);
|
|
2659
|
+
let n = this.addText({
|
|
2660
|
+
label: t.label,
|
|
2558
2661
|
onChange: (t) => e.updateSelectedPlayer({ label: t })
|
|
2559
|
-
}),
|
|
2560
|
-
name:
|
|
2561
|
-
color:
|
|
2662
|
+
}), r = this.addSelect(t.shape, f, t.shapes, (t) => e.updateSelectedPlayer({ shape: t })), i = Z(this.element), a = m.flatMap((e) => Hr.map((n) => ({
|
|
2663
|
+
name: t.swatch(t.colors[n], t.fills[e]),
|
|
2664
|
+
color: i(n),
|
|
2562
2665
|
fill: e
|
|
2563
|
-
}))),
|
|
2666
|
+
}))), o = this.addSwatches(t.color, a, {
|
|
2564
2667
|
onChange: ({ color: t, fill: n }) => e.updateSelectedPlayer({
|
|
2565
2668
|
color: t,
|
|
2566
2669
|
fill: n
|
|
@@ -2569,32 +2672,32 @@ var Wr = class extends n {
|
|
|
2569
2672
|
color: null,
|
|
2570
2673
|
fill: null
|
|
2571
2674
|
})
|
|
2572
|
-
}),
|
|
2675
|
+
}), s = i("playerColor");
|
|
2573
2676
|
return (e) => {
|
|
2574
|
-
|
|
2575
|
-
let
|
|
2576
|
-
|
|
2677
|
+
n(e.label), r(e.shape);
|
|
2678
|
+
let t = e.color === void 0 ? s : J(e.color), i = e.fill ?? "outline";
|
|
2679
|
+
o((e) => e.color === t && e.fill === i);
|
|
2577
2680
|
};
|
|
2578
2681
|
}
|
|
2579
2682
|
addLineFields() {
|
|
2580
|
-
let e = this
|
|
2581
|
-
this.addTitle(
|
|
2582
|
-
let
|
|
2583
|
-
name: e
|
|
2584
|
-
color:
|
|
2683
|
+
let { controller: e, messages: t } = this;
|
|
2684
|
+
this.addTitle(t.line);
|
|
2685
|
+
let n = this.addSelect(t.kind, Ve, t.kinds, (t) => e.updateSelectedLine({ kind: t })), r = this.addSelect(t.interpolation, He, t.interpolations, (t) => e.updateSelectedLine({ interpolation: t })), i = Z(this.element), a = Hr.map((e) => ({
|
|
2686
|
+
name: t.colors[e],
|
|
2687
|
+
color: i(e),
|
|
2585
2688
|
fill: "solid"
|
|
2586
|
-
})),
|
|
2689
|
+
})), o = this.addSwatches(t.color, a, {
|
|
2587
2690
|
onChange: ({ color: t }) => e.updateSelectedLine({ color: t }),
|
|
2588
2691
|
onReset: () => e.updateSelectedLine({ color: null })
|
|
2589
|
-
}),
|
|
2590
|
-
label:
|
|
2692
|
+
}), s = this.addNumber({
|
|
2693
|
+
label: t.width,
|
|
2591
2694
|
onChange: (t) => e.updateSelectedLine({ thickness: t }),
|
|
2592
2695
|
onReset: () => e.updateSelectedLine({ thickness: null })
|
|
2593
2696
|
});
|
|
2594
2697
|
return (e) => {
|
|
2595
|
-
|
|
2596
|
-
let
|
|
2597
|
-
|
|
2698
|
+
n(e.kind), r(e.interpolation);
|
|
2699
|
+
let t = e.color === void 0 ? void 0 : J(e.color);
|
|
2700
|
+
o((e) => e.color === t), s(e.thickness ?? 1);
|
|
2598
2701
|
};
|
|
2599
2702
|
}
|
|
2600
2703
|
addTitle(e) {
|
|
@@ -2616,7 +2719,7 @@ var Wr = class extends n {
|
|
|
2616
2719
|
let r = document.createElement("div");
|
|
2617
2720
|
if (r.className = "playmaker-panel__row", r.append(...t), n !== void 0) {
|
|
2618
2721
|
let t = document.createElement("button");
|
|
2619
|
-
t.type = "button", t.className = "playmaker-panel__reset", t.textContent =
|
|
2722
|
+
t.type = "button", t.className = "playmaker-panel__reset", t.textContent = this.messages.reset, t.setAttribute("aria-label", this.messages.resetField(e)), t.addEventListener("click", n), r.appendChild(t);
|
|
2620
2723
|
}
|
|
2621
2724
|
this.element.appendChild(r);
|
|
2622
2725
|
}
|
|
@@ -2630,7 +2733,7 @@ var Wr = class extends n {
|
|
|
2630
2733
|
let r = document.createElement("input");
|
|
2631
2734
|
return r.type = "number", r.min = "0.25", r.step = "0.25", r.addEventListener("change", () => {
|
|
2632
2735
|
let e = Number(r.value);
|
|
2633
|
-
|
|
2736
|
+
qe(e) && t(e);
|
|
2634
2737
|
}), this.addRow(e, r, n), (e) => {
|
|
2635
2738
|
r.value = String(e);
|
|
2636
2739
|
};
|
|
@@ -2656,30 +2759,22 @@ var Wr = class extends n {
|
|
|
2656
2759
|
t.value = e, t.textContent = n[e], i.appendChild(t);
|
|
2657
2760
|
}
|
|
2658
2761
|
return i.addEventListener("change", () => {
|
|
2659
|
-
|
|
2762
|
+
u(i.value, t) && r(i.value);
|
|
2660
2763
|
}), this.addRow(e, i), (e) => {
|
|
2661
2764
|
i.value = e;
|
|
2662
2765
|
};
|
|
2663
2766
|
}
|
|
2664
|
-
}, Gr = {
|
|
2665
|
-
select: "選択",
|
|
2666
|
-
"add-player": "選手を追加",
|
|
2667
|
-
"draw-line": "線を描く"
|
|
2668
|
-
}, Kr = "置くと 64 人を超えるフォーメーションは読み込めません", qr = {
|
|
2669
|
-
"add-player": "選手は 64 人までです",
|
|
2670
|
-
"draw-line": "線は 128 本までです"
|
|
2671
|
-
}, Jr = {
|
|
2672
|
-
offense: "オフェンス",
|
|
2673
|
-
defense: "ディフェンス"
|
|
2674
2767
|
};
|
|
2768
|
+
// src/browser/ui/toolbar.ts
|
|
2675
2769
|
function $(e, t, n) {
|
|
2676
|
-
e.setAttribute("aria-disabled", String(!t)),
|
|
2770
|
+
e.setAttribute("aria-disabled", String(!t)), Gr(e, t ? void 0 : n);
|
|
2677
2771
|
}
|
|
2678
|
-
function
|
|
2772
|
+
function Gr(e, t) {
|
|
2679
2773
|
t === void 0 ? e.removeAttribute("title") : e.title = t;
|
|
2680
2774
|
}
|
|
2681
|
-
var
|
|
2775
|
+
var Kr = class extends r {
|
|
2682
2776
|
element;
|
|
2777
|
+
messages;
|
|
2683
2778
|
toolButtons = /* @__PURE__ */ new Map();
|
|
2684
2779
|
zoneButtons = /* @__PURE__ */ new Map();
|
|
2685
2780
|
undoButton;
|
|
@@ -2688,18 +2783,22 @@ var Xr = class extends n {
|
|
|
2688
2783
|
commitButton;
|
|
2689
2784
|
cancelButton;
|
|
2690
2785
|
formationPicker;
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2786
|
+
toolUnavailableReasons;
|
|
2787
|
+
constructor(e, n, r) {
|
|
2788
|
+
super(), this.messages = r, this.toolUnavailableReasons = {
|
|
2789
|
+
"add-player": r.playerLimit(64),
|
|
2790
|
+
"draw-line": r.lineLimit(128)
|
|
2791
|
+
}, this.element = document.createElement("div"), this.element.className = "playmaker-toolbar";
|
|
2792
|
+
for (let e of Ae) {
|
|
2793
|
+
let t = this.addButton(r.tool[e], () => n.setTool(e));
|
|
2695
2794
|
this.toolButtons.set(e, t);
|
|
2696
2795
|
}
|
|
2697
|
-
this.addSeparator(), this.undoButton = this.addButton(
|
|
2698
|
-
for (let e of
|
|
2699
|
-
let t = this.addButton(
|
|
2796
|
+
this.addSeparator(), this.undoButton = this.addButton(r.undo, () => n.undo()), this.redoButton = this.addButton(r.redo, () => n.redo()), this.deleteButton = this.addButton(r.delete, () => n.deleteSelection()), this.addSeparator();
|
|
2797
|
+
for (let e of $e) {
|
|
2798
|
+
let t = this.addButton(r.zone[e], () => n.setFieldZone(e));
|
|
2700
2799
|
this.zoneButtons.set(e, t);
|
|
2701
2800
|
}
|
|
2702
|
-
this.addSeparator(), this.formationPicker = this.addFormationPicker(n), this.addSeparator(), this.commitButton = this.addButton(
|
|
2801
|
+
this.addSeparator(), this.formationPicker = this.addFormationPicker(n), this.addSeparator(), this.commitButton = this.addButton(r.finishLine, () => n.commitLine()), this.cancelButton = this.addButton(r.cancel, () => n.cancelInteraction()), e.appendChild(this.element), this._register(t(() => this.element.remove())), this._register(n.onDidChangeViewState(() => this.sync(n))), this.sync(n);
|
|
2703
2802
|
}
|
|
2704
2803
|
addButton(e, t) {
|
|
2705
2804
|
let n = document.createElement("button");
|
|
@@ -2713,61 +2812,64 @@ var Xr = class extends n {
|
|
|
2713
2812
|
}
|
|
2714
2813
|
addFormationPicker(e) {
|
|
2715
2814
|
let t = document.createElement("select");
|
|
2716
|
-
t.className = "playmaker-toolbar__select", t.setAttribute("aria-label",
|
|
2815
|
+
t.className = "playmaker-toolbar__select", t.setAttribute("aria-label", this.messages.formation);
|
|
2717
2816
|
let n = document.createElement("option");
|
|
2718
|
-
n.value = "", n.textContent =
|
|
2817
|
+
n.value = "", n.textContent = this.messages.loadFormation, t.appendChild(n);
|
|
2719
2818
|
for (let e of Fe) {
|
|
2720
2819
|
let n = document.createElement("optgroup");
|
|
2721
|
-
n.label =
|
|
2722
|
-
for (let t of
|
|
2820
|
+
n.label = this.messages.side[e];
|
|
2821
|
+
for (let t of Vn.filter((t) => t.side === e)) {
|
|
2723
2822
|
let e = document.createElement("option");
|
|
2724
2823
|
e.value = t.id, e.textContent = t.name, n.appendChild(e);
|
|
2725
2824
|
}
|
|
2726
2825
|
t.appendChild(n);
|
|
2727
2826
|
}
|
|
2728
2827
|
return t.addEventListener("change", () => {
|
|
2729
|
-
let n =
|
|
2828
|
+
let n = Hn(t.value);
|
|
2730
2829
|
n !== void 0 && e.loadFormation(n), t.value = "";
|
|
2731
2830
|
}), this.element.appendChild(t), t;
|
|
2732
2831
|
}
|
|
2733
2832
|
sync(e) {
|
|
2734
2833
|
let t = e.getViewState();
|
|
2735
|
-
for (let [e, n] of this.toolButtons) n.setAttribute("aria-pressed", String(e === t.tool)), $(n,
|
|
2834
|
+
for (let [e, n] of this.toolButtons) n.setAttribute("aria-pressed", String(e === t.tool)), $(n, _(e, t), this.toolUnavailableReasons[e]);
|
|
2736
2835
|
for (let [e, n] of this.zoneButtons) n.setAttribute("aria-pressed", String(e === t.fieldZone));
|
|
2737
2836
|
$(this.undoButton, t.canUndo), $(this.redoButton, t.canRedo), $(this.deleteButton, t.selection.kind !== "none"), $(this.commitButton, t.isDrawing), $(this.cancelButton, t.isDrawing), this.syncFormationPicker(t);
|
|
2738
2837
|
}
|
|
2739
2838
|
syncFormationPicker(e) {
|
|
2740
2839
|
let t = !1;
|
|
2741
2840
|
for (let n of this.formationPicker.options) {
|
|
2742
|
-
let r =
|
|
2841
|
+
let r = Hn(n.value);
|
|
2743
2842
|
n.disabled = r !== void 0 && !Me(r, e), t ||= n.disabled;
|
|
2744
2843
|
}
|
|
2745
|
-
|
|
2844
|
+
Gr(this.formationPicker, t ? this.messages.formationLimit(64) : void 0);
|
|
2746
2845
|
}
|
|
2747
2846
|
};
|
|
2748
2847
|
// src/playmaker.ts
|
|
2749
|
-
function
|
|
2848
|
+
function qr() {
|
|
2750
2849
|
try {
|
|
2751
2850
|
return process.env.NODE_ENV !== "production";
|
|
2752
2851
|
} catch {
|
|
2753
2852
|
return !1;
|
|
2754
2853
|
}
|
|
2755
2854
|
}
|
|
2756
|
-
var
|
|
2855
|
+
var Jr = class {
|
|
2757
2856
|
onDidChange;
|
|
2758
|
-
store = new
|
|
2857
|
+
store = new n();
|
|
2759
2858
|
root;
|
|
2760
2859
|
surface;
|
|
2761
2860
|
session;
|
|
2762
2861
|
currentMode;
|
|
2862
|
+
messages;
|
|
2763
2863
|
panel;
|
|
2764
2864
|
ui;
|
|
2765
|
-
constructor(
|
|
2766
|
-
this.currentMode = n.mode ?? "edit"
|
|
2767
|
-
let r =
|
|
2768
|
-
r.className = "playmaker-
|
|
2769
|
-
let
|
|
2770
|
-
|
|
2865
|
+
constructor(e, n = {}) {
|
|
2866
|
+
this.currentMode = n.mode ?? "edit";
|
|
2867
|
+
let r = n.locale ?? "en";
|
|
2868
|
+
this.messages = nr(r), this.session = this.store.add(new wn(n.initialData)), this.onDidChange = this.session.onDidChange, n.onChange !== void 0 && this.store.add(this.session.onDidChange(n.onChange)), this.root = document.createElement("div"), this.root.className = "playmaker-root", this.root.dataset.mode = this.currentMode, this.root.lang = r, e.appendChild(this.root), this.store.add(t(() => this.root.remove()));
|
|
2869
|
+
let i = document.createElement("div");
|
|
2870
|
+
i.className = "playmaker-stage", this.root.appendChild(i);
|
|
2871
|
+
let { scene: a, overlay: o } = this.session.controller.getFrame();
|
|
2872
|
+
this.surface = this.store.add(new Br(i, a, this.surfaceOverlay(o))), this.ui = this.createUi(), this.store.add(this.session.onDidChangeScene(() => this.draw())), this.store.add(this.session.onDidReset(() => this.replaceUi()));
|
|
2771
2873
|
}
|
|
2772
2874
|
get mode() {
|
|
2773
2875
|
return this.currentMode;
|
|
@@ -2794,7 +2896,7 @@ var Qr = class {
|
|
|
2794
2896
|
return this.session.getPlayData();
|
|
2795
2897
|
}
|
|
2796
2898
|
exportToPng(e) {
|
|
2797
|
-
return this.store.isDisposed ? Promise.reject(/* @__PURE__ */ Error("Playmaker:
|
|
2899
|
+
return this.store.isDisposed ? Promise.reject(/* @__PURE__ */ Error("Playmaker: cannot export a PNG after dispose.")) : this.surface.exportToPngBlob(this.session.getSnapshot(), e);
|
|
2798
2900
|
}
|
|
2799
2901
|
refresh() {
|
|
2800
2902
|
this.store.isDisposed ? this.warnIgnoredAfterDispose("refresh") : (this.surface.refresh(), this.panel?.refresh());
|
|
@@ -2803,16 +2905,16 @@ var Qr = class {
|
|
|
2803
2905
|
this.ui.dispose(), this.store.dispose();
|
|
2804
2906
|
}
|
|
2805
2907
|
warnIgnoredAfterDispose(e) {
|
|
2806
|
-
|
|
2908
|
+
qr() && console.warn(`Playmaker: ${e} was called after dispose, so it did nothing.`);
|
|
2807
2909
|
}
|
|
2808
2910
|
replaceUi() {
|
|
2809
|
-
|
|
2911
|
+
Vr(this.root, this.surface.canvas, () => {
|
|
2810
2912
|
this.ui.dispose(), this.ui = this.createUi();
|
|
2811
2913
|
});
|
|
2812
2914
|
}
|
|
2813
2915
|
createUi() {
|
|
2814
|
-
let e = new
|
|
2815
|
-
return this.panel = void 0, this.currentMode === "edit" && (e.add(new
|
|
2916
|
+
let e = new n(), t = this.session.controller;
|
|
2917
|
+
return this.panel = void 0, this.currentMode === "edit" && (e.add(new Kr(this.root, t, this.messages)), this.panel = e.add(new Wr(this.root, t, this.surface.canvas, this.messages)), e.add(new ir(this.root, this.surface, t))), e;
|
|
2816
2918
|
}
|
|
2817
2919
|
draw() {
|
|
2818
2920
|
let { scene: e, overlay: t } = this.session.controller.getFrame();
|
|
@@ -2822,6 +2924,6 @@ var Qr = class {
|
|
|
2822
2924
|
return this.currentMode === "edit" ? e : void 0;
|
|
2823
2925
|
}
|
|
2824
2926
|
};
|
|
2825
|
-
export {
|
|
2927
|
+
export { rt as CURRENT_PLAY_DATA_VERSION, Pt as FIELD_WIDTH_YARDS, tt as FIELD_ZONE_LABELS, $e as FIELD_ZONE_VALUES, Vn as FORMATION_PRESETS, i as GRID_STEP_YARDS, er as PLAYMAKER_LOCALE_VALUES, Qn as PLAY_PRESETS, Jr as Playmaker, Hn as getFormationPreset, $n as getPlayPreset, ht as migratePlayData };
|
|
2826
2928
|
|
|
2827
2929
|
//# sourceMappingURL=playmaker.js.map
|