@johnmorrisdotca/kyogijo-stadiums 0.45.3 → 0.47.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/CHANGELOG.md +43 -0
- package/NOTICE.md +9 -2
- package/dist/areas.d.ts +4 -0
- package/dist/areas.js +33 -1
- package/dist/cityctx.belmont-park.data.d.ts +3 -0
- package/dist/cityctx.belmont-park.data.js +1802 -0
- package/dist/cityctx.data.d.ts +10 -1
- package/dist/cityctx.data.js +11 -2
- package/dist/cityctx.js +19 -1
- package/dist/cityctx.meadowlands.data.d.ts +3 -0
- package/dist/cityctx.meadowlands.data.js +820 -0
- package/dist/cityctx.montreal-city.data.d.ts +3 -0
- package/dist/cityctx.montreal-city.data.js +2899 -0
- package/dist/cityctx.montreal-downtown.data.d.ts +3 -0
- package/dist/cityctx.montreal-downtown.data.js +3004 -0
- package/dist/cityctx.montreal-olympic.data.d.ts +3 -0
- package/dist/cityctx.montreal-olympic.data.js +2562 -0
- package/dist/cityctx.nyc-bronx.data.d.ts +3 -0
- package/dist/cityctx.nyc-bronx.data.js +1671 -0
- package/dist/cityctx.nyc-brooklyn.data.d.ts +3 -0
- package/dist/cityctx.nyc-brooklyn.data.js +3485 -0
- package/dist/cityctx.nyc-flushing.data.d.ts +3 -0
- package/dist/cityctx.nyc-flushing.data.js +865 -0
- package/dist/cityctx.nyc-midtown.data.d.ts +3 -0
- package/dist/cityctx.nyc-midtown.data.js +2438 -0
- package/dist/crowd.d.ts +26 -3
- package/dist/district.js +1 -1
- package/dist/draw.js +2 -2
- package/dist/flythrough.dom.d.ts +2 -0
- package/dist/flythrough.dom.js +2 -2
- package/dist/stadiums.d.ts +51 -7
- package/dist/stadiums.data.js +60 -0
- package/dist/stadiums.js +40 -6
- package/dist/stadiums.osm.data.js +224 -2
- package/dist/strings.core.d.ts +2 -0
- package/dist/strings.en.js +1 -1
- package/dist/strings.ja.js +1 -1
- package/dist/turn.kit.d.ts +14 -1
- package/dist/turn.kit.js +19 -0
- package/dist/turn.style.js +20 -3
- package/dist/venue.js +3 -1
- package/dist/venue.real.d.ts +45 -1
- package/dist/venue.real.js +245 -21
- package/dist/venue.ribbed.d.ts +18 -0
- package/dist/venue.ribbed.js +199 -0
- package/dist/venues/american-airlines-center.data.js +1 -1
- package/dist/venues.d.ts +2 -2
- package/dist/venues.data.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -64,7 +64,7 @@ export const STADIUM_OSM = {
|
|
|
64
64
|
"attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
|
|
65
65
|
"axis": { "heading": 0, "basis": "pitch", "strength": 1.32, "elongation": 2.16, "centre": [-122.33163, 47.595154] },
|
|
66
66
|
"canopies": [
|
|
67
|
-
{ "source": "way/458208106", "height": 36, "rise": 10, "ring": [
|
|
67
|
+
{ "source": "way/458208106", "height": 36, "rise": 10, "shape": "round", "ring": [
|
|
68
68
|
[-122.332395, 47.596154],
|
|
69
69
|
[-122.33234, 47.595145],
|
|
70
70
|
[-122.332404, 47.594143],
|
|
@@ -79,7 +79,7 @@ export const STADIUM_OSM = {
|
|
|
79
79
|
[-122.332747, 47.596004],
|
|
80
80
|
[-122.332452, 47.596154],
|
|
81
81
|
] },
|
|
82
|
-
{ "source": "way/458208107", "height": 36, "rise": 10, "ring": [
|
|
82
|
+
{ "source": "way/458208107", "height": 36, "rise": 10, "shape": "round", "ring": [
|
|
83
83
|
[-122.330897, 47.596155],
|
|
84
84
|
[-122.330837, 47.596159],
|
|
85
85
|
[-122.33062, 47.596055],
|
|
@@ -321,4 +321,226 @@ export const STADIUM_OSM = {
|
|
|
321
321
|
[135.362615, 34.721654],
|
|
322
322
|
],
|
|
323
323
|
},
|
|
324
|
+
"yankee-stadium": {
|
|
325
|
+
"source": "way/24801630",
|
|
326
|
+
"read": "2026-10-30",
|
|
327
|
+
"base": "2026-10-30T13:35:12Z",
|
|
328
|
+
"licence": "ODbL-1.0",
|
|
329
|
+
"attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
|
|
330
|
+
"axis": { "heading": 75.6, "basis": "infield", "strength": 1.55, "elongation": 1, "centre": [-73.926956, 40.829481] },
|
|
331
|
+
"ring": [
|
|
332
|
+
[-73.92491, 40.829852],
|
|
333
|
+
[-73.925748, 40.828426],
|
|
334
|
+
[-73.92608, 40.828413],
|
|
335
|
+
[-73.926087, 40.828377],
|
|
336
|
+
[-73.92634, 40.828396],
|
|
337
|
+
[-73.926334, 40.828431],
|
|
338
|
+
[-73.926483, 40.828456],
|
|
339
|
+
[-73.926774, 40.828533],
|
|
340
|
+
[-73.927616, 40.828858],
|
|
341
|
+
[-73.927745, 40.828938],
|
|
342
|
+
[-73.92784, 40.829022],
|
|
343
|
+
[-73.927956, 40.82918],
|
|
344
|
+
[-73.92801, 40.82917],
|
|
345
|
+
[-73.928085, 40.829392],
|
|
346
|
+
[-73.928007, 40.829408],
|
|
347
|
+
[-73.927987, 40.829546],
|
|
348
|
+
[-73.927915, 40.829702],
|
|
349
|
+
[-73.927827, 40.829809],
|
|
350
|
+
[-73.927064, 40.830581],
|
|
351
|
+
[-73.926877, 40.830729],
|
|
352
|
+
[-73.926897, 40.830771],
|
|
353
|
+
[-73.926662, 40.830846],
|
|
354
|
+
[-73.926645, 40.830811],
|
|
355
|
+
[-73.926492, 40.830855],
|
|
356
|
+
[-73.92521, 40.830436],
|
|
357
|
+
[-73.925315, 40.830258],
|
|
358
|
+
[-73.925019, 40.830158],
|
|
359
|
+
[-73.925072, 40.830068],
|
|
360
|
+
[-73.924989, 40.829882],
|
|
361
|
+
],
|
|
362
|
+
},
|
|
363
|
+
"citi-field": {
|
|
364
|
+
"source": "way/604023701",
|
|
365
|
+
"read": "2026-10-30",
|
|
366
|
+
"base": "2026-10-30T13:37:18Z",
|
|
367
|
+
"licence": "ODbL-1.0",
|
|
368
|
+
"attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
|
|
369
|
+
"axis": { "heading": 14.5, "basis": "pitch", "strength": 1.62, "elongation": 1, "centre": [-73.846066, 40.756568], "rms": 2 },
|
|
370
|
+
"ring": [
|
|
371
|
+
[-73.847301, 40.757646],
|
|
372
|
+
[-73.847451, 40.757602],
|
|
373
|
+
[-73.847141, 40.756912],
|
|
374
|
+
[-73.846557, 40.755747],
|
|
375
|
+
[-73.846467, 40.755652],
|
|
376
|
+
[-73.846341, 40.7556],
|
|
377
|
+
[-73.846205, 40.755601],
|
|
378
|
+
[-73.846086, 40.755642],
|
|
379
|
+
[-73.845426, 40.756108],
|
|
380
|
+
[-73.844367, 40.756811],
|
|
381
|
+
[-73.844391, 40.756866],
|
|
382
|
+
[-73.84427, 40.756903],
|
|
383
|
+
[-73.845078, 40.75848],
|
|
384
|
+
[-73.845755, 40.75828],
|
|
385
|
+
[-73.845791, 40.75835],
|
|
386
|
+
[-73.846028, 40.75828],
|
|
387
|
+
[-73.845967, 40.758161],
|
|
388
|
+
[-73.846003, 40.75815],
|
|
389
|
+
[-73.845985, 40.758112],
|
|
390
|
+
[-73.845871, 40.758149],
|
|
391
|
+
[-73.845808, 40.758019],
|
|
392
|
+
[-73.845954, 40.757976],
|
|
393
|
+
[-73.845968, 40.758],
|
|
394
|
+
[-73.846844, 40.757742],
|
|
395
|
+
[-73.846832, 40.757718],
|
|
396
|
+
[-73.846907, 40.757698],
|
|
397
|
+
[-73.846952, 40.757638],
|
|
398
|
+
[-73.847248, 40.757551],
|
|
399
|
+
],
|
|
400
|
+
},
|
|
401
|
+
"metlife-stadium": {
|
|
402
|
+
"source": "way/24221553",
|
|
403
|
+
"read": "2026-10-30",
|
|
404
|
+
"base": "2026-10-30T13:38:20Z",
|
|
405
|
+
"licence": "ODbL-1.0",
|
|
406
|
+
"attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
|
|
407
|
+
"axis": { "heading": 166.5, "basis": "pitch", "strength": 1.49, "elongation": 2.28, "centre": [-74.074362, 40.813528] },
|
|
408
|
+
"ring": [
|
|
409
|
+
[-74.07351, 40.812427],
|
|
410
|
+
[-74.073348, 40.812509],
|
|
411
|
+
[-74.073194, 40.812606],
|
|
412
|
+
[-74.072934, 40.812831],
|
|
413
|
+
[-74.072934, 40.813349],
|
|
414
|
+
[-74.073019, 40.813751],
|
|
415
|
+
[-74.073174, 40.81413],
|
|
416
|
+
[-74.073354, 40.814425],
|
|
417
|
+
[-74.073488, 40.814591],
|
|
418
|
+
[-74.073684, 40.81468],
|
|
419
|
+
[-74.074066, 40.814777],
|
|
420
|
+
[-74.074538, 40.814785],
|
|
421
|
+
[-74.074716, 40.81476],
|
|
422
|
+
[-74.074918, 40.814724],
|
|
423
|
+
[-74.075248, 40.814591],
|
|
424
|
+
[-74.075439, 40.814483],
|
|
425
|
+
[-74.075757, 40.814231],
|
|
426
|
+
[-74.07577, 40.813932],
|
|
427
|
+
[-74.075757, 40.81366],
|
|
428
|
+
[-74.07566, 40.813245],
|
|
429
|
+
[-74.075542, 40.812967],
|
|
430
|
+
[-74.075364, 40.812648],
|
|
431
|
+
[-74.075241, 40.812468],
|
|
432
|
+
[-74.075089, 40.812383],
|
|
433
|
+
[-74.074872, 40.812318],
|
|
434
|
+
[-74.074662, 40.81228],
|
|
435
|
+
[-74.07442, 40.812259],
|
|
436
|
+
[-74.074199, 40.812263],
|
|
437
|
+
[-74.073841, 40.812316],
|
|
438
|
+
],
|
|
439
|
+
},
|
|
440
|
+
"olympic-stadium-montreal": {
|
|
441
|
+
"source": "way/108505523",
|
|
442
|
+
"read": "2026-10-30",
|
|
443
|
+
"base": "2026-10-30T15:34:06Z",
|
|
444
|
+
"licence": "ODbL-1.0",
|
|
445
|
+
"attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
|
|
446
|
+
"axis": { "heading": 135, "basis": "streets", "strength": 1.21, "elongation": 1.28, "centre": [-73.552063, 45.558116] },
|
|
447
|
+
"tower": { "source": "way/20213158", "height": 165, "base": [-73.552212, 45.55979], "top": [-73.551804, 45.558392], "ring": [
|
|
448
|
+
[-73.551265, 45.559204],
|
|
449
|
+
[-73.55152, 45.559114],
|
|
450
|
+
[-73.551691, 45.559005],
|
|
451
|
+
[-73.55175, 45.558922],
|
|
452
|
+
[-73.551766, 45.55881],
|
|
453
|
+
[-73.551734, 45.558708],
|
|
454
|
+
[-73.551504, 45.558389],
|
|
455
|
+
[-73.552109, 45.558304],
|
|
456
|
+
[-73.552061, 45.558686],
|
|
457
|
+
[-73.55222, 45.558867],
|
|
458
|
+
[-73.552319, 45.558915],
|
|
459
|
+
[-73.552475, 45.558952],
|
|
460
|
+
[-73.552742, 45.558955],
|
|
461
|
+
[-73.553377, 45.55936],
|
|
462
|
+
[-73.552867, 45.559859],
|
|
463
|
+
[-73.552577, 45.5601],
|
|
464
|
+
[-73.552513, 45.560205],
|
|
465
|
+
[-73.552526, 45.560719],
|
|
466
|
+
[-73.55241, 45.560733],
|
|
467
|
+
[-73.552169, 45.560258],
|
|
468
|
+
[-73.55149, 45.559995],
|
|
469
|
+
[-73.551023, 45.559768],
|
|
470
|
+
[-73.550902, 45.559761],
|
|
471
|
+
[-73.550874, 45.559733],
|
|
472
|
+
[-73.550876, 45.559692],
|
|
473
|
+
[-73.550947, 45.559659],
|
|
474
|
+
[-73.551005, 45.559593],
|
|
475
|
+
] },
|
|
476
|
+
"ring": [
|
|
477
|
+
[-73.551265, 45.559204],
|
|
478
|
+
[-73.552742, 45.558955],
|
|
479
|
+
[-73.55299, 45.558745],
|
|
480
|
+
[-73.553114, 45.558575],
|
|
481
|
+
[-73.553219, 45.558392],
|
|
482
|
+
[-73.553285, 45.558195],
|
|
483
|
+
[-73.553324, 45.557998],
|
|
484
|
+
[-73.553324, 45.557775],
|
|
485
|
+
[-73.553298, 45.557579],
|
|
486
|
+
[-73.553101, 45.557179],
|
|
487
|
+
[-73.552947, 45.556985],
|
|
488
|
+
[-73.552754, 45.556812],
|
|
489
|
+
[-73.552531, 45.556674],
|
|
490
|
+
[-73.552275, 45.55655],
|
|
491
|
+
[-73.552, 45.556465],
|
|
492
|
+
[-73.551712, 45.556425],
|
|
493
|
+
[-73.551417, 45.556425],
|
|
494
|
+
[-73.551109, 45.556465],
|
|
495
|
+
[-73.550833, 45.556543],
|
|
496
|
+
[-73.550598, 45.556674],
|
|
497
|
+
[-73.550394, 45.556832],
|
|
498
|
+
[-73.550224, 45.556996],
|
|
499
|
+
[-73.550093, 45.557205],
|
|
500
|
+
[-73.550008, 45.557402],
|
|
501
|
+
[-73.549962, 45.557605],
|
|
502
|
+
[-73.549968, 45.557821],
|
|
503
|
+
[-73.550008, 45.558031],
|
|
504
|
+
[-73.550071, 45.558229],
|
|
505
|
+
[-73.550165, 45.558424],
|
|
506
|
+
[-73.550309, 45.558601],
|
|
507
|
+
[-73.550473, 45.558772],
|
|
508
|
+
[-73.550663, 45.558916],
|
|
509
|
+
[-73.550892, 45.559053],
|
|
510
|
+
],
|
|
511
|
+
},
|
|
512
|
+
"barclays-center": {
|
|
513
|
+
"source": "relation/8610205",
|
|
514
|
+
"read": "2026-10-30",
|
|
515
|
+
"base": "2026-10-30T13:40:21Z",
|
|
516
|
+
"licence": "ODbL-1.0",
|
|
517
|
+
"attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
|
|
518
|
+
"height": 35,
|
|
519
|
+
"axis": { "heading": 6, "basis": "building", "strength": 1.4, "elongation": 1.04, "centre": [-73.975174, 40.682609] },
|
|
520
|
+
"ring": [
|
|
521
|
+
[-73.976494, 40.683074],
|
|
522
|
+
[-73.976469, 40.68312],
|
|
523
|
+
[-73.97631, 40.68325],
|
|
524
|
+
[-73.97614, 40.683352],
|
|
525
|
+
[-73.976088, 40.683369],
|
|
526
|
+
[-73.976009, 40.683369],
|
|
527
|
+
[-73.974471, 40.683053],
|
|
528
|
+
[-73.974483, 40.683021],
|
|
529
|
+
[-73.974429, 40.682951],
|
|
530
|
+
[-73.974384, 40.682818],
|
|
531
|
+
[-73.974366, 40.682659],
|
|
532
|
+
[-73.974401, 40.682458],
|
|
533
|
+
[-73.974199, 40.682416],
|
|
534
|
+
[-73.974272, 40.682217],
|
|
535
|
+
[-73.974501, 40.682265],
|
|
536
|
+
[-73.974543, 40.68221],
|
|
537
|
+
[-73.974679, 40.681821],
|
|
538
|
+
[-73.974854, 40.681857],
|
|
539
|
+
[-73.97489, 40.681755],
|
|
540
|
+
[-73.975043, 40.681787],
|
|
541
|
+
[-73.974982, 40.681954],
|
|
542
|
+
[-73.975847, 40.682136],
|
|
543
|
+
[-73.976487, 40.683028],
|
|
544
|
+
],
|
|
545
|
+
},
|
|
324
546
|
};
|
package/dist/strings.core.d.ts
CHANGED
|
@@ -520,8 +520,10 @@ export interface KyogijoWords {
|
|
|
520
520
|
stadiumPark: string;
|
|
521
521
|
stadiumPitch: string;
|
|
522
522
|
stadiumInfield: string;
|
|
523
|
+
stadiumStreets: string;
|
|
523
524
|
stadiumHall: string;
|
|
524
525
|
stadiumRingBuilding: string;
|
|
526
|
+
stadiumCourtBuilding: string;
|
|
525
527
|
stadiumPitchPark: string;
|
|
526
528
|
stadiumNonePark: string;
|
|
527
529
|
/** A district: a plan of {count} real venues at their real positions, {mode}; and what `mode` says for the two kinds of plan, and the word before the credit. */
|
package/dist/strings.en.js
CHANGED
|
@@ -199,7 +199,7 @@ export const WORDS_EN = {
|
|
|
199
199
|
},
|
|
200
200
|
},
|
|
201
201
|
scoreTitle: "{away} {awayScore}, {home} {homeScore}",
|
|
202
|
-
said: { home: "home", away: "away", won: "{name} won.", tied: "The game is level.", park: "The outfield fence follows the figures published for {park}.", officially: "Its official name is {name}.", ground: "The pitch follows the size published for {ground}.", groundDefault: "No pitch size is published for {ground}, so the pitch has the international size of 105 by 68 metres.", arenaRink: "{arena}, hockey rink", arenaCourt: "{arena}, basketball court", arenaRinkAbout: "an ice hockey rink, {length} by {width} feet ({lengthM} by {widthM} metres) with rounded corners, with its red and blue lines, face-off circles, creases and goal nets", arenaCourtAbout: "a basketball court, {length} by {width} feet ({lengthM} by {widthM} metres), with its keys, three-point lines, free-throw circles and the centre circle", arenaSize: "The size is the one published for {arena}.", arenaUnknown: "The article says the rink of {arena} was shorter than the NHL's but gives no size, so the NHL's is drawn.", real: "The stands are a plausible bowl of {seats} seats in {tiers} tiers, fitted inside the outline of the building of {arena} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the arena's plan.", realBuilding: "The rink lies along the building's long axis, which is an inference, and the arrow points north.", realMapped: "The rink lies as OpenStreetMap maps the ice, and the arrow points north.", realNone: "The rink's orientation is not known, so it is drawn east-west with north at the top.", stadium: "The stands are a plausible bowl of {seats} seats in {tiers} bowls, fitted inside the outline of the building of {stadium} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the stadium's plan.", stadiumOpening: "The field lies along the opening in the roof, which is the size of the field, and the arrow points north.", stadiumBuilding: "The field lies along the building's long axis, which is an inference, and the arrow points north.", stadiumNone: "The field's orientation is not known, so it is drawn east-west with north at the top.", stadiumHall: "The stands are a plausible bowl of {seats} seats in {tiers} levels, fitted inside the outline of the building of {stadium} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the hall's plan.", stadiumRingBuilding: "The ring is set along the building's long axis, which is an inference, and the arrow points north.", stadiumPitchPark: "The way home plate faces is worked out from the grass of the field OpenStreetMap maps, fitted to the published fence, and the arrow points north.", stadiumNonePark: "The way home plate faces is not known, so the field is drawn the way that fits the building, and no arrow points north.", stadiumPark: "The stands are the usual stands of a ballpark, each band as deep as its seats need, for {seats} seats, fitted inside the outline of the building of {stadium} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the park's plan.", stadiumPitch: "The field lies as OpenStreetMap maps the pitch, and the arrow points north.", stadiumInfield: "The way home plate faces is worked out from the infield OpenStreetMap maps and the building's outline, and the arrow points north.", district: "A plan of {count} real venues at their real positions and orientations, from the outlines OpenStreetMap maps; {mode}.", districtNeighbours: "it is fitted close round the buildings", districtCity: "it keeps the real distances, with a grid of kilometres and a scale", districtCredit: "Credit:", districtOutside: "People outside: {percent} percent of the seats of the venues, {people} people, stand on the sidewalks, plazas and grounds round them, and none on a road.", era: "The markings are those of the {season} season.", hammer: "{name} has the hammer.", ends: "By end, {name}: {list}.", total: "Total", wonPens: "{name} won {a}-{b} on penalties.", pens: "{a}-{b} pens", on: "Drawn as", sep: ", ", stop: ".", colon: ": ", gap: " " },
|
|
202
|
+
said: { home: "home", away: "away", won: "{name} won.", tied: "The game is level.", park: "The outfield fence follows the figures published for {park}.", officially: "Its official name is {name}.", ground: "The pitch follows the size published for {ground}.", groundDefault: "No pitch size is published for {ground}, so the pitch has the international size of 105 by 68 metres.", arenaRink: "{arena}, hockey rink", arenaCourt: "{arena}, basketball court", arenaRinkAbout: "an ice hockey rink, {length} by {width} feet ({lengthM} by {widthM} metres) with rounded corners, with its red and blue lines, face-off circles, creases and goal nets", arenaCourtAbout: "a basketball court, {length} by {width} feet ({lengthM} by {widthM} metres), with its keys, three-point lines, free-throw circles and the centre circle", arenaSize: "The size is the one published for {arena}.", arenaUnknown: "The article says the rink of {arena} was shorter than the NHL's but gives no size, so the NHL's is drawn.", real: "The stands are a plausible bowl of {seats} seats in {tiers} tiers, fitted inside the outline of the building of {arena} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the arena's plan.", realBuilding: "The rink lies along the building's long axis, which is an inference, and the arrow points north.", realMapped: "The rink lies as OpenStreetMap maps the ice, and the arrow points north.", realNone: "The rink's orientation is not known, so it is drawn east-west with north at the top.", stadium: "The stands are a plausible bowl of {seats} seats in {tiers} bowls, fitted inside the outline of the building of {stadium} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the stadium's plan.", stadiumOpening: "The field lies along the opening in the roof, which is the size of the field, and the arrow points north.", stadiumBuilding: "The field lies along the building's long axis, which is an inference, and the arrow points north.", stadiumNone: "The field's orientation is not known, so it is drawn east-west with north at the top.", stadiumHall: "The stands are a plausible bowl of {seats} seats in {tiers} levels, fitted inside the outline of the building of {stadium} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the hall's plan.", stadiumRingBuilding: "The ring is set along the building's long axis, which is an inference, and the arrow points north.", stadiumCourtBuilding: "The court is set along the building's long axis, which is an inference, and the arrow points north.", stadiumPitchPark: "The way home plate faces is worked out from the grass of the field OpenStreetMap maps, fitted to the published fence, and the arrow points north.", stadiumNonePark: "The way home plate faces is not known, so the field is drawn the way that fits the building, and no arrow points north.", stadiumPark: "The stands are the usual stands of a ballpark, each band as deep as its seats need, for {seats} seats, fitted inside the outline of the building of {stadium} from OpenStreetMap ((c) OpenStreetMap contributors); it is not the park's plan.", stadiumPitch: "The field lies as OpenStreetMap maps the pitch, and the arrow points north.", stadiumInfield: "The way home plate faces is worked out from the infield OpenStreetMap maps and the building's outline, and the arrow points north.", stadiumStreets: "The way home plate faces is worked out from the streets that the English Wikipedia lists at first base, left field, third base and right field, to the nearest 45 degrees, and the arrow points north.", district: "A plan of {count} real venues at their real positions and orientations, from the outlines OpenStreetMap maps; {mode}.", districtNeighbours: "it is fitted close round the buildings", districtCity: "it keeps the real distances, with a grid of kilometres and a scale", districtCredit: "Credit:", districtOutside: "People outside: {percent} percent of the seats of the venues, {people} people, stand on the sidewalks, plazas and grounds round them, and none on a road.", era: "The markings are those of the {season} season.", hammer: "{name} has the hammer.", ends: "By end, {name}: {list}.", total: "Total", wonPens: "{name} won {a}-{b} on penalties.", pens: "{a}-{b} pens", on: "Drawn as", sep: ", ", stop: ".", colon: ": ", gap: " " },
|
|
203
203
|
budo: {
|
|
204
204
|
sides: { north: "north", south: "south", east: "east", west: "west" },
|
|
205
205
|
judo: "a judo contest area of {contest} by {contest} metres in a safety area {safety} metres wide, laid with tatami of {tatami}",
|
package/dist/strings.ja.js
CHANGED
|
@@ -224,7 +224,7 @@ export const WORDS_JA = {
|
|
|
224
224
|
},
|
|
225
225
|
},
|
|
226
226
|
scoreTitle: "{away} {awayScore}、{home} {homeScore}",
|
|
227
|
-
said: { home: "ホーム", away: "アウェイ", won: "{name}の勝ちです。", tied: "同点です。", park: "外野フェンスは、{park}の公表されている距離をもとに描かれています。", officially: "正式名称は{name}です。", ground: "ピッチは、{ground}の公表されている広さをもとに描かれています。", groundDefault: "{ground}のピッチの広さは公表されていないため、国際標準の105×68mで描かれています。", arenaRink: "{arena}のアイスホッケーリンク", arenaCourt: "{arena}のバスケットボールコート", arenaRinkAbout: "アイスホッケーのリンク。{length}フィート(約{lengthM}m)×{width}フィート(約{widthM}m)で角が丸く、レッドライン、ブルーライン、フェイスオフサークル、クリース、ゴールがあります", arenaCourtAbout: "バスケットボールのコート。{length}フィート(約{lengthM}m)×{width}フィート(約{widthM}m)で、ペイントエリア、スリーポイントライン、フリースローサークル、センターサークルがあります", arenaSize: "広さは、{arena}の公表されている数値をもとに描かれています。", arenaUnknown: "{arena}のリンクはNHLの規格より短かったとされていますが、広さが示されていないため、NHLの規格で描かれています。", real: "スタンドは、OpenStreetMapの建物の輪郭((c) OpenStreetMap contributors)の内側に収まるように、{arena}の{seats}席・{tiers}層を推定して描いたもので、アリーナの設計図ではありません。", realBuilding: "リンクは建物の長い軸に沿って置いており(推定)、矢印は北を指します。", realMapped: "リンクの向きはOpenStreetMapに記録された氷面のとおりで、矢印は北を指します。", realNone: "リンクの向きは分かっていないため、東西に置き、北を上にしています。", stadium: "{stadium}の建物の輪郭(OpenStreetMap、(c) OpenStreetMap contributors)の内側に、{seats}席・{tiers}層のスタンドを推定して描いています。スタジアムの設計図ではありません。", stadiumOpening: "フィールドは屋根の開口部(フィールドと同じ大きさ)に沿って置いており、矢印は北を指します。", stadiumBuilding: "フィールドは建物の長い軸に沿って置いており(推定)、矢印は北を指します。", stadiumNone: "フィールドの向きは分かっていないため、東西に置き、北を上にしています。", stadiumHall: "{stadium}の建物の輪郭(OpenStreetMap、(c) OpenStreetMap contributors)の内側に、{seats}席・{tiers}層の客席を推定して描いています。ホールの設計図ではありません。", stadiumRingBuilding: "リングは建物の長い軸に沿って置いており(推定)、矢印は北を指します。", stadiumPitchPark: "ホームプレートの向きは、OpenStreetMapに記録されたグラウンドの芝生を、公表されているフェンスの形に合わせて求めており、矢印は北を指します。", stadiumNonePark: "ホームプレートの向きは分かっていないため、建物に収まる向きでグラウンドを描いており、北を示す矢印はありません。", stadiumPark: "{stadium}の建物の輪郭(OpenStreetMap、(c) OpenStreetMap contributors)の内側に、{seats}席のスタンドを推定して描いています。球場の設計図ではありません。", stadiumPitch: "フィールドの向きはOpenStreetMapに記録されたピッチのとおりで、矢印は北を指します。", stadiumInfield: "ホームプレートの向きは、OpenStreetMapに記録された内野と建物の輪郭から推定しており、矢印は北を指します。", district: "OpenStreetMapの建物の輪郭をもとに、{count}か所の実在の会場を実際の位置と向きのとおりに並べた配置図です。{mode}。", districtNeighbours: "建物のすぐ近くまで寄せて描いています", districtCity: "実際の距離を保ち、1km方眼と縮尺を添えています", districtCredit: "出典:", districtOutside: "会場の外の人出:会場の全座席数の{percent}%にあたる{people}人が、会場の周りの歩道、広場、敷地に立っています。車道には立っていません。", era: "ラインやマークは{season}シーズンのものです。", hammer: "{name}がハンマー(最後の1投)を持っています。", ends: "{name}のエンドごとの得点:{list}。", total: "合計", wonPens: "{name}がPK戦を{a}-{b}で制しました。", pens: "PK戦 {a}-{b}", on: "図の内容", sep: "、", stop: "。", colon: ":", gap: "" },
|
|
227
|
+
said: { home: "ホーム", away: "アウェイ", won: "{name}の勝ちです。", tied: "同点です。", park: "外野フェンスは、{park}の公表されている距離をもとに描かれています。", officially: "正式名称は{name}です。", ground: "ピッチは、{ground}の公表されている広さをもとに描かれています。", groundDefault: "{ground}のピッチの広さは公表されていないため、国際標準の105×68mで描かれています。", arenaRink: "{arena}のアイスホッケーリンク", arenaCourt: "{arena}のバスケットボールコート", arenaRinkAbout: "アイスホッケーのリンク。{length}フィート(約{lengthM}m)×{width}フィート(約{widthM}m)で角が丸く、レッドライン、ブルーライン、フェイスオフサークル、クリース、ゴールがあります", arenaCourtAbout: "バスケットボールのコート。{length}フィート(約{lengthM}m)×{width}フィート(約{widthM}m)で、ペイントエリア、スリーポイントライン、フリースローサークル、センターサークルがあります", arenaSize: "広さは、{arena}の公表されている数値をもとに描かれています。", arenaUnknown: "{arena}のリンクはNHLの規格より短かったとされていますが、広さが示されていないため、NHLの規格で描かれています。", real: "スタンドは、OpenStreetMapの建物の輪郭((c) OpenStreetMap contributors)の内側に収まるように、{arena}の{seats}席・{tiers}層を推定して描いたもので、アリーナの設計図ではありません。", realBuilding: "リンクは建物の長い軸に沿って置いており(推定)、矢印は北を指します。", realMapped: "リンクの向きはOpenStreetMapに記録された氷面のとおりで、矢印は北を指します。", realNone: "リンクの向きは分かっていないため、東西に置き、北を上にしています。", stadium: "{stadium}の建物の輪郭(OpenStreetMap、(c) OpenStreetMap contributors)の内側に、{seats}席・{tiers}層のスタンドを推定して描いています。スタジアムの設計図ではありません。", stadiumOpening: "フィールドは屋根の開口部(フィールドと同じ大きさ)に沿って置いており、矢印は北を指します。", stadiumBuilding: "フィールドは建物の長い軸に沿って置いており(推定)、矢印は北を指します。", stadiumNone: "フィールドの向きは分かっていないため、東西に置き、北を上にしています。", stadiumHall: "{stadium}の建物の輪郭(OpenStreetMap、(c) OpenStreetMap contributors)の内側に、{seats}席・{tiers}層の客席を推定して描いています。ホールの設計図ではありません。", stadiumRingBuilding: "リングは建物の長い軸に沿って置いており(推定)、矢印は北を指します。", stadiumCourtBuilding: "コートは建物の長軸に沿って置かれており(推定)、矢印は北を指します。", stadiumPitchPark: "ホームプレートの向きは、OpenStreetMapに記録されたグラウンドの芝生を、公表されているフェンスの形に合わせて求めており、矢印は北を指します。", stadiumNonePark: "ホームプレートの向きは分かっていないため、建物に収まる向きでグラウンドを描いており、北を示す矢印はありません。", stadiumPark: "{stadium}の建物の輪郭(OpenStreetMap、(c) OpenStreetMap contributors)の内側に、{seats}席のスタンドを推定して描いています。球場の設計図ではありません。", stadiumPitch: "フィールドの向きはOpenStreetMapに記録されたピッチのとおりで、矢印は北を指します。", stadiumInfield: "ホームプレートの向きは、OpenStreetMapに記録された内野と建物の輪郭から推定しており、矢印は北を指します。", stadiumStreets: "ホームプレートの向きは、英語版ウィキペディアが一塁・左翼・三塁・右翼の位置に挙げている通りから、45度刻みで推定しており、矢印は北を指します。", district: "OpenStreetMapの建物の輪郭をもとに、{count}か所の実在の会場を実際の位置と向きのとおりに並べた配置図です。{mode}。", districtNeighbours: "建物のすぐ近くまで寄せて描いています", districtCity: "実際の距離を保ち、1km方眼と縮尺を添えています", districtCredit: "出典:", districtOutside: "会場の外の人出:会場の全座席数の{percent}%にあたる{people}人が、会場の周りの歩道、広場、敷地に立っています。車道には立っていません。", era: "ラインやマークは{season}シーズンのものです。", hammer: "{name}がハンマー(最後の1投)を持っています。", ends: "{name}のエンドごとの得点:{list}。", total: "合計", wonPens: "{name}がPK戦を{a}-{b}で制しました。", pens: "PK戦 {a}-{b}", on: "図の内容", sep: "、", stop: "。", colon: ":", gap: "" },
|
|
228
228
|
budo: {
|
|
229
229
|
sides: { north: "北", south: "南", east: "東", west: "西" },
|
|
230
230
|
judo: "柔道の試合場。試合場内は{contest}m四方、幅{safety}mの安全地帯があり、{tatami}の畳を敷いています",
|
package/dist/turn.kit.d.ts
CHANGED
|
@@ -40,6 +40,12 @@ export interface Plane {
|
|
|
40
40
|
* (a raised room is seen through every wall between it and the eye, at a low angle and from straight above alike).
|
|
41
41
|
*/
|
|
42
42
|
fadeSide?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* A roof: it is cut away from above, so that the bowl under it stays visible, and whole from the street. Its opacity falls from whole to `fadeTo` (0.12 when missing) as the eye rises over the building, from a pitch of `CUTAWAY.from`
|
|
45
|
+
* degrees (the eye at a low angle, outside) to `CUTAWAY.to` (the eye looking down); at the lowest pitches the view allows, an eye at street level, it is whole again whatever its side. In between a roof that is `shy` gives way as
|
|
46
|
+
* a wall does, by the side the eye is on.
|
|
47
|
+
*/
|
|
48
|
+
cut?: boolean;
|
|
43
49
|
/**
|
|
44
50
|
* A face of a closed solid that nothing shows through (a building's wall, drawn opaque): the side of it that is the solid's outside, as the way its `u` x `v` points, 1 out of the solid and -1 into it. While the face is turned away
|
|
45
51
|
* from the eye it is hidden by the solid's own near faces, so a page that asks for it (`layoutOf`'s `cull`) leaves it out of the view until the view turns it round, and spends nothing on it.
|
|
@@ -116,7 +122,14 @@ export declare function shy(p: Plane, centre: readonly [number, number]): Plane;
|
|
|
116
122
|
* How much of a wall is left (1 whole, down to 0.08) at a view: none is cut away unless the wall is on the eye's side of the surface, and then more the lower the eye is, because a wall seen
|
|
117
123
|
* from straight above hides nothing. `yaw` and `pitch` are the view's, in degrees.
|
|
118
124
|
*/
|
|
119
|
-
export declare function fadeOf(p: Pick<Plane, "shy" | "fadeTo" | "fadeAt" | "fadeSide">, yaw: number, pitch: number): number;
|
|
125
|
+
export declare function fadeOf(p: Pick<Plane, "shy" | "fadeTo" | "fadeAt" | "fadeSide" | "cut">, yaw: number, pitch: number): number;
|
|
126
|
+
/** The pitches, in degrees, between which a roof is cut away from above (it is whole at `high` and over, and gone to its `fadeTo` at `low` and under), and between which it is whole again at street level. */
|
|
127
|
+
export declare const CUTAWAY: {
|
|
128
|
+
readonly low: 8;
|
|
129
|
+
readonly high: 38;
|
|
130
|
+
readonly streetFrom: 74;
|
|
131
|
+
readonly streetTo: 84;
|
|
132
|
+
};
|
|
120
133
|
/** A rectangle on the surface, in feet: its corners. */
|
|
121
134
|
export type Rect = {
|
|
122
135
|
x0: number;
|
package/dist/turn.kit.js
CHANGED
|
@@ -105,6 +105,25 @@ export function shy(p, centre) {
|
|
|
105
105
|
* from straight above hides nothing. `yaw` and `pitch` are the view's, in degrees.
|
|
106
106
|
*/
|
|
107
107
|
export function fadeOf(p, yaw, pitch) {
|
|
108
|
+
if (p.cut === true)
|
|
109
|
+
return cutOf(p, yaw, pitch);
|
|
110
|
+
return sideOf(p, yaw, pitch);
|
|
111
|
+
}
|
|
112
|
+
/** The pitches, in degrees, between which a roof is cut away from above (it is whole at `high` and over, and gone to its `fadeTo` at `low` and under), and between which it is whole again at street level. */
|
|
113
|
+
export const CUTAWAY = { low: 8, high: 38, streetFrom: 74, streetTo: 84 };
|
|
114
|
+
const smooth = (x, from, to) => {
|
|
115
|
+
const t = Math.min(1, Math.max(0, (x - from) / (to - from)));
|
|
116
|
+
return t * t * (3 - 2 * t);
|
|
117
|
+
};
|
|
118
|
+
/** How much of a roof is left at a view: cut away from above, given way like a wall by its side, whole at street level. */
|
|
119
|
+
function cutOf(p, yaw, pitch) {
|
|
120
|
+
const lowest = p.fadeTo ?? 0.12;
|
|
121
|
+
const above = lowest + (1 - lowest) * smooth(pitch, CUTAWAY.low, CUTAWAY.high);
|
|
122
|
+
const kept = Math.min(above, sideOf(p, yaw, pitch));
|
|
123
|
+
const street = smooth(pitch, CUTAWAY.streetFrom, CUTAWAY.streetTo);
|
|
124
|
+
return Math.round((kept + (1 - kept) * street) * 1000) / 1000;
|
|
125
|
+
}
|
|
126
|
+
function sideOf(p, yaw, pitch) {
|
|
108
127
|
if (p.shy === undefined)
|
|
109
128
|
return 1;
|
|
110
129
|
const a = (yaw * Math.PI) / 180;
|
package/dist/turn.style.js
CHANGED
|
@@ -5,9 +5,9 @@ import { KYOGIJO_TURN_BOARD_STYLE } from "./overlay.js";
|
|
|
5
5
|
* defaults are in `:where()`, which has no weight, so a page's own rule always wins; the colours are custom properties (`--ky-up-*`) a page can set.
|
|
6
6
|
*/
|
|
7
7
|
export const KYOGIJO_TURN_STYLE = `
|
|
8
|
-
:where(.ky-turn){--ky-left:#2f6db0;--ky-right:#b5452c;--ky-cr-home:#b5452c;--ky-cr-away:#2f6db0;--ky-cr-bed:#4a525d;--ky-cr-empty:#7d8794;--ky-cr-gap:#14181d;--ky-cr-conc:#8c929b;--ky-cr-dim:1;--ky-up-roof:rgba(214,218,212,.6);--ky-up-roofline:rgba(40,46,42,.55);--ky-up-fascia:#9aa09a;--ky-up-ivy:#5b8a45;--ky-up-door:#8a6a46;--ky-up-window:rgba(150,200,240,.55);--ky-up-sash:#f2f0e6;--ky-up-banner:#26211d;--ky-up-bannerline:#c8b88a;--ky-up-room:#efe8d6;--ky-up-roomback:#d6cdb9;--ky-up-ceiling:#dedcd5;--ky-up-railw:#fbfaf6;--ky-up-wainline:#6b4a2a;--ky-up-riser:#3f342c;--ky-up-slab:#d8cfba;--ky-up-slabedge:#c2b69c;--ky-up-seatc:#46342a;--ky-up-seatb:#2d211b;--ky-up-dais:#a0683a;--ky-up-dais-side:#6a4326;--ky-up-shrine:#c9b48f;--ky-up-shrine-side:#8f7a55;--ky-up-gal:#4d4037;--ky-up-aisle:#dcc196;--ky-up-panel:rgba(95,58,22,.3);--ky-up-alcove:#b58a52;--ky-up-purple:#5b2a6e;--ky-up-clock:#ffffff;--ky-up-rail:#3a2c1f;--ky-up-matedge:#2a2a26;--ky-up-sbframe:#1a1f1c;--ky-up-sbedge:#5b645e;--ky-up-sbline:#59615b;--ky-up-pole:#e9e7de;--ky-up-white:#f6f4ec;--ky-up-yellow:#f2c230;--ky-up-red:#c8372d;--ky-up-orange:#f26a1b;--ky-up-wood:#e3d4b4;--ky-up-leg:#474e49;--ky-up-pad:#2f6db0;--ky-up-cagepad:#2a2d32;--ky-up-table:#18243f;--ky-up-foot:rgba(0,0,0,.25);--ky-up-ground:#d9d5c7;--ky-up-wall:#2f4a36;--ky-up-clay:#a8703f;--ky-up-cap:#1d2a22;--ky-up-board:#ece9df;--ky-up-glass:rgba(138,190,232,.26);--ky-up-backboard:rgba(255,255,255,.88);--ky-up-outline:#f2f0e6;--ky-up-rim:#e8591a;--ky-up-mesh:rgba(24,30,27,.7);--ky-up-netfill:rgba(255,255,255,.2);--ky-up-tape:#fbfaf4;--ky-turn-bg:transparent;--ky-turn-ink:#1f2320;--ky-turn-rule:rgba(31,35,32,.22);--ky-turn-chip:rgba(255,255,255,.86);--ky-turn-chip-on:#1f2320;--ky-turn-chip-on-ink:#fff;${JUDGING_LIGHT};--ky-up-blk-a:#e9ece4;--ky-up-blk-b:#c9cdc3;--ky-up-blk-c:#a4aa9f;--ky-up-blk-roof:#f4f5f0;--ky-up-blk-line:rgba(40,46,42,.38);--ky-up-plate:rgba(47,109,176,.5);--ky-up-plate-line:#2f6db0}
|
|
9
|
-
@media (prefers-color-scheme:dark){:where(html:not([data-theme=light]) .ky-turn:not([data-theme=light])){--ky-cr-bed:#242a32;--ky-cr-empty:#4a535f;--ky-cr-gap:#050709;--ky-cr-conc:#2a3038;--ky-cr-dim:.82;--ky-up-roof:rgba(60,66,62,.6);--ky-up-roofline:rgba(200,206,200,.5);--ky-up-fascia:#505650;--ky-up-ivy:#3d6633;--ky-up-door:#6a4f33;--ky-up-gal:#2d2621;--ky-up-aisle:#8f7752;--ky-up-alcove:#7d5c36;--ky-up-purple:#43204f;--ky-up-clock:#cfcbc0;--ky-up-room:#6d675a;--ky-up-roomback:#58534a;--ky-up-ceiling:#8c8a82;--ky-up-railw:#d9d6cc;--ky-up-riser:#251f1b;--ky-up-slab:#6b6455;--ky-up-slabedge:#585143;--ky-up-seatc:#2f231c;--ky-up-seatb:#1c1411;--ky-up-dais:#7d5230;--ky-up-dais-side:#52361f;--ky-up-sbframe:#0c0f0d;--ky-up-sbedge:#7a847d;--ky-up-sbline:#8a928c;--ky-up-pole:#d6d4ca;--ky-up-white:#e8e6dc;--ky-up-wood:#a89873;--ky-up-leg:#8a928c;--ky-up-ground:#242823;--ky-up-cagepad:#8f969f;--ky-up-wall:#4d6b55;--ky-up-clay:#7d5231;--ky-up-cap:#c9d2cc;--ky-up-board:#8d928b;--ky-up-glass:rgba(150,200,240,.2);--ky-up-backboard:rgba(255,255,255,.34);--ky-up-outline:#e7e4d8;--ky-up-mesh:rgba(236,236,226,.62);--ky-up-netfill:rgba(255,255,255,.08);--ky-up-tape:#efede2;--ky-turn-ink:#ece8dc;--ky-turn-rule:rgba(236,232,220,.28);--ky-turn-chip:rgba(24,28,25,.82);--ky-turn-chip-on:#ece8dc;--ky-turn-chip-on-ink:#1f2320;${JUDGING_DARK};--ky-up-blk-a:#59626b;--ky-up-blk-b:#444b53;--ky-up-blk-c:#30363c;--ky-up-blk-roof:#69727b;--ky-up-blk-line:rgba(220,226,220,.3);--ky-up-plate:rgba(127,176,232,.45);--ky-up-plate-line:#7fb0e8}}
|
|
10
|
-
:where(html[data-theme=dark] .ky-turn,.ky-turn[data-theme=dark]){--ky-cr-bed:#242a32;--ky-cr-empty:#4a535f;--ky-cr-gap:#050709;--ky-cr-conc:#2a3038;--ky-cr-dim:.82;--ky-up-roof:rgba(60,66,62,.6);--ky-up-roofline:rgba(200,206,200,.5);--ky-up-fascia:#505650;--ky-up-ivy:#3d6633;--ky-up-door:#6a4f33;--ky-up-gal:#2d2621;--ky-up-aisle:#8f7752;--ky-up-alcove:#7d5c36;--ky-up-purple:#43204f;--ky-up-clock:#cfcbc0;--ky-up-room:#6d675a;--ky-up-roomback:#58534a;--ky-up-ceiling:#8c8a82;--ky-up-railw:#d9d6cc;--ky-up-riser:#251f1b;--ky-up-slab:#6b6455;--ky-up-slabedge:#585143;--ky-up-seatc:#2f231c;--ky-up-seatb:#1c1411;--ky-up-dais:#7d5230;--ky-up-dais-side:#52361f;--ky-up-sbframe:#0c0f0d;--ky-up-sbedge:#7a847d;--ky-up-sbline:#8a928c;--ky-up-pole:#d6d4ca;--ky-up-white:#e8e6dc;--ky-up-wood:#a89873;--ky-up-leg:#8a928c;--ky-up-ground:#242823;--ky-up-cagepad:#8f969f;--ky-up-wall:#4d6b55;--ky-up-clay:#7d5231;--ky-up-cap:#c9d2cc;--ky-up-board:#8d928b;--ky-up-glass:rgba(150,200,240,.2);--ky-up-backboard:rgba(255,255,255,.34);--ky-up-outline:#e7e4d8;--ky-up-mesh:rgba(236,236,226,.62);--ky-up-netfill:rgba(255,255,255,.08);--ky-up-tape:#efede2;--ky-turn-ink:#ece8dc;--ky-turn-rule:rgba(236,232,220,.28);--ky-turn-chip:rgba(24,28,25,.82);--ky-turn-chip-on:#ece8dc;--ky-turn-chip-on-ink:#1f2320;${JUDGING_DARK};--ky-up-blk-a:#59626b;--ky-up-blk-b:#444b53;--ky-up-blk-c:#30363c;--ky-up-blk-roof:#69727b;--ky-up-blk-line:rgba(220,226,220,.3);--ky-up-plate:rgba(127,176,232,.45);--ky-up-plate-line:#7fb0e8}
|
|
8
|
+
:where(.ky-turn){--ky-left:#2f6db0;--ky-right:#b5452c;--ky-cr-home:#b5452c;--ky-cr-away:#2f6db0;--ky-cr-bed:#4a525d;--ky-cr-empty:#7d8794;--ky-cr-gap:#14181d;--ky-cr-conc:#8c929b;--ky-cr-dim:1;--ky-up-roof:rgba(214,218,212,.6);--ky-up-roofline:rgba(40,46,42,.55);--ky-up-fascia:#9aa09a;--ky-up-ivy:#5b8a45;--ky-up-brick:#a8604a;--ky-up-canopy:rgba(232,235,230,.9);--ky-up-door:#8a6a46;--ky-up-window:rgba(150,200,240,.55);--ky-up-sash:#f2f0e6;--ky-up-banner:#26211d;--ky-up-bannerline:#c8b88a;--ky-up-room:#efe8d6;--ky-up-roomback:#d6cdb9;--ky-up-ceiling:#dedcd5;--ky-up-railw:#fbfaf6;--ky-up-wainline:#6b4a2a;--ky-up-riser:#3f342c;--ky-up-slab:#d8cfba;--ky-up-slabedge:#c2b69c;--ky-up-seatc:#46342a;--ky-up-seatb:#2d211b;--ky-up-dais:#a0683a;--ky-up-dais-side:#6a4326;--ky-up-shrine:#c9b48f;--ky-up-shrine-side:#8f7a55;--ky-up-gal:#4d4037;--ky-up-aisle:#dcc196;--ky-up-panel:rgba(95,58,22,.3);--ky-up-alcove:#b58a52;--ky-up-purple:#5b2a6e;--ky-up-clock:#ffffff;--ky-up-rail:#3a2c1f;--ky-up-matedge:#2a2a26;--ky-up-sbframe:#1a1f1c;--ky-up-sbedge:#5b645e;--ky-up-sbline:#59615b;--ky-up-pole:#e9e7de;--ky-up-white:#f6f4ec;--ky-up-yellow:#f2c230;--ky-up-red:#c8372d;--ky-up-orange:#f26a1b;--ky-up-wood:#e3d4b4;--ky-up-leg:#474e49;--ky-up-pad:#2f6db0;--ky-up-cagepad:#2a2d32;--ky-up-table:#18243f;--ky-up-foot:rgba(0,0,0,.25);--ky-up-ground:#d9d5c7;--ky-up-wall:#2f4a36;--ky-up-clay:#a8703f;--ky-up-cap:#1d2a22;--ky-up-board:#ece9df;--ky-up-glass:rgba(138,190,232,.26);--ky-up-backboard:rgba(255,255,255,.88);--ky-up-outline:#f2f0e6;--ky-up-rim:#e8591a;--ky-up-mesh:rgba(24,30,27,.7);--ky-up-netfill:rgba(255,255,255,.2);--ky-up-tape:#fbfaf4;--ky-turn-bg:transparent;--ky-turn-ink:#1f2320;--ky-turn-rule:rgba(31,35,32,.22);--ky-turn-chip:rgba(255,255,255,.86);--ky-turn-chip-on:#1f2320;--ky-turn-chip-on-ink:#fff;${JUDGING_LIGHT};--ky-up-blk-a:#e9ece4;--ky-up-blk-b:#c9cdc3;--ky-up-blk-c:#a4aa9f;--ky-up-blk-roof:#f4f5f0;--ky-up-blk-line:rgba(40,46,42,.38);--ky-up-plate:rgba(47,109,176,.5);--ky-up-plate-line:#2f6db0}
|
|
9
|
+
@media (prefers-color-scheme:dark){:where(html:not([data-theme=light]) .ky-turn:not([data-theme=light])){--ky-cr-bed:#242a32;--ky-cr-empty:#4a535f;--ky-cr-gap:#050709;--ky-cr-conc:#2a3038;--ky-cr-dim:.82;--ky-up-roof:rgba(60,66,62,.6);--ky-up-roofline:rgba(200,206,200,.5);--ky-up-fascia:#505650;--ky-up-ivy:#3d6633;--ky-up-brick:#7a4434;--ky-up-canopy:rgba(78,84,80,.9);--ky-up-door:#6a4f33;--ky-up-gal:#2d2621;--ky-up-aisle:#8f7752;--ky-up-alcove:#7d5c36;--ky-up-purple:#43204f;--ky-up-clock:#cfcbc0;--ky-up-room:#6d675a;--ky-up-roomback:#58534a;--ky-up-ceiling:#8c8a82;--ky-up-railw:#d9d6cc;--ky-up-riser:#251f1b;--ky-up-slab:#6b6455;--ky-up-slabedge:#585143;--ky-up-seatc:#2f231c;--ky-up-seatb:#1c1411;--ky-up-dais:#7d5230;--ky-up-dais-side:#52361f;--ky-up-sbframe:#0c0f0d;--ky-up-sbedge:#7a847d;--ky-up-sbline:#8a928c;--ky-up-pole:#d6d4ca;--ky-up-white:#e8e6dc;--ky-up-wood:#a89873;--ky-up-leg:#8a928c;--ky-up-ground:#242823;--ky-up-cagepad:#8f969f;--ky-up-wall:#4d6b55;--ky-up-clay:#7d5231;--ky-up-cap:#c9d2cc;--ky-up-board:#8d928b;--ky-up-glass:rgba(150,200,240,.2);--ky-up-backboard:rgba(255,255,255,.34);--ky-up-outline:#e7e4d8;--ky-up-mesh:rgba(236,236,226,.62);--ky-up-netfill:rgba(255,255,255,.08);--ky-up-tape:#efede2;--ky-turn-ink:#ece8dc;--ky-turn-rule:rgba(236,232,220,.28);--ky-turn-chip:rgba(24,28,25,.82);--ky-turn-chip-on:#ece8dc;--ky-turn-chip-on-ink:#1f2320;${JUDGING_DARK};--ky-up-blk-a:#59626b;--ky-up-blk-b:#444b53;--ky-up-blk-c:#30363c;--ky-up-blk-roof:#69727b;--ky-up-blk-line:rgba(220,226,220,.3);--ky-up-plate:rgba(127,176,232,.45);--ky-up-plate-line:#7fb0e8}}
|
|
10
|
+
:where(html[data-theme=dark] .ky-turn,.ky-turn[data-theme=dark]){--ky-cr-bed:#242a32;--ky-cr-empty:#4a535f;--ky-cr-gap:#050709;--ky-cr-conc:#2a3038;--ky-cr-dim:.82;--ky-up-roof:rgba(60,66,62,.6);--ky-up-roofline:rgba(200,206,200,.5);--ky-up-fascia:#505650;--ky-up-ivy:#3d6633;--ky-up-brick:#7a4434;--ky-up-canopy:rgba(78,84,80,.9);--ky-up-door:#6a4f33;--ky-up-gal:#2d2621;--ky-up-aisle:#8f7752;--ky-up-alcove:#7d5c36;--ky-up-purple:#43204f;--ky-up-clock:#cfcbc0;--ky-up-room:#6d675a;--ky-up-roomback:#58534a;--ky-up-ceiling:#8c8a82;--ky-up-railw:#d9d6cc;--ky-up-riser:#251f1b;--ky-up-slab:#6b6455;--ky-up-slabedge:#585143;--ky-up-seatc:#2f231c;--ky-up-seatb:#1c1411;--ky-up-dais:#7d5230;--ky-up-dais-side:#52361f;--ky-up-sbframe:#0c0f0d;--ky-up-sbedge:#7a847d;--ky-up-sbline:#8a928c;--ky-up-pole:#d6d4ca;--ky-up-white:#e8e6dc;--ky-up-wood:#a89873;--ky-up-leg:#8a928c;--ky-up-ground:#242823;--ky-up-cagepad:#8f969f;--ky-up-wall:#4d6b55;--ky-up-clay:#7d5231;--ky-up-cap:#c9d2cc;--ky-up-board:#8d928b;--ky-up-glass:rgba(150,200,240,.2);--ky-up-backboard:rgba(255,255,255,.34);--ky-up-outline:#e7e4d8;--ky-up-mesh:rgba(236,236,226,.62);--ky-up-netfill:rgba(255,255,255,.08);--ky-up-tape:#efede2;--ky-turn-ink:#ece8dc;--ky-turn-rule:rgba(236,232,220,.28);--ky-turn-chip:rgba(24,28,25,.82);--ky-turn-chip-on:#ece8dc;--ky-turn-chip-on-ink:#1f2320;${JUDGING_DARK};--ky-up-blk-a:#59626b;--ky-up-blk-b:#444b53;--ky-up-blk-c:#30363c;--ky-up-blk-roof:#69727b;--ky-up-blk-line:rgba(220,226,220,.3);--ky-up-plate:rgba(127,176,232,.45);--ky-up-plate-line:#7fb0e8}
|
|
11
11
|
.ky-turn{position:relative;display:block;width:100%;color:var(--ky-turn-ink);font-family:var(--ky-font,system-ui,-apple-system,"Segoe UI","Hiragino Sans","Noto Sans JP",sans-serif);background:var(--ky-turn-bg)}
|
|
12
12
|
.ky-turn-view{position:relative;isolation:isolate;width:100%;aspect-ratio:var(--ky-turn-ratio,16/10);min-height:260px;overflow:hidden;touch-action:pan-y;cursor:grab;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;border-radius:12px;outline-offset:2px}
|
|
13
13
|
.ky-turn[data-touch=turn] .ky-turn-view{touch-action:none}
|
|
@@ -68,6 +68,13 @@ export const KYOGIJO_TURN_STYLE = `
|
|
|
68
68
|
.ky-turn .u-fascia{fill:var(--ky-up-fascia)}
|
|
69
69
|
.ky-turn .u-shell{fill:var(--ky-up-fascia);stroke:var(--ky-up-roofline);stroke-width:.6}
|
|
70
70
|
.ky-turn .u-ivy{fill:var(--ky-up-ivy)}
|
|
71
|
+
.ky-turn .u-canopy{fill:var(--ky-up-canopy,rgba(232,235,230,.9))}
|
|
72
|
+
.ky-turn .u-brick{fill:var(--ky-up-brick,#a8604a)}
|
|
73
|
+
.ky-turn .u-rail{fill:var(--ky-up-fascia);stroke:var(--ky-up-roofline);stroke-width:.6}
|
|
74
|
+
.ky-turn .u-endtower{fill:var(--ky-up-fascia);stroke:var(--ky-up-roofline);stroke-width:.6}
|
|
75
|
+
.ky-turn .u-endtower-side{fill:color-mix(in srgb,var(--ky-up-fascia) 86%,#000);stroke:var(--ky-up-roofline);stroke-width:.6}
|
|
76
|
+
.ky-turn .u-endtower-board{fill:#141a20;stroke:var(--ky-up-roofline);stroke-width:.5}
|
|
77
|
+
.ky-turn .u-endtower-rows{fill:none;stroke:#7fb2ee;stroke-opacity:.45;stroke-width:.6}
|
|
71
78
|
/* The buildings round a district's venues (context.ts): three tones of wall by the way each faces, and a lighter roof. */
|
|
72
79
|
.ky-turn .u-block{stroke:var(--ky-up-blk-line);stroke-width:.5}
|
|
73
80
|
.ky-turn .u-block-a{fill:var(--ky-up-blk-a)}
|
|
@@ -90,6 +97,16 @@ export const KYOGIJO_TURN_STYLE = `
|
|
|
90
97
|
.ky-turn .u-signplate{fill:var(--ky-turn-bg);fill-opacity:.9;stroke:var(--ky-turn-rule);stroke-width:.5}
|
|
91
98
|
.ky-turn .u-sign{fill:var(--ky-turn-ink);font-family:var(--ky-font,system-ui,-apple-system,"Segoe UI","Hiragino Sans","Noto Sans JP",sans-serif);font-weight:600}
|
|
92
99
|
.ky-turn .u-mast{fill:var(--ky-up-fascia);stroke:var(--ky-up-roofline);stroke-width:.4}
|
|
100
|
+
.ky-turn .u-tower{fill:color-mix(in srgb,var(--ky-up-fascia) 70%,var(--ky-up-white));stroke:var(--ky-up-roofline);stroke-width:.4}
|
|
101
|
+
.ky-turn .u-tower-slit{fill:var(--ky-up-roofline);fill-opacity:.55}
|
|
102
|
+
.ky-turn .u-rib{fill:color-mix(in srgb,var(--ky-up-fascia) 40%,var(--ky-up-white));stroke:var(--ky-up-roofline);stroke-width:.5}
|
|
103
|
+
.ky-turn .u-bay{fill:color-mix(in srgb,var(--ky-up-fascia) 55%,var(--ky-up-white));stroke:none}
|
|
104
|
+
.ky-turn .u-dome{fill:color-mix(in srgb,var(--ky-up-fascia) 22%,var(--ky-up-white));stroke:var(--ky-up-roofline);stroke-width:.5;stroke-linejoin:round}
|
|
105
|
+
.ky-turn .u-glass{fill:#1b252d;fill-opacity:.8}
|
|
106
|
+
.ky-turn .u-tower-foot{fill:var(--ky-up-roofline);fill-opacity:.8}
|
|
107
|
+
.ky-turn .u-tower-cap{fill:color-mix(in srgb,var(--ky-up-fascia) 60%,var(--ky-up-white));stroke:var(--ky-up-roofline);stroke-width:.4}
|
|
108
|
+
.ky-turn .u-tower-glass{fill:#0b1a24;fill-opacity:.5}
|
|
109
|
+
.ky-turn .u-tower-cable{fill:var(--ky-up-roofline);fill-opacity:.7}
|
|
93
110
|
.ky-turn .u-skylight{fill:var(--ky-up-skylight,#a9c8da);fill-opacity:.9;stroke:var(--ky-up-roofline);stroke-width:.5}
|
|
94
111
|
.ky-turn .u-podium{fill:#000;fill-opacity:.16}
|
|
95
112
|
.ky-turn .u-ledge{fill:var(--ky-up-roofline)}
|
package/dist/venue.js
CHANGED
|
@@ -261,5 +261,7 @@ export function standsVenueOf(stands, crowd, o, v, lift) {
|
|
|
261
261
|
items.push({ id: "roof", kind: "roof", at: centre, height: topOf(planes), planes });
|
|
262
262
|
}
|
|
263
263
|
const r = stands.reach;
|
|
264
|
-
|
|
264
|
+
// Every roof is cut away from above and whole from the street (`Plane.cut`).
|
|
265
|
+
const cutItems = items.map((item) => (item.kind === "roof" ? { ...item, planes: item.planes.map((p) => ({ ...p, cut: true })) } : item));
|
|
266
|
+
return { items: cutItems, defs, reach: Math.max(r.left, r.right, r.top, r.bottom) + 6 };
|
|
265
267
|
}
|
package/dist/venue.real.d.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { type Pt, type RealShell, type StandRing } from "./crowd.ts";
|
|
2
|
-
import { type Plane, type Upright } from "./turn.kit.ts";
|
|
2
|
+
import { type Plane, type Upright, type V3 } from "./turn.kit.ts";
|
|
3
3
|
/** How far a lid rises from its edge towards the middle, and how far a saddle's high ends stand over its low sides, in feet (ours: the sources give a roof's kind, not its height). */
|
|
4
4
|
export declare const LID_RISE = 22;
|
|
5
5
|
export declare const SADDLE_RISE = 30;
|
|
6
|
+
/** How far a barrel vault's crown stands over its springing at the long sides, in feet (ours: the article says the roof looks like a Quonset hut, not how high it rises). */
|
|
7
|
+
export declare const BARREL_RISE = 34;
|
|
6
8
|
/** The saddle's share of its rise at a point (0 at the middle of a side, 1 at the middle of an end): half a saddle's way from one to the other, as a hyperbolic paraboloid (u squared less v squared) lies over the building's box. */
|
|
7
9
|
export declare function saddleAt(real: Pick<RealShell, "footprint">, [x, y]: Pt): number;
|
|
10
|
+
/** The barrel vault's share of its rise at a point (0 at the springing along each long side, 1 over the middle line): a round arch over the building's short axis, the quarter of a circle's rise at each step in from the side. */
|
|
11
|
+
export declare function barrelAt(real: Pick<RealShell, "footprint">, [, y]: Pt): number;
|
|
8
12
|
/** The height of the roof over a point of the building's edge, above the surface, in feet. */
|
|
9
13
|
export declare const roofAt: (real: RealShell, p: Pt) => number;
|
|
14
|
+
/** The height of the wall of a building under canopies at a point of its rim: where a canopy is over it, the canopy's back edge, which the wall carries up to (the outside of Lumen Field's roofs is one curved face to the ground); elsewhere the rim's own height. */
|
|
15
|
+
export declare function wallAt(real: RealShell, p: Pt): number;
|
|
16
|
+
/**
|
|
17
|
+
* A tower that leans and curves: a shaft of horizontal sections, a square of rising width at its foot narrowing to its top, that leans over the building. Its foot is at the building's rim (where the mapped axis crosses it, `rim` feet
|
|
18
|
+
* from the top along the axis), its front, the steep face that looks at the building, runs from there to the top, and its back, the face that looks away and up, sweeps down from the top in a long curve that flattens to the ground
|
|
19
|
+
* far behind the foot. On the top stands the observatory, a dark block with a band of glass, and, with `cables`, thin lines run from it to the roof. Every face of a ring is a trapezoid on a plane through its corners, so the faces
|
|
20
|
+
* meet along their edges. The foot, the top and the height are the sources' (the map's funicular line and the article's inclination); the curve, the widths, the slits and the observatory are ours.
|
|
21
|
+
*/
|
|
22
|
+
export declare function towerPlanes(tower: NonNullable<RealShell["tower"]>, z: number, cables?: V3[], rim?: number): Plane[];
|
|
10
23
|
/** The point where a ray from `from` first meets a polygon, or `undefined`. */
|
|
11
24
|
export declare function firstHit(poly: readonly Pt[], from: Pt, angle: number): Pt | undefined;
|
|
12
25
|
/** How tall the glazed concourse band over a podium is, in feet (ours). */
|
|
@@ -40,8 +53,39 @@ export declare const SKYLIGHT_WIDTH = 14;
|
|
|
40
53
|
export declare const SKYLIGHT_SHARE = 0.78;
|
|
41
54
|
/** How far a canopy's low edge, the field's side of it, stands under its high edge: the OpenStreetMap roof's `roof:height` is the rise, and the canopy rises to the back of the stands (ours: the sources do not say which way it slopes). */
|
|
42
55
|
export declare const CANOPY_NOTE = "low over the field, high over the back of the stands";
|
|
56
|
+
/** How many strips a canopy is cut into from the field's side to the back, so that a curved roof is a curve (ours: the drawing's pieces are flat). */
|
|
57
|
+
export declare const CANOPY_STRIPS = 3;
|
|
58
|
+
/** From this many rays round the middle on, a canopy is cut by every other one. */
|
|
59
|
+
export declare const CANOPY_FINE = 48;
|
|
60
|
+
/** The share of a canopy's rise at a share of the way from the field's side to the back: a straight slope, or for OpenStreetMap's `roof:shape=round` a convex arc, a quarter of a circle, steep at the field's edge and levelling over the back of the stands. */
|
|
61
|
+
export declare function canopyRiseAt(shape: string | undefined, t: number): number;
|
|
62
|
+
/** How wide the scoreboard on a tower's face is and how tall, as shares of the face, and how far it stands out from it, in feet (ours: the article says the scoreboard is vertical, not how large). */
|
|
63
|
+
export declare const TOWER_BOARD: {
|
|
64
|
+
readonly wide: 0.62;
|
|
65
|
+
readonly tall: 0.46;
|
|
66
|
+
readonly from: 0.55;
|
|
67
|
+
readonly out: 0.4;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* A tower standing apart from the bowl: a box on its outline, four faces and a flat top, that gives way to the eye as a wall does (a tall tower between the eye and the field is cut away, whole from above), with the scoreboard
|
|
71
|
+
* on the face towards the field, a dark panel high on it and divided into its rows of lamps.
|
|
72
|
+
*/
|
|
73
|
+
export declare function endTowerPlanes(tower: NonNullable<RealShell["towers"]>[number], index: number, lift: number, centre: Pt): Plane[];
|
|
43
74
|
/** How many rings of pieces an air-supported roof is drawn in, from the rim in to the crown (ours: the roof is smooth, the drawing is faceted). */
|
|
44
75
|
export declare const DOME_RINGS = 4;
|
|
76
|
+
/** How wide a rail girder is, how thick, how wide a column under it is, and how many columns stand under each rail, in feet (ours: the article says the roof runs on rails on the north and the south side, not what holds them up). */
|
|
77
|
+
export declare const RAIL: {
|
|
78
|
+
readonly wide: 12;
|
|
79
|
+
readonly thick: 16;
|
|
80
|
+
readonly column: 15;
|
|
81
|
+
readonly columns: 4;
|
|
82
|
+
readonly inset: 24;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* The rails a retractable ballpark roof runs on, along its north and south sides (the article: 128 wheels on rails there), as two girders at the roof's lowest height, each on a row of columns from the ground, and running
|
|
86
|
+
* on over the strip where the sections rest. The rails run the way the sections park, from the cover's middle to where they rest; a girder lies a little inside each side of the cover.
|
|
87
|
+
*/
|
|
88
|
+
export declare function panelRails(panels: NonNullable<RealShell["panels"]>, c: Pt, lift: number): Plane[];
|
|
45
89
|
/** The pod in the middle of a cable roof's opening, as a share of the opening's size, and how thick it is, in feet (ours: the article says the fabric gathers into a pod above the video board, not how large it is). */
|
|
46
90
|
export declare const POD: {
|
|
47
91
|
readonly share: 0.24;
|