@johnmorrisdotca/dougu-sports 0.10.0 → 0.12.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 +28 -0
- package/NOTICE.md +1 -1
- package/README.md +13 -5
- package/dist/emblems/ball/ball.index.js +2 -2
- package/dist/emblems/ball/ball.soccer.era.d.ts +22 -20
- package/dist/emblems/ball/ball.soccer.era.js +103 -64
- package/dist/emblems/emblem.descriptions.js +58 -10
- package/dist/emblems/emblem.figure.d.ts +7 -0
- package/dist/emblems/emblem.figure.js +19 -0
- package/dist/emblems/emblem.ids.d.ts +5 -5
- package/dist/emblems/emblem.ids.js +63 -3
- package/dist/emblems/emblem.lathe.d.ts +6 -0
- package/dist/emblems/emblem.lathe.js +13 -6
- package/dist/emblems/emblem.named.d.ts +25 -0
- package/dist/emblems/emblem.named.js +477 -0
- package/dist/emblems/emblem.registry.js +94 -0
- package/dist/emblems/trophy/americas-cup.d.ts +2 -0
- package/dist/emblems/trophy/americas-cup.js +25 -0
- package/dist/emblems/trophy/art-ross-trophy.d.ts +2 -0
- package/dist/emblems/trophy/art-ross-trophy.js +20 -0
- package/dist/emblems/trophy/ashes-urn.d.ts +2 -0
- package/dist/emblems/trophy/ashes-urn.js +22 -0
- package/dist/emblems/trophy/avco-world-trophy.d.ts +2 -0
- package/dist/emblems/trophy/avco-world-trophy.js +24 -0
- package/dist/emblems/trophy/ballon-dor.d.ts +2 -0
- package/dist/emblems/trophy/ballon-dor.js +14 -0
- package/dist/emblems/trophy/borg-warner-trophy.d.ts +2 -0
- package/dist/emblems/trophy/borg-warner-trophy.js +23 -0
- package/dist/emblems/trophy/calder-trophy.d.ts +2 -0
- package/dist/emblems/trophy/calder-trophy.js +30 -0
- package/dist/emblems/trophy/campbell-bowl.d.ts +2 -0
- package/dist/emblems/trophy/campbell-bowl.js +27 -0
- package/dist/emblems/trophy/champions-league-trophy.d.ts +2 -0
- package/dist/emblems/trophy/champions-league-trophy.js +18 -0
- package/dist/emblems/trophy/commissioners-trophy.d.ts +2 -0
- package/dist/emblems/trophy/commissioners-trophy.js +18 -0
- package/dist/emblems/trophy/conn-smythe-trophy.d.ts +2 -0
- package/dist/emblems/trophy/conn-smythe-trophy.js +26 -0
- package/dist/emblems/trophy/cricket-world-cup.d.ts +2 -0
- package/dist/emblems/trophy/cricket-world-cup.js +19 -0
- package/dist/emblems/trophy/cy-young-award.d.ts +2 -0
- package/dist/emblems/trophy/cy-young-award.js +20 -0
- package/dist/emblems/trophy/dfb-pokal.d.ts +2 -0
- package/dist/emblems/trophy/dfb-pokal.js +21 -0
- package/dist/emblems/trophy/fa-cup.d.ts +2 -0
- package/dist/emblems/trophy/fa-cup.js +21 -0
- package/dist/emblems/trophy/fifa-world-cup.d.ts +2 -0
- package/dist/emblems/trophy/fifa-world-cup.js +22 -0
- package/dist/emblems/trophy/gold-glove-award.d.ts +2 -0
- package/dist/emblems/trophy/gold-glove-award.js +24 -0
- package/dist/emblems/trophy/grey-cup.d.ts +2 -0
- package/dist/emblems/trophy/grey-cup.js +25 -0
- package/dist/emblems/trophy/hart-trophy.d.ts +2 -0
- package/dist/emblems/trophy/hart-trophy.js +23 -0
- package/dist/emblems/trophy/jack-adams-trophy.d.ts +2 -0
- package/dist/emblems/trophy/jack-adams-trophy.js +31 -0
- package/dist/emblems/trophy/jennings-trophy.d.ts +2 -0
- package/dist/emblems/trophy/jennings-trophy.js +31 -0
- package/dist/emblems/trophy/king-clancy-trophy.d.ts +2 -0
- package/dist/emblems/trophy/king-clancy-trophy.js +25 -0
- package/dist/emblems/trophy/lady-byng-trophy.d.ts +2 -0
- package/dist/emblems/trophy/lady-byng-trophy.js +27 -0
- package/dist/emblems/trophy/lamar-hunt-trophy.d.ts +2 -0
- package/dist/emblems/trophy/lamar-hunt-trophy.js +17 -0
- package/dist/emblems/trophy/larry-obrien-trophy.d.ts +2 -0
- package/dist/emblems/trophy/larry-obrien-trophy.js +18 -0
- package/dist/emblems/trophy/lester-patrick-trophy.d.ts +2 -0
- package/dist/emblems/trophy/lester-patrick-trophy.js +24 -0
- package/dist/emblems/trophy/lombardi-trophy.d.ts +2 -0
- package/dist/emblems/trophy/lombardi-trophy.js +12 -0
- package/dist/emblems/trophy/masterton-trophy.d.ts +2 -0
- package/dist/emblems/trophy/masterton-trophy.js +37 -0
- package/dist/emblems/trophy/mlb-mvp-award.d.ts +2 -0
- package/dist/emblems/trophy/mlb-mvp-award.js +19 -0
- package/dist/emblems/trophy/norris-trophy.d.ts +2 -0
- package/dist/emblems/trophy/norris-trophy.js +23 -0
- package/dist/emblems/trophy/obrien-cup.d.ts +2 -0
- package/dist/emblems/trophy/obrien-cup.js +32 -0
- package/dist/emblems/trophy/paterson-cup.d.ts +2 -0
- package/dist/emblems/trophy/paterson-cup.js +30 -0
- package/dist/emblems/trophy/presidents-trophy.d.ts +2 -0
- package/dist/emblems/trophy/presidents-trophy.js +23 -0
- package/dist/emblems/trophy/prince-of-wales-trophy.d.ts +2 -0
- package/dist/emblems/trophy/prince-of-wales-trophy.js +29 -0
- package/dist/emblems/trophy/rocket-richard-trophy.d.ts +2 -0
- package/dist/emblems/trophy/rocket-richard-trophy.js +21 -0
- package/dist/emblems/trophy/selke-trophy.d.ts +2 -0
- package/dist/emblems/trophy/selke-trophy.js +30 -0
- package/dist/emblems/trophy/silver-slugger-award.d.ts +2 -0
- package/dist/emblems/trophy/silver-slugger-award.js +19 -0
- package/dist/emblems/trophy/stanley-cup.d.ts +2 -0
- package/dist/emblems/trophy/stanley-cup.js +24 -0
- package/dist/emblems/trophy/ted-lindsay-award.d.ts +2 -0
- package/dist/emblems/trophy/ted-lindsay-award.js +22 -0
- package/dist/emblems/trophy/venus-rosewater-dish.d.ts +2 -0
- package/dist/emblems/trophy/venus-rosewater-dish.js +24 -0
- package/dist/emblems/trophy/vezina-trophy.d.ts +2 -0
- package/dist/emblems/trophy/vezina-trophy.js +27 -0
- package/dist/emblems/trophy/walter-cup.d.ts +2 -0
- package/dist/emblems/trophy/walter-cup.js +16 -0
- package/dist/emblems/trophy/webb-ellis-cup.d.ts +2 -0
- package/dist/emblems/trophy/webb-ellis-cup.js +23 -0
- package/dist/emblems/trophy/wimbledon-gentlemens-trophy.d.ts +2 -0
- package/dist/emblems/trophy/wimbledon-gentlemens-trophy.js +22 -0
- package/dist/emblems/trophy/wnba-championship-trophy.d.ts +2 -0
- package/dist/emblems/trophy/wnba-championship-trophy.js +18 -0
- package/dist/emblems/trophy/woodlawn-vase.d.ts +2 -0
- package/dist/emblems/trophy/woodlawn-vase.js +20 -0
- package/dist/emblems/trophy/world-series-mvp-trophy.d.ts +2 -0
- package/dist/emblems/trophy/world-series-mvp-trophy.js +18 -0
- package/dist/emblems-entry.d.ts +2 -0
- package/dist/emblems-entry.js +1 -0
- package/dist/index.d.ts +48 -1
- package/dist/index.js +48 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,34 @@ All notable changes to this project are written here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.12.0] - 2026-10-19
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **The README and the docs show the famous trophies.** A new picture of thirty-six named trophies with their names, a new page, `docs/famous-trophies.md` (what it is, a short example, what is drawn), the vintage balls picture remade for the era balls of 0.11.0, and a release-checklist line in `CONTRIBUTING.md` for a release that adds something to look at. `ONLY=<name> node scripts/screenshots.ts` takes one picture.
|
|
14
|
+
- **A trophy that stands for one real trophy is drawn as a very close likeness of it, and may carry its name.** The rule, the method and the tools are in `docs/likeness.md`: photographs are the reference, the proportions are measured on them and checked side by side at the same height, the drawing is our own vector and never a trace, and no drawing carries lettering, a logo, a league, team or sponsor mark or a real engraving. This replaces the earlier rule that no id or title may be a real trophy's name (`CONTRIBUTING.md`, `docs/references.md`, `test/emblem.test.ts`); the generic trophies (`trophy:hockey-cup` and the rest) stay as they are.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **`trophy:paterson-cup`**, the cup of the Pacific Coast Hockey Association (1912): a wide silver bowl with a straight band at the rim, two scrolled ear handles and a dark wooden base, measured on a 1912 photograph. 275 emblems.
|
|
19
|
+
- **Nineteen NHL trophies**, each a close likeness measured on a photograph (references and licences in `docs/likeness-sources.md`): `trophy:stanley-cup`, `trophy:hart-trophy`, `trophy:vezina-trophy`, `trophy:norris-trophy`, `trophy:calder-trophy`, `trophy:art-ross-trophy`, `trophy:conn-smythe-trophy`, `trophy:lady-byng-trophy`, `trophy:selke-trophy`, `trophy:jennings-trophy`, `trophy:masterton-trophy`, `trophy:king-clancy-trophy`, `trophy:jack-adams-trophy`, `trophy:presidents-trophy`, `trophy:prince-of-wales-trophy`, `trophy:campbell-bowl`, `trophy:rocket-richard-trophy`, `trophy:ted-lindsay-award` and `trophy:lester-patrick-trophy`. 294 emblems. Still to draw, for lack of a photograph: the Mark Messier Leadership Award, the Willie O'Ree Community Hero Award, the NHL Foundation Player Award and the General Manager of the Year award.
|
|
20
|
+
- **Fourteen more named trophies, from the trophy audit** (`docs/trophy-audit.md` lists every award spxn holds with its emblem and what is still missing): `trophy:lombardi-trophy`, `trophy:larry-obrien-trophy`, `trophy:commissioners-trophy`, `trophy:grey-cup`, `trophy:cy-young-award`, `trophy:mlb-mvp-award`, `trophy:gold-glove-award`, `trophy:silver-slugger-award`, `trophy:world-series-mvp-trophy`, `trophy:walter-cup`, `trophy:wnba-championship-trophy`, `trophy:lamar-hunt-trophy`, `trophy:avco-world-trophy` and `trophy:obrien-cup`. 308 emblems.
|
|
21
|
+
- **Thirteen of the world's most famous trophies**, each a likeness measured on a photograph: `trophy:fifa-world-cup`, `trophy:woodlawn-vase`, `trophy:borg-warner-trophy`, `trophy:fa-cup`, `trophy:americas-cup`, `trophy:cricket-world-cup`, `trophy:wimbledon-gentlemens-trophy`, `trophy:venus-rosewater-dish`, `trophy:ballon-dor`, `trophy:dfb-pokal`, `trophy:ashes-urn`, `trophy:webb-ellis-cup` and `trophy:champions-league-trophy`. 321 emblems. The Africa Cup of Nations and Ryder Cup trophies wait for a usable photograph (`docs/trophy-audit.md`).
|
|
22
|
+
- **A ring of poles can lie on a tilted ring** (`Poles.tilted`), as the poles of the Commissioner's Trophy do.
|
|
23
|
+
- **The lathe can stand a solid off the axis** (`Solid.at`: the distance from the axis and the angle): it goes round the axis with the turn, behind the body or in front of it (the two goblets of `trophy:masterton-trophy`, the legs of a figure), and **`Solid.turn`** turns a body with flat sides about its axis (a square base shows a flat face at -45). `src/emblems/emblem.figure.ts` builds the simplified skater of three trophies.
|
|
24
|
+
- **`NAMED_TROPHIES` and `namedTrophy(id)`** (`./emblems`): the facts of each trophy drawn as a likeness (name, sport, competition, what it honours, first awarded, what the drawing was measured on), with `docs/likeness-sources.md`.
|
|
25
|
+
- **`scripts/likeness.ts`**, for drawing a likeness: a labelled grid over a photograph, the half widths of its silhouette, and the photograph and the drawing side by side at one height.
|
|
26
|
+
|
|
27
|
+
## [0.11.0] - 2026-10-19
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- **Era soccer balls get neutral ids and new looks** the ten era balls move from year-and-style ids to neutral ones (`ball:soccer-retro-pentagons`, `-leaves`, `-rosette`, `-pinwheel`, `-kites`, `ball:soccer-14-panel-double-border`, `-8-panel-plain`, `-6-panel-bands`, `-6-panel-diamonds`, `-20-panel-dots`); **the ids published in 0.9.0 and 0.10.0 stay as aliases** (`EMBLEM_ALIASES`), so `ball:soccer-2006-propeller` and the rest still draw the ball that replaced them. The 14-panel ball has a double border (two black lines along each seam, two red inside each propeller), the 8-panel ball has plain white panels, the two 6-panel balls have a series of diamonds at each pole, and the three-colour pinwheel has a solid circle at its centre. Titles and descriptions (English and Japanese) now say what each ball shows.
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- `ball:soccer-retro-star`, a second 1980s-style soccer ball with a six-armed teal star on cream hexagons. 274 emblems.
|
|
36
|
+
|
|
9
37
|
## [0.10.0] - 2026-10-19
|
|
10
38
|
|
|
11
39
|
### Added
|
package/NOTICE.md
CHANGED
|
@@ -27,7 +27,7 @@ Each ball's `size.rule` names the rule; the table gives the document and where i
|
|
|
27
27
|
|
|
28
28
|
| Balls | Rulebook and rule | Read at |
|
|
29
29
|
| --- | --- | --- |
|
|
30
|
-
| `ball:soccer`, `ball:soccer-colour`, `ball:soccer-26`, `ball:soccer-18`, `ball:soccer-14`, `ball:soccer-12`, `ball:soccer-6`, `ball:soccer-orange`, `ball:soccer-26-orange`, `ball:soccer-18-orange`, `ball:soccer-14-orange`, `ball:soccer-12-orange`, `ball:soccer-6-orange`, `ball:soccer-yellow`, `ball:soccer-26-yellow`, `ball:soccer-18-yellow`, `ball:soccer-14-yellow`, `ball:soccer-12-yellow`, `ball:soccer-6-yellow`, `ball:soccer-1960-32-panel-leather`, `ball:soccer-
|
|
30
|
+
| `ball:soccer`, `ball:soccer-colour`, `ball:soccer-26`, `ball:soccer-18`, `ball:soccer-14`, `ball:soccer-12`, `ball:soccer-6`, `ball:soccer-orange`, `ball:soccer-26-orange`, `ball:soccer-18-orange`, `ball:soccer-14-orange`, `ball:soccer-12-orange`, `ball:soccer-6-orange`, `ball:soccer-yellow`, `ball:soccer-26-yellow`, `ball:soccer-18-yellow`, `ball:soccer-14-yellow`, `ball:soccer-12-yellow`, `ball:soccer-6-yellow`, `ball:soccer-1960-32-panel-leather`, `ball:soccer-retro-pentagons`, `ball:soccer-retro-leaves`, `ball:soccer-retro-rosette`, `ball:soccer-retro-pinwheel`, `ball:soccer-retro-kites`, `ball:soccer-14-panel-double-border`, `ball:soccer-8-panel-plain`, `ball:soccer-6-panel-bands`, `ball:soccer-6-panel-diamonds`, `ball:soccer-20-panel-dots`, `ball:soccer-training-high-vis`, `ball:soccer-stars-blue`, `ball:soccer-stars-red`, `ball:soccer-stars-night`, `ball:soccer-hexagons-cyan`, `ball:soccer-hexagons-magenta`, `ball:soccer-hexagons-lime`, `ball:soccer-flames-fire`, `ball:soccer-flames-ice`, `ball:soccer-flames-toxic`, `ball:soccer-chevrons-red`, `ball:soccer-chevrons-green`, `ball:soccer-chevrons-blue`, `ball:soccer-swirl-blue`, `ball:soccer-swirl-red`, `ball:soccer-swirl-teal`, `ball:soccer-metallic-gold`, `ball:soccer-metallic-silver`, `ball:soccer-metallic-cobalt` | IFAB Laws of the Game, Law 2 The Ball, section 2.1 Qualities and measurements | https://www.theifab.com/laws/latest/the-ball/ |
|
|
31
31
|
| `ball:futsal` | Futsal Laws of the Game 2025/26, Law 2 The Ball, section 1 Qualities and measurements (circumference 62-64 cm, 400-440 g, 0.6-0.9 atm, bounce 50-65 cm from 2 m) | https://digitalhub.fifa.com/m/20d52e6779b53321/original/FUTSAL-Laws-of-the-Game-2025-2026.pdf |
|
|
32
32
|
| `ball:beach-soccer` | Beach Soccer Laws of the Game 2024-25, Law 2 The Ball, section 1 Qualities and measurements (circumference 68-70 cm, 400-440 g, 0.4-0.6 atm); the 2021/22 edition has the same figures | https://www.the-aiff.com/media/uploads/2024/11/Beach-Soccer-Laws-of-the-Game-2024-25.pdf |
|
|
33
33
|
| `ball:soccer-1870-hand-stitched`, `ball:soccer-1900-laced`, `ball:soccer-1930-18-panel`, `ball:soccer-1950-12-panel` | Laws of the Game of the Football Association, revised 1872: a sphere 27 to 28 inches round (no mass given: the early figures could not be confirmed in a primary text); read in Wikipedia's account of the 1872 revision (secondary) | https://en.wikipedia.org/wiki/Ball_(association_football) |
|
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
|
|
|
23
23
|
<p align="center">
|
|
24
24
|
<picture>
|
|
25
25
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/vintage-desk-dark.webp">
|
|
26
|
-
<img alt="Eighteen more balls on a warm sunburst, in two rows of nine: five vintage leather soccer balls (hand-stitched, laced, 18 strips, 12 panels, 32 panels), a lemon-peel baseball, two baseballs stitched in two colours and an aged baseball, then nine soccer balls in the style of an era,
|
|
26
|
+
<img alt="Eighteen more balls on a warm sunburst, in two rows of nine: five vintage leather soccer balls (hand-stitched, laced, 18 strips, 12 panels, 32 panels), a lemon-peel baseball, two baseballs stitched in two colours and an aged baseball, then nine soccer balls in the style of an era, with patterns of pentagons, leaves, a rosette, a star, a pinwheel and kites, a double border and plain white panels." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/vintage-desk-light.webp" width="760">
|
|
27
27
|
</picture>
|
|
28
28
|
</p>
|
|
29
29
|
|
|
@@ -34,6 +34,13 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
|
|
|
34
34
|
</picture>
|
|
35
35
|
</p>
|
|
36
36
|
|
|
37
|
+
<p align="center">
|
|
38
|
+
<picture>
|
|
39
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/famous-desk-dark.webp">
|
|
40
|
+
<img alt="Thirty-six famous trophies on royal purple, each with its name under it: the FIFA World Cup, the Stanley Cup, the Lombardi Trophy, the Larry O'Brien trophy, the Grey Cup, the FA Cup, the America's Cup, the Ashes urn and the Webb Ellis Cup among them, then the baseball awards and the NHL's Hart, Vezina, Norris and Calder trophies." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/famous-desk-light.webp" width="760">
|
|
41
|
+
</picture>
|
|
42
|
+
</p>
|
|
43
|
+
|
|
37
44
|
<p align="center">
|
|
38
45
|
<picture>
|
|
39
46
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/gear-desk-dark.webp">
|
|
@@ -52,7 +59,7 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
|
|
|
52
59
|
</tr>
|
|
53
60
|
</table>
|
|
54
61
|
|
|
55
|
-
> **Status: preview.**
|
|
62
|
+
> **Status: preview.** 321 emblems: 71 trophies, 6 awards, 6 medals, 4 crests, a pictogram for each of the 38 sports, 117 balls and implements drawn in 3D, 8 printed pucks ([docs/pucks.md](./docs/pucks.md)), 70 pieces of gear (among them the Japanese sports and budo, [docs/japanese-sports.md](./docs/japanese-sports.md)) and a championship pennant; [docs/layout.md](./docs/layout.md) says where each goes. All of it is drawn for this package: no art is copied from another project.
|
|
56
63
|
|
|
57
64
|
## In 30 seconds
|
|
58
65
|
|
|
@@ -80,7 +87,7 @@ Put the string in a page (`element.innerHTML = svg`), write it to a file, or sen
|
|
|
80
87
|
|
|
81
88
|
## Features
|
|
82
89
|
|
|
83
|
-
- **Equipment first (道具 is the word for it)**:
|
|
90
|
+
- **Equipment first (道具 is the word for it)**: 117 balls and implements drawn in 3D, from the 32-panel soccer ball to the 26, 18, 14, 12 and 6 panel constructions, vintage leather balls, era-style and shop-wall soccer balls, baseballs of other threads, volleyballs in national colours ([docs/vintage-balls.md](./docs/vintage-balls.md)), futsal, beach soccer and the pucks and stones, each with its official size, 8 printed pucks (a flag, a leaf, stars and stripes, a player's number, a made-up signature, your own picture: [docs/pucks.md](./docs/pucks.md)), and 42 pieces of gear (sticks, rackets, helmets, skates, nets, and the Japanese budo kit) drawn to match; see [docs/gallery.md](./docs/gallery.md).
|
|
84
91
|
- **Three styles** for every emblem: `metal` (polished metal: a gradient, a highlight and a soft rim of reflected light, edged in a darker tone of its own metal, with no heavy outline), `line` (one clean outline in the page's text colour, made to read at 14 pixels) and `color` (flat fills); see [Theming](#theming).
|
|
85
92
|
- **Size, tint, accent and theme** as options: a tint recolours the main part (a medal's metal, a crest's colour, a ball's patches), an accent the second colour (a ribbon, a crest's band, the pennants), a theme sets the ink for light, dark or either.
|
|
86
93
|
- **Turning**: `emblemFrame` and `ballFrame` return the emblem at an angle, in plain SVG: every emblem turns, a ball rolls, a cup keeps its outline and moves its light, and everything flat (gear, a bat, a crown, a sport's icon) flips like a coin; `bindTurn` lets a drag, the arrow keys or an auto-turn do the turning in a page; see [docs/turning.md](./docs/turning.md).
|
|
@@ -90,6 +97,7 @@ Put the string in a page (`element.innerHTML = svg`), write it to a file, or sen
|
|
|
90
97
|
- **As an image, a sprite, a podium or a case**: `emblemDataUri` for an `<img>`, a CSS background or a canvas, `emblemSprite` to draw one emblem fifty times cheaply, `sportEquipment` for what a sport is played with, and `podium` and `awardCase` for results and trophy shelves; see [docs/compose.md](./docs/compose.md).
|
|
91
98
|
- **One module per item**, so a bundler takes only what is imported; see [Use it in your project](#use-it-in-your-project).
|
|
92
99
|
- **Short names and helpers**: `"cup"` is `"trophy:cup"`, `"trophy:cup/line"` is the line style, and `crest`, `medal`, `sportIcon` and `pennant` draw a team's crest, a medal, a sport's icon and a championship pennant.
|
|
100
|
+
- **Named trophies**: a trophy that stands for one real trophy is drawn as a very close likeness of it, from photographs that were measured and never copied, and carries its name in its id (`trophy:paterson-cup`); `NAMED_TROPHIES` and `namedTrophy(id)` give what it honours, when it was first given and what the drawing was measured on, and no drawing carries lettering, a logo or a mark; see [famous trophies](./docs/famous-trophies.md) and [docs/likeness.md](./docs/likeness.md).
|
|
93
101
|
- **Typed ids**: `EmblemId` is a union of `award:*`, `trophy:*`, `medal:*`, `crest:*`, `ball:*`, `gear:*`, `sport:*` and `pennant:*` ids.
|
|
94
102
|
- **Japanese sports and budō** (道具 is the name): a sumo cup, a championship banner, and the war fan, belt, bamboo sword, kendo helmet, judo and karate suits, the white and blue judo suit flat, folded and seen from behind with its back number ([docs/judogi-back.md](./docs/judogi-back.md)), the belts of every grade and six pictures of how the belt is tied ([docs/obi-steps.md](./docs/obi-steps.md)), long bow and arrow, with Japanese names that are the governing bodies' words; see [docs/japanese-sports.md](./docs/japanese-sports.md).
|
|
95
103
|
- **Made-up logos, experimental** (`@johnmorrisdotca/dougu-sports/brands`; a draft, the designs will change and it is not a supported feature yet): twelve fictional makers of balls and gear and ten fictional teams, each a bold geometric mark that stands alone (the name is optional), in colour or one colour, light and dark, with a note on the real brand it is nearest to and how it differs; a maker's mark prints on a baseball, a softball or a classic soccer ball, and a group places any logo inside your own drawing; see [docs/brands.md](./docs/brands.md).
|
|
@@ -418,7 +426,7 @@ An emblem is a small object: `id`, `en` and `ja` names, a `source` (who drew it)
|
|
|
418
426
|
| `trophy` | Twenty-four trophies: ten that stand for a league's cup in a generic form (a tall banded cup, a ring of pennants round a baseball, a football on a stand, a ball over a net, a wide two-handled bowl, a globe held up by spiral figures, a gilt dish, a lidded cup with a pineapple, an urn, a gilded cup), plain cups, bowls and dishes, a plaque, a belt, a wreath, a rosette, a championship ring, a rafter banner, a phoenix-handled sumo cup and a championship banner | `src/emblems/trophy/` |
|
|
419
427
|
| `medal` | Gold, silver and bronze medals on a ribbon of five stripes, and a badge for each of the first three places | `src/emblems/medal/` |
|
|
420
428
|
| `crest` | Four generic crests, tinted by a team's colours, with its letters | `src/emblems/crest/` |
|
|
421
|
-
| `ball` |
|
|
429
|
+
| `ball` | 117 balls and implements, in 3D, each with its official size: soccer (in 32, 26, 18, 14, 12 and 6 panels, in three colourways, with futsal and beach soccer; [docs/soccer-balls.md](./docs/soccer-balls.md); and vintage leather, era-style and patterned balls, [docs/vintage-balls.md](./docs/vintage-balls.md)), basketball, baseball, tennis, rugby, the footballs, golf, the puck, the curling stone and the rest | `src/emblems/ball/` |
|
|
422
430
|
| `puck` | 8 printed pucks: the same puck with a print on its top face that turns with it (a flag and CANADA, a red leaf, stars and stripes, a player's name and number, a made-up signature, a souvenir), and a `face` option for any picture, emblem or flag code; [docs/pucks.md](./docs/pucks.md) | `src/emblems/ball/ball.puck.print.ts` |
|
|
423
431
|
| `gear` | 67 pieces of equipment: sticks, rackets, skates, a glove, a helmet, nets and posts, a javelin, starting blocks, and for the Japanese sports a war fan, a sumo belt, a bamboo sword, a kendo helmet, the judo suit (white and blue, laid flat and folded, and from behind with its back number), the belts of every grade (white to red, the red-and-white belt, the women's black belt and the two-colour belts) and the six steps of tying one, a long bow, an arrow and a karate suit | `src/emblems/gear/` |
|
|
424
432
|
| `sport` | One pictogram for each of the thirty-eight sports | `src/emblems/sport/` |
|
|
@@ -637,7 +645,7 @@ Bug reports and ideas go in the [issues](https://github.com/johnmorrisdotca/doug
|
|
|
637
645
|
|
|
638
646
|
## Changes
|
|
639
647
|
|
|
640
|
-
See [CHANGELOG.md](./CHANGELOG.md). 0.10.0 adds a standalone ribbon and the nets and posts of sepak takraw, netball and teqball from their rulebooks' sizes (273 emblems); 0.9.0 lets the baseball, the softball and the classic soccer balls be painted and printed: solid and two-tone colours, a logo of your own wrapped onto the ball, stamped text, an original cursive word and a small mark, all turning with the ball ([docs/custom-balls.md](./docs/custom-balls.md)); 0.8.0 makes `bindTurn` light: it takes an emblem object and then needs no registry, so a turnable cup is about 9.4 kB gzipped instead of about 81 kB, and an id loads the registry on demand; 0.7.3 turns the build, docs and picture scripts, the browser tests and the demo's source from JavaScript into TypeScript, with no change to the package; 0.7.2 makes every docs page single-language (a page in Japanese beside each page that had Japanese words in it, and a test that holds them apart), with no change to the pictures; 0.7.1 puts real countries (Canada, Japan) in the crest and puck examples in place of made-up teams, with no change to the code; 0.7.0 gives the national volleyballs layouts that tell them apart (Japan a crimson band, Poland white above and red below, the USA a navy field), strengthens the 2010-style grooved soccer ball, and adds six pictures of how the judo belt is tied, `gear:obi-step-1` to `gear:obi-step-6` (269 emblems: [docs/obi-steps.md](./docs/obi-steps.md)); 0.6.0 gives the judo suit and the karate suit their sleeves (a judogi has no short ones: they reach the wrist) and adds the judogi seen from behind with the IJF-style back number, a family name and a country code on a patch, with a `backnumber` option (269 emblems: [docs/judogi-back.md](./docs/judogi-back.md)); 0.5.1 redraws the judo suit, the belt and the football pictograms and adds the blue and folded suits and the belts of every grade (261 emblems: [docs/japanese-sports.md](./docs/japanese-sports.md)); 0.5.0 adds fifty balls: vintage leather soccer balls, era-style and shop-wall soccer balls, baseballs of other threads and volleyballs in national colours, with a `colors` option (244 emblems: [docs/vintage-balls.md](./docs/vintage-balls.md)); 0.4.0 adds eight printed pucks and a `face` option (194 emblems: [docs/pucks.md](./docs/pucks.md)); 0.3.0 adds nineteen soccer balls (26, 18, 14, 12 and 6 panels, winter orange and high-visibility yellow, futsal and beach soccer: 186 emblems); 0.2.1 draws every ball and implement to the rulebook's proportions; 0.2.0 is 167 emblems, every one drawn here, with the Japanese sports, engraving, a turn for every emblem and the compose helpers; 0.1.0 brought the first full set of 148; 0.0.1 was the first preview.
|
|
648
|
+
See [CHANGELOG.md](./CHANGELOG.md). 0.12.0 adds forty-seven named trophies, each a close likeness measured on a photograph (321 emblems); 0.11.0 gives the era soccer balls neutral ids (the old ones stay as aliases), new looks and a second 1980s ball (274 emblems); 0.10.0 adds a standalone ribbon and the nets and posts of sepak takraw, netball and teqball from their rulebooks' sizes (273 emblems); 0.9.0 lets the baseball, the softball and the classic soccer balls be painted and printed: solid and two-tone colours, a logo of your own wrapped onto the ball, stamped text, an original cursive word and a small mark, all turning with the ball ([docs/custom-balls.md](./docs/custom-balls.md)); 0.8.0 makes `bindTurn` light: it takes an emblem object and then needs no registry, so a turnable cup is about 9.4 kB gzipped instead of about 81 kB, and an id loads the registry on demand; 0.7.3 turns the build, docs and picture scripts, the browser tests and the demo's source from JavaScript into TypeScript, with no change to the package; 0.7.2 makes every docs page single-language (a page in Japanese beside each page that had Japanese words in it, and a test that holds them apart), with no change to the pictures; 0.7.1 puts real countries (Canada, Japan) in the crest and puck examples in place of made-up teams, with no change to the code; 0.7.0 gives the national volleyballs layouts that tell them apart (Japan a crimson band, Poland white above and red below, the USA a navy field), strengthens the 2010-style grooved soccer ball, and adds six pictures of how the judo belt is tied, `gear:obi-step-1` to `gear:obi-step-6` (269 emblems: [docs/obi-steps.md](./docs/obi-steps.md)); 0.6.0 gives the judo suit and the karate suit their sleeves (a judogi has no short ones: they reach the wrist) and adds the judogi seen from behind with the IJF-style back number, a family name and a country code on a patch, with a `backnumber` option (269 emblems: [docs/judogi-back.md](./docs/judogi-back.md)); 0.5.1 redraws the judo suit, the belt and the football pictograms and adds the blue and folded suits and the belts of every grade (261 emblems: [docs/japanese-sports.md](./docs/japanese-sports.md)); 0.5.0 adds fifty balls: vintage leather soccer balls, era-style and shop-wall soccer balls, baseballs of other threads and volleyballs in national colours, with a `colors` option (244 emblems: [docs/vintage-balls.md](./docs/vintage-balls.md)); 0.4.0 adds eight printed pucks and a `face` option (194 emblems: [docs/pucks.md](./docs/pucks.md)); 0.3.0 adds nineteen soccer balls (26, 18, 14, 12 and 6 panels, winter orange and high-visibility yellow, futsal and beach soccer: 186 emblems); 0.2.1 draws every ball and implement to the rulebook's proportions; 0.2.0 is 167 emblems, every one drawn here, with the Japanese sports, engraving, a turn for every emblem and the compose helpers; 0.1.0 brought the first full set of 148; 0.0.1 was the first preview.
|
|
641
649
|
|
|
642
650
|
## Credits
|
|
643
651
|
|
|
@@ -26,7 +26,7 @@ import { BALL_LACROSSE, BALL_RACQUETBALL, BALL_TABLE_TENNIS, BALL_SHOT } from ".
|
|
|
26
26
|
import { BALL_SOCCER_26, BALL_SOCCER_18, BALL_SOCCER_14, BALL_SOCCER_12, BALL_SOCCER_6, BALL_SOCCER_26_ORANGE, BALL_SOCCER_18_ORANGE, BALL_SOCCER_14_ORANGE, BALL_SOCCER_12_ORANGE, BALL_SOCCER_6_ORANGE, BALL_SOCCER_26_YELLOW, BALL_SOCCER_18_YELLOW, BALL_SOCCER_14_YELLOW, BALL_SOCCER_12_YELLOW, BALL_SOCCER_6_YELLOW } from "./ball.soccer.panels.js";
|
|
27
27
|
import { BALL_FUTSAL, BALL_BEACH_SOCCER } from "./ball.soccer.indoor.js";
|
|
28
28
|
import { BALL_SOCCER_1870_HAND_STITCHED, BALL_SOCCER_1900_LACED, BALL_SOCCER_1930_18_PANEL, BALL_SOCCER_1950_12_PANEL, BALL_SOCCER_1960_32_PANEL_LEATHER } from "./ball.soccer.vintage.js";
|
|
29
|
-
import {
|
|
29
|
+
import { BALL_SOCCER_RETRO_PENTAGONS, BALL_SOCCER_RETRO_LEAVES, BALL_SOCCER_RETRO_ROSETTE, BALL_SOCCER_RETRO_STAR, BALL_SOCCER_RETRO_PINWHEEL, BALL_SOCCER_RETRO_KITES, BALL_SOCCER_14_PANEL_DOUBLE_BORDER, BALL_SOCCER_8_PANEL_PLAIN, BALL_SOCCER_6_PANEL_BANDS, BALL_SOCCER_6_PANEL_DIAMONDS, BALL_SOCCER_20_PANEL_DOTS, BALL_SOCCER_TRAINING_HIGH_VIS } from "./ball.soccer.era.js";
|
|
30
30
|
import { BALL_SOCCER_STARS_BLUE, BALL_SOCCER_STARS_RED, BALL_SOCCER_STARS_NIGHT, BALL_SOCCER_HEXAGONS_CYAN, BALL_SOCCER_HEXAGONS_MAGENTA, BALL_SOCCER_HEXAGONS_LIME, BALL_SOCCER_FLAMES_FIRE, BALL_SOCCER_FLAMES_ICE, BALL_SOCCER_FLAMES_TOXIC, BALL_SOCCER_CHEVRONS_RED, BALL_SOCCER_CHEVRONS_GREEN, BALL_SOCCER_CHEVRONS_BLUE, BALL_SOCCER_SWIRL_BLUE, BALL_SOCCER_SWIRL_RED, BALL_SOCCER_SWIRL_TEAL, BALL_SOCCER_METALLIC_GOLD, BALL_SOCCER_METALLIC_SILVER, BALL_SOCCER_METALLIC_COBALT } from "./ball.soccer.store.js";
|
|
31
31
|
import { BALL_BASEBALL_LEMON_PEEL, BALL_BASEBALL_RED_BLUE, BALL_BASEBALL_BLACK_RED, BALL_BASEBALL_VINTAGE_LEATHER, BALL_SOFTBALL_11_OPTIC } from "./ball.baseball.vintage.js";
|
|
32
32
|
import { BALL_VOLLEYBALL_COLOURS, BALL_VOLLEYBALL_BRAZIL, BALL_VOLLEYBALL_JAPAN, BALL_VOLLEYBALL_CANADA, BALL_VOLLEYBALL_USA, BALL_VOLLEYBALL_ITALY, BALL_VOLLEYBALL_POLAND, BALL_VOLLEYBALL_FRANCE, BALL_VOLLEYBALL_SERBIA, BALL_VOLLEYBALL_NETHERLANDS, BALL_VOLLEYBALL_GERMANY } from "./ball.volleyball.flag.js";
|
|
@@ -36,7 +36,7 @@ import { BALL_TEQBALL } from "./ball.teqball.js";
|
|
|
36
36
|
import { BALL_VOLLEYBALL, BALL_VOLLEYBALL_8, BALL_BEACH_VOLLEYBALL } from "./ball.volleyball.js";
|
|
37
37
|
import { BALL_WATER_POLO } from "./ball.waterpolo.js";
|
|
38
38
|
/** Every ball, in the order a gallery shows them. */
|
|
39
|
-
export const BALLS = [BALL_SOCCER, BALL_SOCCER_COLOUR, BALL_SOCCER_26, BALL_SOCCER_18, BALL_SOCCER_14, BALL_SOCCER_12, BALL_SOCCER_6, BALL_SOCCER_ORANGE, BALL_SOCCER_26_ORANGE, BALL_SOCCER_18_ORANGE, BALL_SOCCER_14_ORANGE, BALL_SOCCER_12_ORANGE, BALL_SOCCER_6_ORANGE, BALL_SOCCER_YELLOW, BALL_SOCCER_26_YELLOW, BALL_SOCCER_18_YELLOW, BALL_SOCCER_14_YELLOW, BALL_SOCCER_12_YELLOW, BALL_SOCCER_6_YELLOW, BALL_FUTSAL, BALL_BEACH_SOCCER, BALL_SOCCER_1870_HAND_STITCHED, BALL_SOCCER_1900_LACED, BALL_SOCCER_1930_18_PANEL, BALL_SOCCER_1950_12_PANEL, BALL_SOCCER_1960_32_PANEL_LEATHER,
|
|
39
|
+
export const BALLS = [BALL_SOCCER, BALL_SOCCER_COLOUR, BALL_SOCCER_26, BALL_SOCCER_18, BALL_SOCCER_14, BALL_SOCCER_12, BALL_SOCCER_6, BALL_SOCCER_ORANGE, BALL_SOCCER_26_ORANGE, BALL_SOCCER_18_ORANGE, BALL_SOCCER_14_ORANGE, BALL_SOCCER_12_ORANGE, BALL_SOCCER_6_ORANGE, BALL_SOCCER_YELLOW, BALL_SOCCER_26_YELLOW, BALL_SOCCER_18_YELLOW, BALL_SOCCER_14_YELLOW, BALL_SOCCER_12_YELLOW, BALL_SOCCER_6_YELLOW, BALL_FUTSAL, BALL_BEACH_SOCCER, BALL_SOCCER_1870_HAND_STITCHED, BALL_SOCCER_1900_LACED, BALL_SOCCER_1930_18_PANEL, BALL_SOCCER_1950_12_PANEL, BALL_SOCCER_1960_32_PANEL_LEATHER, BALL_SOCCER_RETRO_PENTAGONS, BALL_SOCCER_RETRO_LEAVES, BALL_SOCCER_RETRO_ROSETTE, BALL_SOCCER_RETRO_STAR, BALL_SOCCER_RETRO_PINWHEEL, BALL_SOCCER_RETRO_KITES, BALL_SOCCER_14_PANEL_DOUBLE_BORDER, BALL_SOCCER_8_PANEL_PLAIN, BALL_SOCCER_6_PANEL_BANDS, BALL_SOCCER_6_PANEL_DIAMONDS, BALL_SOCCER_20_PANEL_DOTS, BALL_SOCCER_TRAINING_HIGH_VIS, BALL_SOCCER_STARS_BLUE, BALL_SOCCER_STARS_RED, BALL_SOCCER_STARS_NIGHT, BALL_SOCCER_HEXAGONS_CYAN, BALL_SOCCER_HEXAGONS_MAGENTA, BALL_SOCCER_HEXAGONS_LIME, BALL_SOCCER_FLAMES_FIRE, BALL_SOCCER_FLAMES_ICE, BALL_SOCCER_FLAMES_TOXIC, BALL_SOCCER_CHEVRONS_RED, BALL_SOCCER_CHEVRONS_GREEN, BALL_SOCCER_CHEVRONS_BLUE, BALL_SOCCER_SWIRL_BLUE, BALL_SOCCER_SWIRL_RED, BALL_SOCCER_SWIRL_TEAL, BALL_SOCCER_METALLIC_GOLD, BALL_SOCCER_METALLIC_SILVER, BALL_SOCCER_METALLIC_COBALT, BALL_TEQBALL, BALL_BASKETBALL, BALL_BASKETBALL_6, BALL_BASKETBALL_3X3, BALL_BASEBALL, BALL_SOFTBALL, BALL_BASEBALL_LEMON_PEEL, BALL_BASEBALL_RED_BLUE, BALL_BASEBALL_BLACK_RED, BALL_BASEBALL_VINTAGE_LEATHER, BALL_SOFTBALL_11_OPTIC, BALL_TENNIS, BALL_PADEL, BALL_SLIOTAR, BALL_VOLLEYBALL, BALL_VOLLEYBALL_8, BALL_BEACH_VOLLEYBALL, BALL_VOLLEYBALL_COLOURS, BALL_VOLLEYBALL_BRAZIL, BALL_VOLLEYBALL_JAPAN, BALL_VOLLEYBALL_CANADA, BALL_VOLLEYBALL_USA, BALL_VOLLEYBALL_ITALY, BALL_VOLLEYBALL_POLAND, BALL_VOLLEYBALL_FRANCE, BALL_VOLLEYBALL_SERBIA, BALL_VOLLEYBALL_NETHERLANDS, BALL_VOLLEYBALL_GERMANY, BALL_CRICKET_RED, BALL_CRICKET_WHITE, BALL_CRICKET_PINK, BALL_FOOTBALL, BALL_FOOTBALL_CFL, BALL_FOOTBALL_IFAF, BALL_RUGBY, BALL_AFL, BALL_GAELIC_FOOTBALL, BALL_NETBALL, BALL_PICKLEBALL_OUTDOOR, BALL_PICKLEBALL_INDOOR, BALL_SQUASH_DOUBLE_YELLOW, BALL_SQUASH_YELLOW, BALL_SQUASH_GREEN, BALL_SQUASH_RED, BALL_SQUASH_BLUE, BALL_RACQUETBALL, BALL_LACROSSE, BALL_FIELD_HOCKEY, BALL_TABLE_TENNIS, BALL_HANDBALL, BALL_WATER_POLO, BALL_GOLF, BALL_PUCK, BALL_CURLING_STONE, BALL_SHOT, BALL_DISCUS, BALL_HAMMER, BALL_SEPAK_TAKRAW, BALL_ROUNDNET, BALL_SHUTTLECOCK_FEATHER, BALL_SHUTTLECOCK_NYLON];
|
|
40
40
|
/** The id of every ball: `"ball:soccer"`, `"ball:cricket-red"`. */
|
|
41
41
|
export const BALL_IDS = BALLS.map((b) => b.id);
|
|
42
42
|
const TABLE = new Map([...BALLS, ...PUCKS].map((b) => [b.id, b]));
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
import { type BallSpec } from "./ball.engine.ts";
|
|
2
|
-
/** The 1970s: twelve
|
|
3
|
-
export declare const
|
|
4
|
-
/** The late 1970s: a
|
|
5
|
-
export declare const
|
|
6
|
-
/** The 1980s:
|
|
7
|
-
export declare const
|
|
8
|
-
/** The
|
|
9
|
-
export declare const
|
|
10
|
-
/** The
|
|
11
|
-
export declare const
|
|
12
|
-
/** The
|
|
13
|
-
export declare const
|
|
14
|
-
/** The
|
|
15
|
-
export declare const
|
|
16
|
-
/** The
|
|
17
|
-
export declare const
|
|
18
|
-
/** The
|
|
19
|
-
export declare const
|
|
20
|
-
/** The
|
|
21
|
-
export declare const
|
|
2
|
+
/** The 1970s: twelve dark slate pentagons and twenty white hexagons that each hold a pale dished hexagon. */
|
|
3
|
+
export declare const BALL_SOCCER_RETRO_PENTAGONS: import("./ball.core.ts").Piece<BallSpec>;
|
|
4
|
+
/** The late 1970s: a trefoil of three straight leaves on each of the twenty hexagons, navy on white, each pointing at a pentagon. */
|
|
5
|
+
export declare const BALL_SOCCER_RETRO_LEAVES: import("./ball.core.ts").Piece<BallSpec>;
|
|
6
|
+
/** The 1980s: a five-petal rosette on each hexagon in a warm clay, each petal ornamented with a row of white beads along its spine, and gold-ringed dark pentagons. */
|
|
7
|
+
export declare const BALL_SOCCER_RETRO_ROSETTE: import("./ball.core.ts").Piece<BallSpec>;
|
|
8
|
+
/** The 1980s, second version: a six-armed star on each hexagon in deep teal with a saffron centre, over cream hexagons, with navy pentagons ringed in cream. */
|
|
9
|
+
export declare const BALL_SOCCER_RETRO_STAR: import("./ball.core.ts").Piece<BallSpec>;
|
|
10
|
+
/** The 1990s: a pinwheel of three curved leaves in three colours (green, amber and plum) on a white ground, turning the other way from the 1970s, a solid deep green circle where the three meet, and deep green pentagons. */
|
|
11
|
+
export declare const BALL_SOCCER_RETRO_PINWHEEL: import("./ball.core.ts").Piece<BallSpec>;
|
|
12
|
+
/** The early 2000s: long kites that sweep across each hexagon, in slate blue and silver, over charcoal pentagons. */
|
|
13
|
+
export declare const BALL_SOCCER_RETRO_KITES: import("./ball.core.ts").Piece<BallSpec>;
|
|
14
|
+
/** The mid 2000s: the 14-panel layout (six propellers and eight triangles) with a double border: two parallel black lines along every seam (a thin gap between them), and two parallel red lines inside each propeller; white propellers, dark triangles with a red dot. */
|
|
15
|
+
export declare const BALL_SOCCER_14_PANEL_DOUBLE_BORDER: import("./ball.core.ts").Piece<BallSpec>;
|
|
16
|
+
/** The early 2010s: the 8-panel layout, an octahedron whose edges are bent into S curves, with plain seams: the white panels are plain, and the slate-blue ones carry three white contour lines. */
|
|
17
|
+
export declare const BALL_SOCCER_8_PANEL_PLAIN: import("./ball.core.ts").Piece<BallSpec>;
|
|
18
|
+
/** The mid 2010s: six twisted panels in white, crossed by straight bands along each panel in blue, amber and magenta, and a series of diamonds at each pole where the seams meet. */
|
|
19
|
+
export declare const BALL_SOCCER_6_PANEL_BANDS: import("./ball.core.ts").Piece<BallSpec>;
|
|
20
|
+
/** The late 2010s: six panels covered with small diamonds, thick on one side and thinning out toward the other, and a series of diamonds at each pole where the seams meet. */
|
|
21
|
+
export declare const BALL_SOCCER_6_PANEL_DIAMONDS: import("./ball.core.ts").Piece<BallSpec>;
|
|
22
|
+
/** The early 2020s: twenty triangles (an icosahedron) in deep blue, cream and sand, each carrying one inner outline and a dot at its middle. */
|
|
23
|
+
export declare const BALL_SOCCER_20_PANEL_DOTS: import("./ball.core.ts").Piece<BallSpec>;
|
|
22
24
|
/** A modern high-visibility training ball: 32 panels in fluorescent yellow-green, hot pink pentagons ringed in black, and three dark speed marks across each hexagon. */
|
|
23
25
|
export declare const BALL_SOCCER_TRAINING_HIGH_VIS: import("./ball.core.ts").Piece<BallSpec>;
|
|
@@ -35,45 +35,41 @@ function laidTriads(s, t, frames, blades, colours, edge, ew = 0.5) {
|
|
|
35
35
|
void t;
|
|
36
36
|
return out;
|
|
37
37
|
}
|
|
38
|
-
/** The 1970s: twelve
|
|
39
|
-
export const
|
|
38
|
+
/** The 1970s: twelve dark slate pentagons and twenty white hexagons that each hold a pale dished hexagon. */
|
|
39
|
+
export const BALL_SOCCER_RETRO_PENTAGONS = /* @__PURE__ */ ball("ball:soccer-retro-pentagons", "Soccer, 1970s black-white", "70年代風・白黒", {
|
|
40
40
|
view: VIEW,
|
|
41
|
-
base:
|
|
41
|
+
base: "#262c3b",
|
|
42
42
|
ground: WHITE,
|
|
43
43
|
mat: GLOSS,
|
|
44
44
|
draw(s, base, accent) {
|
|
45
45
|
const t = truncatedIcosahedron();
|
|
46
46
|
let out = "";
|
|
47
47
|
t.hexagons.forEach((h, i) => {
|
|
48
|
-
out += s.panel(shrink(h, t.hexagonCentres[i], 0.
|
|
48
|
+
out += s.panel(shrink(h, t.hexagonCentres[i], 0.68), accent ?? "#dfe3ea", { n: 2 });
|
|
49
49
|
});
|
|
50
50
|
for (const p of t.pentagons)
|
|
51
51
|
out += s.panel(p, base, { ink: true });
|
|
52
|
-
t.pentagons.forEach((p, i) => {
|
|
53
|
-
out += s.strokes([shrink(p, t.pentagonCentres[i], 0.45)], "#fff", 0.5, { closed: true, deco: true, opacity: 0.85 });
|
|
54
|
-
});
|
|
55
|
-
out += s.dots(t.hexagonCentres, 0.03, base, { light: false });
|
|
56
52
|
out += s.strokes(t.edges, GREY, 1.15);
|
|
57
53
|
return out + lit(s, t.edges);
|
|
58
54
|
},
|
|
59
55
|
});
|
|
60
|
-
/** The late 1970s: a
|
|
61
|
-
export const
|
|
56
|
+
/** The late 1970s: a trefoil of three straight leaves on each of the twenty hexagons, navy on white, each pointing at a pentagon. */
|
|
57
|
+
export const BALL_SOCCER_RETRO_LEAVES = /* @__PURE__ */ ball("ball:soccer-retro-leaves", "Soccer, late-1970s triads", "70年代後期風・三つ巴", {
|
|
62
58
|
view: VIEW,
|
|
63
|
-
base:
|
|
59
|
+
base: "#243a63",
|
|
64
60
|
ground: WHITE,
|
|
65
61
|
mat: GLOSS,
|
|
66
62
|
draw(s, base) {
|
|
67
63
|
const t = truncatedIcosahedron();
|
|
68
|
-
let out = laidTriads(s, t, hexFrames(t), triad(0.0, 0.
|
|
64
|
+
let out = laidTriads(s, t, hexFrames(t), triad(0.0, 0.34, 0, 0.2, 0), [base], base, 0.4);
|
|
69
65
|
out += s.strokes(t.edges, mix(base, 0.45), 0.8);
|
|
70
66
|
return out + lit(s, t.edges, 0.4);
|
|
71
67
|
},
|
|
72
68
|
});
|
|
73
|
-
/** The 1980s:
|
|
74
|
-
export const
|
|
69
|
+
/** The 1980s: a five-petal rosette on each hexagon in a warm clay, each petal ornamented with a row of white beads along its spine, and gold-ringed dark pentagons. */
|
|
70
|
+
export const BALL_SOCCER_RETRO_ROSETTE = /* @__PURE__ */ ball("ball:soccer-retro-rosette", "Soccer, decorated rosette", "80年代風・飾りロゼット", {
|
|
75
71
|
view: VIEW,
|
|
76
|
-
base: "#
|
|
72
|
+
base: "#d1633a",
|
|
77
73
|
ground: WHITE,
|
|
78
74
|
mat: GLOSS,
|
|
79
75
|
draw(s, base, accent) {
|
|
@@ -86,19 +82,42 @@ export const BALL_SOCCER_1986_DECORATED_TRIAD = /* @__PURE__ */ ball("ball:socce
|
|
|
86
82
|
t.pentagons.forEach((p, i) => {
|
|
87
83
|
out += s.strokes([shrink(p, t.pentagonCentres[i], 0.4)], gold, 0.6, { closed: true, deco: true });
|
|
88
84
|
});
|
|
89
|
-
|
|
85
|
+
const petals = [0, 1, 2, 3, 4].map((k) => tongue(spiral(0.03, 0.27, (2 * Math.PI * k) / 5, 0), (u) => 0.1 * Math.min(1, u * 5) * (1 - u) ** 0.7, 3));
|
|
86
|
+
out += laidTriads(s, t, hf, petals, [base], mix(base, -0.45), 0.5);
|
|
90
87
|
const spines = [];
|
|
91
88
|
for (const f of hf)
|
|
92
|
-
for (let k = 0; k <
|
|
93
|
-
spines.push(Array.from({ length:
|
|
89
|
+
for (let k = 0; k < 5; k++)
|
|
90
|
+
spines.push(Array.from({ length: 2 }, (_, j) => f(...spiral(0.07, 0.24, (2 * Math.PI * k) / 5, 0)(j))));
|
|
94
91
|
out += s.strokes(spines, "#fff7e6", 1.1, { dash: "0 2.3", deco: true });
|
|
95
92
|
return out + s.strokes(t.edges, mix(base, -0.5), 1);
|
|
96
93
|
},
|
|
97
94
|
});
|
|
98
|
-
/** The
|
|
99
|
-
export const
|
|
95
|
+
/** The 1980s, second version: a six-armed star on each hexagon in deep teal with a saffron centre, over cream hexagons, with navy pentagons ringed in cream. */
|
|
96
|
+
export const BALL_SOCCER_RETRO_STAR = /* @__PURE__ */ ball("ball:soccer-retro-star", "Soccer, 1980s star", "80年代風・星形", {
|
|
97
|
+
view: VIEW,
|
|
98
|
+
base: "#1f7f86",
|
|
99
|
+
ground: "#f6f0e2",
|
|
100
|
+
mat: GLOSS,
|
|
101
|
+
draw(s, base, accent) {
|
|
102
|
+
const t = truncatedIcosahedron();
|
|
103
|
+
const hf = hexFrames(t);
|
|
104
|
+
let out = "";
|
|
105
|
+
for (const p of t.pentagons)
|
|
106
|
+
out += s.panel(p, "#1d2b45", { ink: true });
|
|
107
|
+
t.pentagons.forEach((p, i) => {
|
|
108
|
+
out += s.strokes([shrink(p, t.pentagonCentres[i], 0.4)], "#f6f0e2", 0.6, { closed: true, deco: true });
|
|
109
|
+
});
|
|
110
|
+
const ray = [[0.3, 0], [0.11, 0.075], [0.03, 0], [0.11, -0.075]];
|
|
111
|
+
out += s.panels(hf.flatMap((f) => [0, 1, 2, 3, 4, 5].map((k) => place(f, turned(ray, (Math.PI * k) / 3)))), base, { n: 1 });
|
|
112
|
+
out += s.dots(t.hexagonCentres, 0.05, accent ?? "#e9a92b", { light: false });
|
|
113
|
+
out += s.strokes(t.edges, mix(base, -0.5), 1);
|
|
114
|
+
return out + lit(s, t.edges, 0.4);
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
/** The 1990s: a pinwheel of three curved leaves in three colours (green, amber and plum) on a white ground, turning the other way from the 1970s, a solid deep green circle where the three meet, and deep green pentagons. */
|
|
118
|
+
export const BALL_SOCCER_RETRO_PINWHEEL = /* @__PURE__ */ ball("ball:soccer-retro-pinwheel", "Soccer, coloured triads", "90年代風・色つき三つ巴", {
|
|
100
119
|
view: VIEW,
|
|
101
|
-
base: "#
|
|
120
|
+
base: "#2f9e63",
|
|
102
121
|
ground: WHITE,
|
|
103
122
|
mat: GLOSS,
|
|
104
123
|
draw(s, base, accent) {
|
|
@@ -106,81 +125,86 @@ export const BALL_SOCCER_1998_COLOURED_TRIAD = /* @__PURE__ */ ball("ball:soccer
|
|
|
106
125
|
let out = "";
|
|
107
126
|
for (const p of t.pentagons)
|
|
108
127
|
out += s.panel(p, mix(base, -0.55), { ink: true });
|
|
109
|
-
out += laidTriads(s, t, hexFrames(t), triad(0.0, 0.31, 0.9, 0.
|
|
128
|
+
out += laidTriads(s, t, hexFrames(t), triad(0.0, 0.31, 0.9, 0.2, 0.2), [base, "#e08a2e", accent ?? "#7d3c98"], "#ffffff", 0.35);
|
|
129
|
+
// A solid circle where the three colours meet, in the pentagons' deep green.
|
|
130
|
+
out += s.dots(t.hexagonCentres, 0.052, mix(base, -0.55), { light: false });
|
|
110
131
|
out += s.strokes(t.edges, GREY, 0.9);
|
|
111
132
|
return out + lit(s, t.edges, 0.4);
|
|
112
133
|
},
|
|
113
134
|
});
|
|
114
|
-
/** The early 2000s: long
|
|
115
|
-
export const
|
|
135
|
+
/** The early 2000s: long kites that sweep across each hexagon, in slate blue and silver, over charcoal pentagons. */
|
|
136
|
+
export const BALL_SOCCER_RETRO_KITES = /* @__PURE__ */ ball("ball:soccer-retro-kites", "Soccer, kite sweep", "2000年代風・凧の流れ", {
|
|
116
137
|
view: VIEW,
|
|
117
|
-
base: "#
|
|
138
|
+
base: "#3d5a80",
|
|
118
139
|
ground: "#f3efe4",
|
|
119
140
|
mat: GLOSS,
|
|
120
141
|
draw(s, base, accent) {
|
|
121
142
|
const t = truncatedIcosahedron();
|
|
122
|
-
const gold = accent ?? "#
|
|
143
|
+
const gold = accent ?? "#cfd6df";
|
|
123
144
|
let out = "";
|
|
124
145
|
for (const p of t.pentagons)
|
|
125
146
|
out += s.panel(p, mix(base, -0.45), { ink: true });
|
|
126
|
-
const big = [[0.
|
|
127
|
-
const small = [[0.
|
|
147
|
+
const big = [[0.31, 0], [0.15, 0.11], [-0.03, 0], [0.15, -0.11]];
|
|
148
|
+
const small = [[0.25, 0], [0.15, 0.055], [0.06, 0], [0.15, -0.055]];
|
|
128
149
|
const frames = hexFrames(t);
|
|
129
150
|
const turns = [0, 1, 2].map((k) => (2 * Math.PI * k) / 3);
|
|
130
151
|
out += s.panels(frames.flatMap((f) => turns.map((a) => place(f, turned(big, a)))), base, { n: 1 });
|
|
131
|
-
out += s.panels(frames.flatMap((f) => turns.map((a) => place(f, turned(small, a
|
|
152
|
+
out += s.panels(frames.flatMap((f) => turns.map((a) => place(f, turned(small, a)))), gold, { n: 1 });
|
|
132
153
|
out += s.strokes(t.edges, GREY, 0.9);
|
|
133
154
|
return out + lit(s, t.edges, 0.4);
|
|
134
155
|
},
|
|
135
156
|
});
|
|
136
|
-
/** The mid 2000s: the 14-panel
|
|
137
|
-
export const
|
|
157
|
+
/** The mid 2000s: the 14-panel layout (six propellers and eight triangles) with a double border: two parallel black lines along every seam (a thin gap between them), and two parallel red lines inside each propeller; white propellers, dark triangles with a red dot. */
|
|
158
|
+
export const BALL_SOCCER_14_PANEL_DOUBLE_BORDER = /* @__PURE__ */ ball("ball:soccer-14-panel-double-border", "Soccer, 14-panel borders", "14枚貼り・二重縁取り", {
|
|
138
159
|
view: { yaw: 40, pitch: 36, roll: 0 },
|
|
139
|
-
base: "#
|
|
160
|
+
base: "#23282f",
|
|
140
161
|
ground: "#f4f2ea",
|
|
141
162
|
mat: GLOSS,
|
|
142
163
|
draw(s, base, accent) {
|
|
143
164
|
const g = propellers14();
|
|
144
|
-
const
|
|
165
|
+
const red = accent ?? "#c8302f";
|
|
166
|
+
const ring = (p, c, k) => shrink(p, c, k).filter((_, j) => j % 3 === 0);
|
|
145
167
|
let out = "";
|
|
146
168
|
for (const p of g.triangles)
|
|
147
169
|
out += s.panel(p, base, { n: 6, ink: true });
|
|
148
|
-
g.
|
|
149
|
-
|
|
150
|
-
});
|
|
151
|
-
// A line a little inside each propeller, following its seam.
|
|
170
|
+
out += s.dots(g.triangleCentres, 0.05, red, { light: false });
|
|
171
|
+
// The double red border inside each propeller, two parallel lines following its seam.
|
|
152
172
|
g.propellers.forEach((p, i) => {
|
|
153
|
-
|
|
173
|
+
for (const k of [0.2, 0.3])
|
|
174
|
+
out += s.strokes([ring(p, g.propellerCentres[i], k)], red, 0.7, { closed: true, deco: true, opacity: 0.95 });
|
|
154
175
|
});
|
|
155
|
-
|
|
176
|
+
// The double black border on every seam: two black lines with a thin gap of ground between them.
|
|
177
|
+
out += s.strokes(g.seams, "#16181c", 2.7);
|
|
178
|
+
out += s.strokes(g.seams, "#f4f2ea", 0.8);
|
|
156
179
|
return out + lit(s, g.seams);
|
|
157
180
|
},
|
|
158
181
|
});
|
|
159
|
-
/** The early 2010s: the 8-panel layout, an octahedron whose edges are bent into S curves, with
|
|
160
|
-
export const
|
|
182
|
+
/** The early 2010s: the 8-panel layout, an octahedron whose edges are bent into S curves, with plain seams: the white panels are plain, and the slate-blue ones carry three white contour lines. */
|
|
183
|
+
export const BALL_SOCCER_8_PANEL_PLAIN = /* @__PURE__ */ ball("ball:soccer-8-panel-plain", "Soccer, 8-panel plain", "8枚貼り・無地と等高線", {
|
|
161
184
|
view: { yaw: 32, pitch: 26, roll: 0 },
|
|
162
185
|
base: "#f6f8f8",
|
|
163
186
|
ground: "#f6f8f8",
|
|
164
187
|
mat: { gloss: 0.7, shade: "#1f3340", grain: { f: 1.6, a: 0.2 } },
|
|
165
188
|
draw(s, base, accent) {
|
|
166
189
|
const g = octahedron8();
|
|
167
|
-
const tone = [base, accent ?? "#
|
|
190
|
+
const tone = [base, accent ?? "#5f86c0"];
|
|
168
191
|
let out = "";
|
|
169
192
|
g.panels.forEach((p, i) => {
|
|
170
193
|
if (g.parity[i] === 1)
|
|
171
194
|
out += s.panel(p, tone[1], { n: 1 });
|
|
172
195
|
});
|
|
173
|
-
// Contour lines
|
|
196
|
+
// Contour lines on the blue panels only; the white ones stay plain.
|
|
174
197
|
const groove = "#16262f";
|
|
175
198
|
g.panels.forEach((p, i) => {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
199
|
+
if (g.parity[i] !== 1)
|
|
200
|
+
return;
|
|
201
|
+
const ink = "#ffffff";
|
|
202
|
+
for (const [k, w] of [[0.72, 0.8], [0.48, 0.8], [0.24, 0.8]])
|
|
203
|
+
out += s.strokes([shrink(p, g.centres[i], k).filter((_, j) => j % 3 === 0)], ink, w, { closed: true, deco: true, opacity: 0.95 });
|
|
180
204
|
});
|
|
181
205
|
// The grooves: a wide dark channel with a lit lip beside it.
|
|
182
|
-
out += s.strokes(g.seams, groove, 3
|
|
183
|
-
out += s.strokes(g.seams, "#fff", 0.
|
|
206
|
+
out += s.strokes(g.seams, groove, 1.3);
|
|
207
|
+
out += s.strokes(g.seams, "#fff", 0.5, { deco: true, opacity: 0.6, dx: 0.4, dy: 0.45 });
|
|
184
208
|
return out;
|
|
185
209
|
},
|
|
186
210
|
});
|
|
@@ -196,16 +220,28 @@ function sixGores(s, tilt, tone, twist = 180) {
|
|
|
196
220
|
}
|
|
197
221
|
return { g, out };
|
|
198
222
|
}
|
|
199
|
-
/**
|
|
200
|
-
|
|
223
|
+
/** A series of diamonds at the two poles of a six-gore ball, where all the seams meet: three nested diamonds, outer to inner in `cols`. */
|
|
224
|
+
function poleDiamonds(s, at, cols) {
|
|
225
|
+
const diamond = (k) => [[0.32 * k, 0], [0, 0.19 * k], [-0.32 * k, 0], [0, -0.19 * k]];
|
|
226
|
+
let out = "";
|
|
227
|
+
for (const pole of [1, -1]) {
|
|
228
|
+
const f = frameAt(at(0, 0, pole), at(0, 0.5, pole * 0.8));
|
|
229
|
+
[1, 0.62, 0.26].forEach((k, j) => {
|
|
230
|
+
out += s.panel(place(f, diamond(k)), cols[j], { n: 1 });
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return out;
|
|
234
|
+
}
|
|
235
|
+
/** The mid 2010s: six twisted panels in white, crossed by straight bands along each panel in blue, amber and magenta, and a series of diamonds at each pole where the seams meet. */
|
|
236
|
+
export const BALL_SOCCER_6_PANEL_BANDS = /* @__PURE__ */ ball("ball:soccer-6-panel-bands", "Soccer, 6-panel bands", "6枚貼り・帯柄", {
|
|
201
237
|
view: { yaw: 20, pitch: 22, roll: 0 },
|
|
202
|
-
base: "#
|
|
238
|
+
base: "#3b6fb6",
|
|
203
239
|
ground: "#f5f5f1",
|
|
204
240
|
mat: { gloss: 0.9, shade: "#2a3450", grain: { f: 0.7, a: 0.07 } },
|
|
205
241
|
draw(s, base, accent) {
|
|
206
242
|
const { g, out: panels } = sixGores(s, [0, 0, 28], "#ebebe5");
|
|
207
243
|
const at = gorePoint(6, 180, [0, 0, 28]);
|
|
208
|
-
const cols = [base, accent ?? "#
|
|
244
|
+
const cols = [base, accent ?? "#e8b22e", "#c2386a"];
|
|
209
245
|
let out = panels;
|
|
210
246
|
// Three ribbons on a gore, spiralling: each is a leaf whose spine follows a curve across the gore.
|
|
211
247
|
for (let i = 0; i < 6; i++) {
|
|
@@ -216,8 +252,8 @@ export const BALL_SOCCER_2014_RIBBON = /* @__PURE__ */ ball("ball:soccer-2014-ri
|
|
|
216
252
|
const s0 = -0.75 + k * 0.7 + (i % 2) * 0.12;
|
|
217
253
|
for (let j = 0; j <= 10; j++) {
|
|
218
254
|
const u = j / 10;
|
|
219
|
-
const lat = s0
|
|
220
|
-
const w = 0.
|
|
255
|
+
const lat = s0;
|
|
256
|
+
const w = 0.16;
|
|
221
257
|
left.push(at(i, 0.12 + 0.76 * u, lat));
|
|
222
258
|
right.push(at(i, 0.12 + 0.76 * u, lat + w));
|
|
223
259
|
}
|
|
@@ -225,18 +261,19 @@ export const BALL_SOCCER_2014_RIBBON = /* @__PURE__ */ ball("ball:soccer-2014-ri
|
|
|
225
261
|
}
|
|
226
262
|
}
|
|
227
263
|
out += s.strokes(g.seams, GREY, 0.85);
|
|
264
|
+
out += poleDiamonds(s, at, [cols[0], "#f5f5f1", cols[1]]);
|
|
228
265
|
return out + lit(s, g.seams, 0.5);
|
|
229
266
|
},
|
|
230
267
|
});
|
|
231
|
-
/** The late 2010s: six panels covered with
|
|
232
|
-
export const
|
|
268
|
+
/** The late 2010s: six panels covered with small diamonds, thick on one side and thinning out toward the other, and a series of diamonds at each pole where the seams meet. */
|
|
269
|
+
export const BALL_SOCCER_6_PANEL_DIAMONDS = /* @__PURE__ */ ball("ball:soccer-6-panel-diamonds", "Soccer, 6-panel diamonds", "6枚貼り・ひし形柄", {
|
|
233
270
|
view: { yaw: 20, pitch: 22, roll: 0 },
|
|
234
271
|
base: "#2a2f3a",
|
|
235
272
|
ground: "#f2f2ee",
|
|
236
273
|
mat: { gloss: 0.9, shade: "#2a3450", grain: { f: 0.7, a: 0.07 } },
|
|
237
274
|
draw(s, base, accent) {
|
|
238
275
|
const { g, out: panels } = sixGores(s, [0, 0, 28], "#e7e7e1", 90);
|
|
239
|
-
const pal = [base, mix(base, 0.4), accent ?? "#
|
|
276
|
+
const pal = [base, mix(base, 0.4), accent ?? "#1fa39a", "#e6b53a", mix(base, 0.4)];
|
|
240
277
|
let out = panels;
|
|
241
278
|
const groups = pal.map(() => []);
|
|
242
279
|
const rows = 17, cols = 34;
|
|
@@ -251,25 +288,26 @@ export const BALL_SOCCER_2018_PIXEL = /* @__PURE__ */ ball("ball:soccer-2018-pix
|
|
|
251
288
|
const d = (Math.PI / cols) * 1.7, e = (Math.PI / rows) * 0.85;
|
|
252
289
|
const corner = (a, b) => [Math.sin(lon + a) * Math.cos(lat + b), Math.sin(lat + b), Math.cos(lon + a) * Math.cos(lat + b)];
|
|
253
290
|
const k = Math.floor(noise(c, r + 50) * pal.length);
|
|
254
|
-
groups[k].push([corner(
|
|
291
|
+
groups[k].push([corner(d / 2, 0), corner(d, e / 2), corner(d / 2, e), corner(0, e / 2)]);
|
|
255
292
|
}
|
|
256
293
|
}
|
|
257
294
|
pal.forEach((c, k) => {
|
|
258
295
|
out += s.panels(groups[k], c, { n: 1, ink: k === 0 });
|
|
259
296
|
});
|
|
260
297
|
out += s.strokes(g.seams, GREY, 0.85);
|
|
298
|
+
out += poleDiamonds(s, gorePoint(6, 90, [0, 0, 28]), [base, "#e7e7e1", pal[2]]);
|
|
261
299
|
return out + lit(s, g.seams, 0.5);
|
|
262
300
|
},
|
|
263
301
|
});
|
|
264
|
-
/** The early 2020s: twenty triangles (an icosahedron) in
|
|
265
|
-
export const
|
|
302
|
+
/** The early 2020s: twenty triangles (an icosahedron) in deep blue, cream and sand, each carrying one inner outline and a dot at its middle. */
|
|
303
|
+
export const BALL_SOCCER_20_PANEL_DOTS = /* @__PURE__ */ ball("ball:soccer-20-panel-dots", "Soccer, 20-panel dots", "20枚貼り・点と輪郭", {
|
|
266
304
|
view: { yaw: 30, pitch: 24, roll: 8 },
|
|
267
|
-
base: "#
|
|
305
|
+
base: "#1f4f7d",
|
|
268
306
|
ground: "#f1ece0",
|
|
269
307
|
mat: GLOSS,
|
|
270
308
|
draw(s, base, accent) {
|
|
271
309
|
const g = icosahedron();
|
|
272
|
-
const gold = accent ?? "#
|
|
310
|
+
const gold = accent ?? "#e4b04a";
|
|
273
311
|
const fill = [mix(base, 0.0), "#f1ece0", gold, mix(base, 0.35)];
|
|
274
312
|
let out = "";
|
|
275
313
|
fill.forEach((c, k) => {
|
|
@@ -277,9 +315,10 @@ export const BALL_SOCCER_2022_SPEED_SHELL = /* @__PURE__ */ ball("ball:soccer-20
|
|
|
277
315
|
});
|
|
278
316
|
g.panels.forEach((p, i) => {
|
|
279
317
|
const inner = g.colour[i] === 0 ? "#f1ece0" : base;
|
|
280
|
-
for (const k of [0.
|
|
318
|
+
for (const k of [0.55])
|
|
281
319
|
out += s.strokes([shrink(p, g.centres[i], k)], inner, 0.45, { closed: true, deco: true, opacity: 0.85 });
|
|
282
320
|
});
|
|
321
|
+
out += s.dots(g.centres, 0.02, base, { light: false });
|
|
283
322
|
out += s.strokes(g.seams, mix(base, -0.5), 1.1);
|
|
284
323
|
return out + lit(s, g.seams);
|
|
285
324
|
},
|