@johnmorrisdotca/dougu-sports 0.1.0 → 0.2.1

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.
Files changed (192) hide show
  1. package/CHANGELOG.md +53 -1
  2. package/NOTICE.md +9 -58
  3. package/README.md +174 -37
  4. package/dist/emblems/award/badge.d.ts +2 -2
  5. package/dist/emblems/award/badge.js +14 -5
  6. package/dist/emblems/award/crown.d.ts +1 -1
  7. package/dist/emblems/award/crown.js +14 -4
  8. package/dist/emblems/award/medal.d.ts +2 -2
  9. package/dist/emblems/award/medal.js +14 -5
  10. package/dist/emblems/award/shield.d.ts +1 -1
  11. package/dist/emblems/award/shield.js +10 -4
  12. package/dist/emblems/award/star.d.ts +1 -1
  13. package/dist/emblems/award/star.js +10 -4
  14. package/dist/emblems/ball/ball.afl.js +3 -2
  15. package/dist/emblems/ball/ball.basketball6.js +1 -1
  16. package/dist/emblems/ball/ball.core.d.ts +9 -3
  17. package/dist/emblems/ball/ball.core.js +13 -0
  18. package/dist/emblems/ball/ball.cricket.js +1 -1
  19. package/dist/emblems/ball/ball.curlingstone.d.ts +2 -0
  20. package/dist/emblems/ball/ball.curlingstone.js +11 -7
  21. package/dist/emblems/ball/ball.discus.js +1 -1
  22. package/dist/emblems/ball/ball.engine.js +3 -3
  23. package/dist/emblems/ball/ball.football.js +9 -7
  24. package/dist/emblems/ball/ball.gaelic.js +1 -1
  25. package/dist/emblems/ball/ball.object.d.ts +5 -2
  26. package/dist/emblems/ball/ball.object.js +3 -2
  27. package/dist/emblems/ball/ball.puck.d.ts +2 -0
  28. package/dist/emblems/ball/ball.puck.js +2 -2
  29. package/dist/emblems/ball/ball.rugby.js +3 -2
  30. package/dist/emblems/ball/ball.shuttlecock.d.ts +4 -0
  31. package/dist/emblems/ball/ball.shuttlecock.js +6 -5
  32. package/dist/emblems/ball/ball.squash.js +5 -5
  33. package/dist/emblems/emblem.api.d.ts +39 -1
  34. package/dist/emblems/emblem.api.js +20 -2
  35. package/dist/emblems/emblem.compose.d.ts +31 -0
  36. package/dist/emblems/emblem.compose.js +91 -0
  37. package/dist/emblems/emblem.core.d.ts +48 -2
  38. package/dist/emblems/emblem.core.js +30 -0
  39. package/dist/emblems/emblem.descriptions.d.ts +7 -0
  40. package/dist/emblems/emblem.descriptions.js +60 -0
  41. package/dist/emblems/emblem.display.d.ts +75 -0
  42. package/dist/emblems/emblem.display.js +214 -0
  43. package/dist/emblems/emblem.engrave.d.ts +50 -0
  44. package/dist/emblems/emblem.engrave.js +145 -0
  45. package/dist/emblems/emblem.equipment.d.ts +24 -0
  46. package/dist/emblems/emblem.equipment.js +57 -0
  47. package/dist/emblems/emblem.flip.d.ts +10 -0
  48. package/dist/emblems/emblem.flip.js +46 -0
  49. package/dist/emblems/emblem.ids.d.ts +19 -11
  50. package/dist/emblems/emblem.ids.js +21 -6
  51. package/dist/emblems/emblem.lathe.d.ts +3 -0
  52. package/dist/emblems/emblem.lathe.js +26 -4
  53. package/dist/emblems/emblem.medal.js +4 -4
  54. package/dist/emblems/emblem.pennant.d.ts +3 -0
  55. package/dist/emblems/emblem.pennant.js +79 -0
  56. package/dist/emblems/emblem.registry.js +20 -0
  57. package/dist/emblems/emblem.shapes.d.ts +19 -2
  58. package/dist/emblems/emblem.shapes.js +55 -13
  59. package/dist/emblems/emblem.sprite.d.ts +38 -0
  60. package/dist/emblems/emblem.sprite.js +65 -0
  61. package/dist/emblems/emblem.uri.d.ts +22 -0
  62. package/dist/emblems/emblem.uri.js +29 -0
  63. package/dist/emblems/gear/gear.badmintonracket.d.ts +1 -1
  64. package/dist/emblems/gear/gear.badmintonracket.js +18 -14
  65. package/dist/emblems/gear/gear.baseballglove.d.ts +1 -1
  66. package/dist/emblems/gear/gear.baseballglove.js +20 -14
  67. package/dist/emblems/gear/gear.budo.d.ts +17 -0
  68. package/dist/emblems/gear/gear.budo.js +60 -0
  69. package/dist/emblems/gear/gear.core.d.ts +12 -31
  70. package/dist/emblems/gear/gear.core.js +61 -54
  71. package/dist/emblems/gear/gear.cricketbat.d.ts +1 -1
  72. package/dist/emblems/gear/gear.cricketbat.js +16 -14
  73. package/dist/emblems/gear/gear.fieldhockeystick.d.ts +1 -1
  74. package/dist/emblems/gear/gear.fieldhockeystick.js +15 -14
  75. package/dist/emblems/gear/gear.footballhelmet.d.ts +1 -1
  76. package/dist/emblems/gear/gear.footballhelmet.js +15 -14
  77. package/dist/emblems/gear/gear.goaliemask.d.ts +1 -1
  78. package/dist/emblems/gear/gear.goaliemask.js +22 -16
  79. package/dist/emblems/gear/gear.goalnet.d.ts +1 -1
  80. package/dist/emblems/gear/gear.goalnet.js +24 -14
  81. package/dist/emblems/gear/gear.hockeystick.d.ts +1 -1
  82. package/dist/emblems/gear/gear.hockeystick.js +14 -14
  83. package/dist/emblems/gear/gear.index.js +5 -1
  84. package/dist/emblems/gear/gear.kendo.d.ts +2 -0
  85. package/dist/emblems/gear/gear.kendo.js +41 -0
  86. package/dist/emblems/gear/gear.kyudo.d.ts +2 -0
  87. package/dist/emblems/gear/gear.kyudo.js +31 -0
  88. package/dist/emblems/gear/gear.lacrossestick.d.ts +1 -1
  89. package/dist/emblems/gear/gear.lacrossestick.js +25 -14
  90. package/dist/emblems/gear/gear.skates.js +1 -1
  91. package/dist/emblems/gear/gear.sticks.js +2 -2
  92. package/dist/emblems/gear/gear.sumo.d.ts +2 -0
  93. package/dist/emblems/gear/gear.sumo.js +43 -0
  94. package/dist/emblems/gear/gear.tabletennispaddle.d.ts +1 -1
  95. package/dist/emblems/gear/gear.tabletennispaddle.js +15 -14
  96. package/dist/emblems/gear/gear.tennisracket.d.ts +1 -1
  97. package/dist/emblems/gear/gear.tennisracket.js +16 -14
  98. package/dist/emblems/pennant/championship.d.ts +2 -0
  99. package/dist/emblems/pennant/championship.js +4 -0
  100. package/dist/emblems/sport/afl.js +1 -1
  101. package/dist/emblems/sport/artisticswimming.js +1 -1
  102. package/dist/emblems/sport/cfl.d.ts +1 -1
  103. package/dist/emblems/sport/cfl.js +4 -4
  104. package/dist/emblems/sport/cricket.d.ts +1 -1
  105. package/dist/emblems/sport/cricket.js +13 -4
  106. package/dist/emblems/sport/fieldhockey.js +1 -1
  107. package/dist/emblems/sport/gaelic.js +1 -1
  108. package/dist/emblems/sport/handball.d.ts +1 -1
  109. package/dist/emblems/sport/handball.js +14 -4
  110. package/dist/emblems/sport/ifaf.d.ts +1 -1
  111. package/dist/emblems/sport/ifaf.js +4 -4
  112. package/dist/emblems/sport/judo.d.ts +2 -0
  113. package/dist/emblems/sport/judo.js +13 -0
  114. package/dist/emblems/sport/karate.d.ts +2 -0
  115. package/dist/emblems/sport/karate.js +13 -0
  116. package/dist/emblems/sport/kendo.d.ts +2 -0
  117. package/dist/emblems/sport/kendo.js +14 -0
  118. package/dist/emblems/sport/kyudo.d.ts +2 -0
  119. package/dist/emblems/sport/kyudo.js +15 -0
  120. package/dist/emblems/sport/mlb.d.ts +1 -1
  121. package/dist/emblems/sport/mlb.js +27 -4
  122. package/dist/emblems/sport/nba.d.ts +1 -1
  123. package/dist/emblems/sport/nba.js +11 -4
  124. package/dist/emblems/sport/netball.js +1 -1
  125. package/dist/emblems/sport/nfl.d.ts +2 -1
  126. package/dist/emblems/sport/nfl.js +14 -4
  127. package/dist/emblems/sport/nhl.d.ts +1 -1
  128. package/dist/emblems/sport/nhl.js +12 -4
  129. package/dist/emblems/sport/pickleball.js +1 -1
  130. package/dist/emblems/sport/racquetball.js +1 -1
  131. package/dist/emblems/sport/roundnet.js +1 -1
  132. package/dist/emblems/sport/rugby.d.ts +1 -1
  133. package/dist/emblems/sport/rugby.js +11 -4
  134. package/dist/emblems/sport/sepaktakraw.js +1 -1
  135. package/dist/emblems/sport/soccer.d.ts +1 -1
  136. package/dist/emblems/sport/soccer.js +30 -4
  137. package/dist/emblems/sport/squash.js +1 -1
  138. package/dist/emblems/sport/sumo.d.ts +2 -0
  139. package/dist/emblems/sport/sumo.js +15 -0
  140. package/dist/emblems/sport/tabletennis.js +1 -1
  141. package/dist/emblems/sport/tennis.d.ts +1 -1
  142. package/dist/emblems/sport/tennis.js +14 -4
  143. package/dist/emblems/sport/teqball.js +1 -1
  144. package/dist/emblems/sport/volleyball.d.ts +1 -1
  145. package/dist/emblems/sport/volleyball.js +24 -4
  146. package/dist/emblems/trophy/banner.d.ts +2 -0
  147. package/dist/emblems/trophy/banner.js +20 -0
  148. package/dist/emblems/trophy/baseball.js +1 -0
  149. package/dist/emblems/trophy/basketball.js +1 -0
  150. package/dist/emblems/trophy/belt.js +2 -1
  151. package/dist/emblems/trophy/bowl.js +1 -0
  152. package/dist/emblems/trophy/canadian-bowl.js +1 -0
  153. package/dist/emblems/trophy/championship-banner.d.ts +2 -0
  154. package/dist/emblems/trophy/championship-banner.js +67 -0
  155. package/dist/emblems/trophy/cricket-urn.js +1 -0
  156. package/dist/emblems/trophy/cup.d.ts +1 -1
  157. package/dist/emblems/trophy/cup.js +15 -4
  158. package/dist/emblems/trophy/football.js +2 -1
  159. package/dist/emblems/trophy/globe.js +1 -0
  160. package/dist/emblems/trophy/hockey-cup.js +2 -1
  161. package/dist/emblems/trophy/lidded-cup.js +1 -0
  162. package/dist/emblems/trophy/plaque.js +2 -1
  163. package/dist/emblems/trophy/ring.d.ts +2 -0
  164. package/dist/emblems/trophy/ring.js +30 -0
  165. package/dist/emblems/trophy/rugby-cup.js +1 -0
  166. package/dist/emblems/trophy/salver.js +1 -0
  167. package/dist/emblems/trophy/soccer-ball.js +2 -1
  168. package/dist/emblems/trophy/soccer-globe.js +1 -0
  169. package/dist/emblems/trophy/sumo-cup.d.ts +2 -0
  170. package/dist/emblems/trophy/sumo-cup.js +28 -0
  171. package/dist/emblems/trophy/tennis-cup.js +2 -1
  172. package/dist/emblems/trophy/tennis-plate.js +1 -0
  173. package/dist/emblems-entry.d.ts +15 -6
  174. package/dist/emblems-entry.js +7 -2
  175. package/dist/index.d.ts +17 -0
  176. package/dist/index.js +15 -0
  177. package/dist/turn-control.d.ts +101 -0
  178. package/dist/turn-control.js +363 -0
  179. package/dist/turn-entry.d.ts +2 -0
  180. package/dist/turn-entry.js +1 -0
  181. package/dist/version.d.ts +1 -1
  182. package/dist/version.js +1 -1
  183. package/package.json +7 -1
  184. package/LICENSES/Apache-2.0.txt +0 -202
  185. package/LICENSES/CC-BY-3.0.txt +0 -319
  186. package/LICENSES/upstream/game-icons.license.txt +0 -45
  187. package/LICENSES/upstream/noto-emoji-2D-svg.LICENSE +0 -13
  188. package/LICENSES/upstream/pictogrammers-mdi.LICENSE +0 -20
  189. package/dist/emblems/emblem.material.d.ts +0 -9
  190. package/dist/emblems/emblem.material.data.d.ts +0 -34
  191. package/dist/emblems/emblem.material.data.js +0 -85
  192. package/dist/emblems/emblem.material.js +0 -23
@@ -0,0 +1,60 @@
1
+ import { drawn, seg } from "./gear.core.js";
2
+ /** The colours of a judo belt from the first rank to the black belt, in order, which `tint` takes. */
3
+ export const OBI_RANKS = {
4
+ white: "#f2efe8",
5
+ yellow: "#f2c21b",
6
+ orange: "#ee8a1c",
7
+ green: "#2f9a52",
8
+ blue: "#2b64c8",
9
+ brown: "#7a4a24",
10
+ black: "#1f2228",
11
+ };
12
+ const CLOTH = "#f4f2ec";
13
+ const EDGE = "#7b8491";
14
+ /** A belt tied at the waist (a flat band, a knot, two ends hanging) from `x0` to `x1` at height `y`. */
15
+ const tied = (x0, x1, y) => {
16
+ const c = (x0 + x1) / 2;
17
+ return `M${x0} ${y}H${x1}V${y + 4}H${x0}zM${c - 3} ${y - 0.6}h6v5.2h-6zM${c - 1.4} ${y + 4.6}L${c - 4.6} ${y + 14}h3.4L${c + 0.4} ${y + 4.6}zM${c + 1.4} ${y + 4.6}L${c + 4.8} ${y + 13.4}h-3.4L${c - 0.4} ${y + 4.6}z`;
18
+ };
19
+ export const GEAR_JUDOGI = /* @__PURE__ */ drawn("gear:judogi", "Judo suit", "柔道衣", {
20
+ main: CLOTH,
21
+ accent: "#1f2228",
22
+ parts: [
23
+ { d: "M22.4 44.4H31.6L30.8 61H21.2ZM32.4 44.4H41.6L42.8 61H33.2Z", fill: "$main", cyl: 0.6, shade: 0.3 },
24
+ { d: "M23.6 9.4L8 36.4Q6.6 39.4 9.4 41.4L14.6 45Q17.4 46.4 19 43.4L29 27.4Z", fill: "$main", cyl: 0.5, shade: 0.4 },
25
+ { d: "M40.4 9.4L56 36.4Q57.4 39.4 54.6 41.4L49.4 45Q46.6 46.4 45 43.4L35 27.4Z", fill: "$main", cyl: 0.5, shade: 0.4 },
26
+ { d: "M23.6 9.4Q32 7 40.4 9.4L45 27.4V46H19V27.4Z", fill: "$main", cyl: 0.6, shade: 0.4 },
27
+ { d: "M26 8.6L35.4 31M38 8.6L28.6 31", fill: "none", stroke: "#cfc8b8", w: 3.6, line: "none" },
28
+ { d: "M26 8.6L35.4 31M38 8.6L28.6 31", fill: "none", stroke: "#8f98a3", w: 0.7, line: "stroke" },
29
+ { d: "M29.2 9.4Q32 12 34.8 9.4L32 16Z", fill: "#3a414b", stroke: "none", op: 0.5, line: "none", fx: true },
30
+ { d: "M13 31L19.4 39.4M11.4 34.4L17.6 42.4M47 31L40.6 39.4M48.6 34.4L42.4 42.4", fill: "none", stroke: "#a9b1bb", w: 0.7, line: "none" },
31
+ { d: tied(19, 45, 40.4), fill: "$accent", stroke: EDGE, cyl: 0.8, shade: 0.2 },
32
+ ],
33
+ });
34
+ export const GEAR_KARATE_GI = /* @__PURE__ */ drawn("gear:karate-gi", "Karate suit", "空手衣", {
35
+ main: CLOTH,
36
+ accent: "#1f2228",
37
+ parts: [
38
+ { d: "M20.4 46H31.4L28.4 61H17.8ZM32.6 46H43.6L46.2 61H35.6Z", fill: "$main", cyl: 0.6, shade: 0.3 },
39
+ { d: "M22.6 9.6L9 27.4Q7 30.4 9.6 32.4L13 34.6Q15.6 36.6 17.6 33.6L26 22Z", fill: "$main", cyl: 0.5, shade: 0.4 },
40
+ { d: "M41.4 9.6L55 27.4Q57 30.4 54.4 32.4L51 34.6Q48.4 36.6 46.4 33.6L38 22Z", fill: "$main", cyl: 0.5, shade: 0.4 },
41
+ { d: "M22.6 9.6Q32 7.4 41.4 9.6L44.8 28V48H19.2V28Z", fill: "$main", cyl: 0.6, shade: 0.4 },
42
+ { d: "M25.4 8.8L37 37M38.6 8.8L27 37", fill: "none", stroke: "#8f98a3", w: 0.9, line: "stroke" },
43
+ { d: "M28.8 9.6Q32 13 35.2 9.6L32 19Z", fill: "#3a414b", stroke: "none", op: 0.5, line: "none", fx: true },
44
+ { d: tied(19.2, 44.8, 40), fill: "$accent", stroke: EDGE, cyl: 0.8, shade: 0.2 },
45
+ ],
46
+ });
47
+ export const GEAR_OBI = /* @__PURE__ */ drawn("gear:obi", "Belt", "武道の帯", {
48
+ main: OBI_RANKS.black,
49
+ parts: [
50
+ { d: "M35 34L24.4 57.6L30 61L40.6 36Z", fill: "$main", stroke: EDGE, cyl: 0.7, shade: 0.3 },
51
+ { d: "M29 34L40.4 57.6L46 55.4L34.6 34Z", fill: "$main", stroke: EDGE, cyl: 0.7, shade: 0.3 },
52
+ { d: seg(27.4, 55.6, 31.4, 58.4) + seg(38.4, 54.6, 42.4, 53), fill: "none", stroke: "$accent", w: 1.6, line: "none" },
53
+ { d: "M2.6 23.4Q32 27.6 61.4 23.4V34.4Q32 38.6 2.6 34.4Z", fill: "$main", stroke: EDGE, cyl: 0.7, shade: 0.3 },
54
+ { d: "M2.6 27.2Q32 31.4 61.4 27.2", fill: "none", stroke: "$accent", w: 1.4, line: "none" },
55
+ { d: "M25.4 22.4h13.2v15.6H25.4z", fill: "$main", stroke: EDGE, cyl: 1, shade: 0.3 },
56
+ { d: "M25.4 27.6h13.2M25.4 32.6h13.2", fill: "none", stroke: "$accent", w: 0.8, line: "none" },
57
+ ],
58
+ });
59
+ /** The belt of a rank, `"white"` to `"black"`: the same as `GEAR_OBI.svg({ ...options, tint: OBI_RANKS[rank] })`. An unknown rank is the black belt. */
60
+ export const obi = (rank, options) => GEAR_OBI.svg({ ...options, tint: Object.hasOwn(OBI_RANKS, rank) ? OBI_RANKS[rank] : OBI_RANKS.black });
@@ -13,8 +13,12 @@ export interface Part {
13
13
  line?: "stroke" | "ink" | "none";
14
14
  /** A transform for the part. */
15
15
  t?: string;
16
- /** How much light and shade the part takes, 0 (flat) to 1 (the default). */
16
+ /** How much light and shade the part takes along a diagonal, 0 (flat) to 1 (the default). */
17
17
  shade?: number;
18
+ /** How much a part is shaded across its own width, as a round shaft is (a bright band, a dark side), 0 to 1. Drawn in the part's own frame, so it follows the part's transform. */
19
+ cyl?: number;
20
+ /** A highlight or a shadow laid on a part: drawn in the metal style only, never flat and never as a line. */
21
+ fx?: boolean;
18
22
  /** Opacity of the part in colour. */
19
23
  op?: number;
20
24
  }
@@ -36,9 +40,9 @@ export interface GearDef<Model = unknown> {
36
40
  model: Model;
37
41
  draw: (options: PieceOptions | undefined) => string;
38
42
  }
39
- /** A piece of gear from its drawing function. Gear is not turned: `frame` draws it as it is. */
43
+ /** A piece of gear from its drawing function. Turned, it flips like a coin (`flipSvg`): the front, then its mirrored back, with a thin rim. */
40
44
  export declare function defineGear<Model>(def: GearDef<Model>): Piece<Model>;
41
- /** A drawn piece: its parts become a document in either style. */
45
+ /** A drawn piece: its parts become a document in the metal, color or line style, whole or turned (the turn is `flipSvg`'s). */
42
46
  export declare function drawGear(id: string, title: string, spec: GearSpec, options: PieceOptions | undefined): string;
43
47
  /** The pieces' drawing helpers: shapes written as path strings. */
44
48
  export declare const rect: (x: number, y: number, w: number, h: number, r?: number) => string;
@@ -49,35 +53,12 @@ export declare const poly: (...pts: Array<[number, number]>) => string;
49
53
  export declare const seg: (x1: number, y1: number, x2: number, y2: number) => string;
50
54
  /** A capsule: a thick line with round ends, as a closed path (so it has an outline in the line style). */
51
55
  export declare function capsule(x1: number, y1: number, x2: number, y2: number, w: number): string;
52
- /** The ink of a copied colour drawing worked out as a line drawing: dark fills and strokes become `currentColor`, light ones are left out, the rest are a faint tint of it. Used where no other line artwork exists. */
53
- export declare function monoOf(markup: string): string;
54
56
  /** A piece we drew: the common case of `defineGear`. */
55
57
  export declare function drawn(id: string, en: string, ja: string, spec: GearSpec, size?: PieceSize): Piece<GearSpec>;
56
58
  /** The strings of a racket's head: a grid of lines clipped to an ellipse. */
57
59
  export declare function strings(cx: number, cy: number, rx: number, ry: number, step: number): string;
58
- /** A piece of gear copied, with changes, from an open icon set. */
59
- export interface CopiedSpec {
60
- id: string;
61
- en: string;
62
- ja: string;
63
- source: PieceSource;
64
- /** The attribution the licence asks for: the author and the licence. */
65
- credit: string;
66
- /** The colour artwork's box and its (minified) markup. For a piece drawn in one colour (the glove) it is the path alone. */
67
- box: string;
68
- colour: string;
69
- /** The line artwork: a one-path icon, or `derived` to work it out of the colour one. */
70
- line: {
71
- box: string;
72
- d: string;
73
- } | "derived";
74
- /** A pale shape to lay under line artwork that is only ink (a mask's face), so that it reads as a solid thing in colour. */
75
- underlay?: string;
76
- /** The colour a one-path piece is filled with (a glove's leather). */
77
- leather?: string;
78
- /** The ink of one-colour artwork in the colour style. */
79
- ink?: string;
80
- size?: PieceSize;
81
- }
82
- /** Copied artwork as a piece: the colour version as it was drawn, the line version in `currentColor`. */
83
- export declare function copied(spec: CopiedSpec): Piece<CopiedSpec>;
60
+ /**
61
+ * A shape of varying width along a curve, as a closed path: a cubic Bezier from `a` to `b` through the controls `c1` and `c2`, drawn `width(t)` wide at the fraction `t` of the way along. A bow, a blade or a feather
62
+ * is one of these. `steps` is how many segments each side has.
63
+ */
64
+ export declare function swell(a: readonly [number, number], c1: readonly [number, number], c2: readonly [number, number], b: readonly [number, number], width: (t: number) => number, steps?: number): string;
@@ -1,27 +1,35 @@
1
- // Gear: pieces of equipment drawn flat, in a colour style and a line style (`currentColor`), to match the trophies. A piece is either drawn by us from a list of parts (a path, a colour, how it
2
- // reads as a line) or copied from an open icon set (Noto Emoji, Wikimedia Commons, game-icons.net) with the source named in the module's header, the colour version from one artwork and the line
3
- // version from another (Pictogrammers MDI) or worked out from the colour one. Self-contained: it imports only the shared option and colour helpers of the ball folder.
4
- import { escape, hashOf, mix, num, readColour, resolveOptions, wrapPiece } from "../ball/ball.core.js";
5
- /** A piece of gear from its drawing function. Gear is not turned: `frame` draws it as it is. */
1
+ // Gear: pieces of equipment drawn flat from a list of parts (a path, a colour, how it reads as a line), in the same three styles as the trophies: `metal` (a fill shaded across and along, edged in a darker tone
2
+ // of itself), `color` (flat fills with the same edges) and `line` (`currentColor`). A piece turns like a coin through the one turn every flat drawing shares (emblem.flip.ts): squeezed by the cosine of the yaw,
3
+ // its back mirrored, with a thin rim. Self-contained: it imports only the shared option and colour helpers of the ball folder and the coin-flip turn.
4
+ import { flipSvg } from "../emblem.flip.js";
5
+ import { escape, hashOf, labelled, mix, num, readColour, resolveOptions, wrapPiece } from "../ball/ball.core.js";
6
+ /** A turn in degrees, as a finite number (0 for anything else). */
7
+ const turn = (value) => (typeof value === "number" && Number.isFinite(value) ? value % 360 : 0);
8
+ /** A piece of gear turned like a coin: a flat cut-out with a front, a mirrored back and a thin rim. */
9
+ const flip = (draw) => (o) => flipSvg(draw(o), { yaw: turn(o?.yaw), pitch: turn(o?.pitch), line: o?.style === "line", thick: 0.025 });
10
+ /** A piece of gear from its drawing function. Turned, it flips like a coin (`flipSvg`): the front, then its mirrored back, with a thin rim. */
6
11
  export function defineGear(def) {
7
- return { id: def.id, en: def.en, ja: def.ja, source: def.source, kind: "gear", model: def.model, size: def.size, svg: (o) => def.draw(o), frame: (o) => def.draw(o) };
12
+ return { id: def.id, en: def.en, ja: def.ja, source: def.source, kind: "gear", model: def.model, size: def.size, svg: labelled(def.en, def.ja, (o) => def.draw(o)), frame: labelled(def.en, def.ja, flip(def.draw)) };
8
13
  }
9
- /** A drawn piece: its parts become a document in either style. */
14
+ /** A drawn piece: its parts become a document in the metal, color or line style, whole or turned (the turn is `flipSvg`'s). */
10
15
  export function drawGear(id, title, spec, options) {
11
16
  const o = resolveOptions(options);
12
17
  const line = o.style === "line";
18
+ const flat = options?.style === "color";
13
19
  const main = o.tint ?? spec.main;
14
20
  const accent = o.accent ?? spec.accent ?? mix(main, -0.3);
15
21
  const gid = `g${hashOf(`${id}|${o.tint ?? ""}|${o.accent ?? ""}`)}`;
16
22
  const resolve = (c) => (c === "$main" ? main : c === "$accent" ? accent : c);
17
23
  let body = "";
24
+ let across = false;
25
+ let along = false;
18
26
  for (const p of spec.parts) {
19
27
  const t = p.t === undefined ? "" : ` transform="${escape(p.t)}"`;
20
28
  const fill = resolve(p.fill);
21
29
  const hasFill = fill !== undefined && fill !== "none";
22
30
  if (line) {
23
31
  const mode = p.line ?? "stroke";
24
- if (mode === "none")
32
+ if (mode === "none" || p.fx === true)
25
33
  continue;
26
34
  if (mode === "ink" && hasFill)
27
35
  body += `<path d="${p.d}" fill="currentColor"${t}/>`;
@@ -31,16 +39,31 @@ export function drawGear(id, title, spec, options) {
31
39
  body += `<path d="${p.d}" fill="none" stroke="currentColor" stroke-width="${num(Math.max(p.w ?? 2, 1.6), 2)}"${t}/>`;
32
40
  continue;
33
41
  }
42
+ const op = p.op === undefined ? "" : ` opacity="${p.op}"`;
43
+ if (p.fx === true) {
44
+ if (!flat)
45
+ body += `<path d="${p.d}" fill="${fill}"${op}${t}/>`;
46
+ continue;
47
+ }
34
48
  const stroke = resolve(p.stroke) ?? (hasFill ? mix(readColour(fill) === undefined ? "#888888" : fill, -0.45) : "none");
35
49
  const w = p.w ?? 0.9;
36
- const op = p.op === undefined ? "" : ` opacity="${p.op}"`;
37
50
  body += `<path d="${p.d}" fill="${hasFill ? fill : "none"}" stroke="${stroke}" stroke-width="${num(w, 2)}"${hasFill || stroke === "none" ? ` stroke-linejoin="round"` : ` stroke-linecap="round"`}${op}${t}/>`;
38
- if (hasFill && p.shade !== 0)
39
- body += `<path d="${p.d}" fill="url(#${gid})"${p.shade === undefined ? "" : ` opacity="${p.shade}"`}${t}/>`;
51
+ if (hasFill && !flat) {
52
+ if (p.shade !== 0) {
53
+ along = true;
54
+ body += `<path d="${p.d}" fill="url(#${gid})"${p.shade === undefined ? "" : ` opacity="${p.shade}"`}${t}/>`;
55
+ }
56
+ if (p.cyl !== undefined && p.cyl > 0) {
57
+ across = true;
58
+ body += `<path d="${p.d}" fill="url(#${gid}c)"${p.cyl === 1 ? "" : ` opacity="${p.cyl}"`}${t}/>`;
59
+ }
60
+ }
40
61
  }
41
- const defs = line ? "" : `<linearGradient id="${gid}" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#fff" stop-opacity=".42"/><stop offset=".5" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#000" stop-opacity=".3"/></linearGradient>`;
42
- const g = line ? `<g stroke-linecap="round" stroke-linejoin="round">${body}</g>` : `<g stroke-linecap="round">${body}</g>`;
43
- return wrapPiece({ title: escape(title), size: o.size, theme: o.theme, defs, body: g, box: spec.box ?? "0 0 64 64" });
62
+ const defs = (along ? `<linearGradient id="${gid}" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#fff" stop-opacity=".42"/><stop offset=".5" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#000" stop-opacity=".3"/></linearGradient>` : "") +
63
+ (across ? `<linearGradient id="${gid}c" x2="1"><stop offset="0" stop-color="#000" stop-opacity=".34"/><stop offset=".26" stop-color="#fff" stop-opacity=".5"/><stop offset=".55" stop-color="#fff" stop-opacity="0"/><stop offset=".88" stop-color="#000" stop-opacity=".22"/><stop offset="1" stop-color="#000" stop-opacity=".4"/></linearGradient>` : "");
64
+ const box = spec.box ?? "0 0 64 64";
65
+ const inner = line ? `<g stroke-linecap="round" stroke-linejoin="round">${body}</g>` : `<g stroke-linecap="round">${body}</g>`;
66
+ return wrapPiece({ title: escape(title), size: o.size, theme: o.theme, defs, body: inner, box });
44
67
  }
45
68
  /** The pieces' drawing helpers: shapes written as path strings. */
46
69
  export const rect = (x, y, w, h, r = 0) => r === 0 ? `M${x} ${y}h${w}v${h}h${-w}z` : `M${x + r} ${y}h${w - 2 * r}a${r} ${r} 0 0 1 ${r} ${r}v${h - 2 * r}a${r} ${r} 0 0 1 ${-r} ${r}h${-(w - 2 * r)}a${r} ${r} 0 0 1 ${-r} ${-r}v${-(h - 2 * r)}a${r} ${r} 0 0 1 ${r} ${-r}z`;
@@ -58,25 +81,6 @@ export function capsule(x1, y1, x2, y2, w) {
58
81
  const f = (n) => String(Math.round(n * 100) / 100);
59
82
  return `M${f(x1 + nx)} ${f(y1 + ny)}L${f(x2 + nx)} ${f(y2 + ny)}A${r} ${r} 0 0 0 ${f(x2 - nx)} ${f(y2 - ny)}L${f(x1 - nx)} ${f(y1 - ny)}A${r} ${r} 0 0 0 ${f(x1 + nx)} ${f(y1 + ny)}z`;
60
83
  }
61
- /** The ink of a copied colour drawing worked out as a line drawing: dark fills and strokes become `currentColor`, light ones are left out, the rest are a faint tint of it. Used where no other line artwork exists. */
62
- export function monoOf(markup) {
63
- const lum = (c) => {
64
- const rgb = readColour(c);
65
- if (rgb === undefined)
66
- return 0.5;
67
- const [r, g, b] = rgb.map((v) => v / 255);
68
- return 0.2126 * r + 0.7152 * g + 0.0722 * b;
69
- };
70
- return markup
71
- .replace(/<(linearGradient|radialGradient)[\s\S]*?<\/\1>/g, "")
72
- .replace(/(fill|stroke)="(#[0-9a-fA-F]{3,6})"/g, (_m, attr, c) => {
73
- const l = lum(c);
74
- if (attr === "stroke")
75
- return `stroke="currentColor"`;
76
- return l < 0.5 ? `fill="currentColor"` : l > 0.86 ? `fill="none"` : `fill="currentColor" fill-opacity=".4"`;
77
- })
78
- .replace(/(fill|stroke)="url\(#[^)]*\)"/g, (_m, attr) => (attr === "fill" ? `fill="currentColor" fill-opacity=".25"` : `stroke="currentColor"`));
79
- }
80
84
  /** A piece we drew: the common case of `defineGear`. */
81
85
  export function drawn(id, en, ja, spec, size) {
82
86
  return defineGear({ id, en, ja, source: "drawn", size, model: spec, draw: (o) => drawGear(id, en, spec, o) });
@@ -95,26 +99,29 @@ export function strings(cx, cy, rx, ry, step) {
95
99
  }
96
100
  return d;
97
101
  }
98
- /** Copied artwork as a piece: the colour version as it was drawn, the line version in `currentColor`. */
99
- export function copied(spec) {
100
- const draw = (options) => {
101
- const o = resolveOptions(options);
102
- const desc = spec.credit;
103
- if (o.style === "line") {
104
- if (spec.line === "derived")
105
- return wrapPiece({ title: escape(spec.en), desc, size: o.size, theme: o.theme, box: spec.box, body: `<g fill="currentColor" stroke-width="${num(Number(spec.box.split(" ")[2]) / 40, 2)}" stroke-linejoin="round" stroke-linecap="round">${monoOf(spec.colour)}</g>` });
106
- return wrapPiece({ title: escape(spec.en), desc, size: o.size, theme: o.theme, box: spec.line.box, body: `<path d="${spec.line.d}" fill="currentColor"/>` });
107
- }
108
- if (spec.leather !== undefined) {
109
- const gid = `g${hashOf(spec.id)}`;
110
- const leather = o.tint ?? spec.leather;
111
- const defs = `<linearGradient id="${gid}" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#fff" stop-opacity=".4"/><stop offset=".5" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#000" stop-opacity=".35"/></linearGradient>`;
112
- const body = `<path d="${spec.colour}" fill="${leather}" stroke="${mix(leather, -0.5)}" stroke-width="${num(Number(spec.box.split(" ")[2]) / 200, 2)}"/><path d="${spec.colour}" fill="url(#${gid})"/>`;
113
- return wrapPiece({ title: escape(spec.en), desc, size: o.size, theme: o.theme, box: spec.box, defs, body });
114
- }
115
- const under = spec.underlay === undefined ? "" : `<path d="${spec.underlay}" fill="#f4f1ea" stroke="#9aa3ae" stroke-width="1.2"/>`;
116
- const body = spec.ink === undefined ? spec.colour : `<g fill="${o.tint ?? spec.ink}">${spec.colour}</g>`;
117
- return wrapPiece({ title: escape(spec.en), desc, size: o.size, theme: o.theme, box: spec.box, body: under + body });
102
+ /**
103
+ * A shape of varying width along a curve, as a closed path: a cubic Bezier from `a` to `b` through the controls `c1` and `c2`, drawn `width(t)` wide at the fraction `t` of the way along. A bow, a blade or a feather
104
+ * is one of these. `steps` is how many segments each side has.
105
+ */
106
+ export function swell(a, c1, c2, b, width, steps = 14) {
107
+ const at = (t) => {
108
+ const u = 1 - t;
109
+ return [u * u * u * a[0] + 3 * u * u * t * c1[0] + 3 * u * t * t * c2[0] + t * t * t * b[0], u * u * u * a[1] + 3 * u * u * t * c1[1] + 3 * u * t * t * c2[1] + t * t * t * b[1]];
118
110
  };
119
- return { id: spec.id, en: spec.en, ja: spec.ja, source: spec.source, kind: "gear", model: spec, size: spec.size, svg: draw, frame: draw };
111
+ const f = (n) => String(Math.round(n * 10) / 10);
112
+ const left = [];
113
+ const right = [];
114
+ for (let i = 0; i <= steps; i++) {
115
+ const t = i / steps;
116
+ const p = at(t);
117
+ const q = at(Math.min(1, t + 0.01));
118
+ const r = at(Math.max(0, t - 0.01));
119
+ const dx = q[0] - r[0];
120
+ const dy = q[1] - r[1];
121
+ const l = Math.hypot(dx, dy) || 1;
122
+ const h = width(t) / 2;
123
+ left.push(`${f(p[0] - (dy / l) * h)} ${f(p[1] + (dx / l) * h)}`);
124
+ right.push(`${f(p[0] + (dy / l) * h)} ${f(p[1] - (dx / l) * h)}`);
125
+ }
126
+ return `M${left.join("L")}L${right.reverse().join("L")}z`;
120
127
  }
@@ -1 +1 @@
1
- export declare const GEAR_CRICKET_BAT: import("./gear.index.ts").Piece<import("./gear.core.ts").CopiedSpec>;
1
+ export declare const GEAR_CRICKET_BAT: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;
@@ -1,15 +1,17 @@
1
- // Gear: Cricket bat and ball. Copied, with changes, from Noto Emoji `2D/svg/emoji_u1f3cf.svg` (googlefonts/noto-emoji at e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e), Apache-2.0, Copyright 2013 Google, Inc. All Rights Reserved..
2
- // SHA-256 of the file as published: ec2c3f4aa253eb20587d0699fb2193495b040d10a3078e2bee74f5b8253382be.
3
- // The line style is the one-path icon Pictogrammers Material Design Icons `svg/cricket.svg` (Templarian/MaterialDesign-SVG at 9e04201d4557e729822fb57f62a316c3dea1d4a8), Apache-2.0, icon by Google (SHA-256 51f6c1c49585e3226067f3379b03892b756d4fb86cecbcbfe0895648a237424f).
4
- // Changes: editor wrappers, metadata and ids removed, coordinates written absolute and rounded. Modified files are marked as the Apache-2.0 licence asks. Do not edit by hand: scripts/dougu/build-gear.mjs writes this file.
5
- import { copied } from "./gear.core.js";
6
- export const GEAR_CRICKET_BAT = /* @__PURE__ */ copied({
7
- id: "gear:cricket-bat",
8
- en: "Cricket bat and ball",
9
- ja: "クリケットのバットとボール",
10
- source: "noto",
11
- credit: "Noto Emoji `2D/svg/emoji_u1f3cf.svg` (googlefonts/noto-emoji at e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e), Apache-2.0, Copyright 2013 Google, Inc. All Rights Reserved.. Line style: Pictogrammers Material Design Icons `svg/cricket.svg` (Templarian/MaterialDesign-SVG at 9e04201d4557e729822fb57f62a316c3dea1d4a8), Apache-2.0, icon by Google.",
12
- box: "0 0 128 128",
13
- colour: `<g><g><g><path fill="#D06F1D" d="M63.4 45L68.9 37.8C68.9 37.8 70 36.1 71 36.2C72.1 36.3 73.7 39.6 77.9 39.3C82.2 38.9 86.3 37.8 86.3 37.8L89.7 42.6L89.1 45.8C89.1 45.8 87.8 49.6 88.6 52.2C89.2 54.5 91.4 55.9 91.5 56.9C91.5 58.3 25.6 123.4 24.9 123.9C24.2 124.3 17.4 123.4 16.7 123.1C16 122.7 4.8 109.9 4.8 109.9C4.8 109.9 4.3 104.3 4.9 103.3C5 103.1 5.4 102.7 5.7 102.5C10.5 98.7 28.5 91.5 42.3 77.9C48.2 72.1 63.4 45 63.4 45Z"/><path fill="#AF570C" d="M110.6 14.7V9.8C110.6 9.8 112.7 5.3 113.2 4.6C113.8 3.9 118 3.1 121 6.3C124 9.5 123.4 12.7 123.2 13.1C122.8 13.6 117.5 17 117.5 17L110.6 14.7Z"/><path fill="#EB8B34" d="M68.9 37.8C69.4 37.6 71.9 41.5 75.1 41.7C78.2 41.8 83.4 41.5 83.4 41.5L86 45.6L85.9 48.4C85.9 48.4 85.3 51.5 85.9 53.4C86.5 55.3 87.7 56.3 87.8 57C88 57.7 25.6 120.6 25 120.8C24.4 120.9 17.9 120.8 17.4 120.4C16.9 120 7.8 109.8 7.4 109.1C7 108.4 5.5 103.4 5.7 102.5C5.8 101.6 68.4 38.1 68.9 37.8Z"/><path fill="#474C4F" d="M81.7 38.6C81.7 38.4 110.1 10.4 110.1 10.4L117 17.6L88.8 46.2C88.8 46.2 80 47.7 80.1 47.3C80.2 46.9 81.7 38.6 81.7 38.6Z"/><polygon fill="#E0E0E0" points="97.1 23.2 100.4 19.9 107.6 27.1 104.2 30.5"/><path fill="#E0E0E0" d="M103.5 16.9L110.6 24.1L117.9 16.7C117.9 16.7 110.8 9.4 110.6 9.6C110.5 9.8 103.5 16.9 103.5 16.9Z"/><path fill="#AF570C" d="M52.7 74.4C53.3 75.1 55.1 73.6 56.3 72.6C56.8 72.2 65.7 65.2 73.7 58.4C81.7 51.7 89.1 46.5 89.1 45.9C89.2 45.2 82.4 38.7 81.7 38.6C81 38.6 75.2 45.3 68.9 52.9C62 61.3 54.8 70.2 54.6 70.5C53.4 72.1 52.2 73.9 52.7 74.4Z"/></g><g><circle fill="#A52415" cx="81.54" cy="104.22" r="15.99"/><path fill="#D26051" d="M74.9 95.2C75.5 95.8 75.6 97.2 73.6 99.6C72.7 100.7 71.9 101.9 71.5 103.2C71.3 103.6 70.7 105.6 69.5 105.6C68.3 105.6 68 104.6 67.9 103.6C67.8 100.5 69 98.1 70.1 96.7C71.2 95.2 73.2 93.4 74.9 95.2Z"/><path fill="#7A1008" d="M96.7 99.3C95.7 96.6 95.1 95.2 92.8 92.9C91.8 91.8 89.8 90.4 88.2 89.7C88.5 95.5 85.8 100.5 81.7 104.7C77.5 108.8 72.5 111.5 67 111C67.8 112.6 69.2 114.4 70.2 115.5C72.5 117.8 73.6 118.2 76 119.2C80.3 118.4 85.6 115.2 89.1 111.7C92.5 108.3 95.4 103.5 96.7 99.3Z"/><g><path fill="#FDE7C4" d="M82.4 114.5C82.1 114.8 81.8 115 81.4 115.1C81.1 115.3 80.8 115.5 80.6 115.7L80.5 115.7C80.3 116 80.2 116.4 80.5 116.7C80.6 116.9 80.8 117 81.1 117C81.2 117 81.3 116.9 81.4 116.9L81.7 116.7C82.3 116.4 82.8 116.1 83.3 115.7C83.6 115.4 83.6 115.1 83.4 114.8C83.2 114.4 82.8 114.3 82.4 114.5Z"/><path fill="#FDE7C4" d="M86.9 111.4C86.9 111.4 86.9 111.4 86.9 111.4C86.6 111.4 86.4 111.5 86.2 111.6L86.1 111.8C85.8 112.1 85.4 112.3 85.1 112.6L84.8 112.9L84.8 112.9C84.4 113.2 84.5 113.6 84.7 113.9C84.9 114.1 85.1 114.2 85.3 114.2C85.5 114.2 85.6 114.1 85.8 114C86.4 113.5 86.9 113.1 87.4 112.6C87.7 112.4 87.7 111.9 87.4 111.6C87.3 111.5 87.1 111.4 86.9 111.4Z"/><path fill="#FDE7C4" d="M78 116.8C77.9 116.9 77.7 117 77.6 117C77.2 117.1 76.9 117.3 76.6 117.4C76.5 117.4 76.5 117.4 76.4 117.4C76.2 117.5 76 117.5 75.9 117.7C75.6 117.9 75.6 118.3 75.8 118.6C75.9 118.9 76.1 119 76.4 119C76.5 119 76.5 119 76.6 118.9C76.8 118.9 77 118.8 77.2 118.7C77.8 118.6 78.3 118.4 78.8 118.1C79.1 117.8 79.1 117.4 78.9 117.1C78.7 116.8 78.3 116.7 78 116.8Z"/><path fill="#FDE7C4" d="M96 99.2C95.7 99 95.3 99.1 95.1 99.3L95.1 99.3C95 99.5 94.9 99.7 94.8 99.9C94.8 99.9 94.8 100 94.7 100.1C94.6 100.3 94.5 100.5 94.4 100.8C94.4 100.8 94.4 100.9 94.3 101C94.2 101.4 93.8 102 94.5 102.4C94.6 102.4 94.7 102.5 94.8 102.5C95 102.5 95.2 102.4 95.4 102.2C95.7 101.7 95.9 101.1 96.1 100.6C96.2 100.5 96.3 100.3 96.3 100.1C96.5 99.8 96.4 99.4 96 99.2Z"/><path fill="#FDE7C4" d="M92.8 103.9L92.8 103.9C92.7 104.1 92.5 104.3 92.4 104.5C92.3 104.7 92.1 105 92 105.2C91.9 105.2 91.9 105.3 91.9 105.3C91.6 105.6 91.2 106.2 91.8 106.7C92 106.8 92.1 106.8 92.3 106.8C92.5 106.8 92.7 106.8 92.8 106.6C93.2 106 93.6 105.4 94 104.8C94.2 104.5 94.1 104 93.8 103.8C93.5 103.6 93.1 103.6 92.8 103.9Z"/><path fill="#FDE7C4" d="M89.9 108L89.8 108C89.4 108.5 88.9 109 88.5 109.5C88.2 109.8 88.3 110.3 88.5 110.5C88.7 110.7 88.9 110.8 89.1 110.8C89.2 110.8 89.4 110.7 89.6 110.5C90.1 110 90.5 109.5 91 109C91.1 108.8 91.2 108.6 91.1 108.4C91.1 108.2 91 108 90.9 107.9C90.6 107.7 90.1 107.7 89.9 108Z"/></g><path fill="#A52415" d="M95.9 97.2C95.7 95.8 95.1 94.8 93.3 92.9C92.5 92.1 91.2 91 90.2 90.8C91.2 95 88.7 101.3 83.7 106.3C78.6 111.4 72.3 113.9 68.1 112.9C68.1 113.7 69.2 115.1 70 115.9C71.3 117.2 73.4 118.7 74.5 118.5C79 117.4 83.7 114.7 87.9 110.6C92.1 106.4 94.8 101.7 95.9 97.2Z"/><g><path fill="#FDE7C4" d="M89.7 90.4C89.4 90.2 89 90.3 88.8 90.6C88.7 90.7 88.6 90.8 88.6 91C88.6 91.3 88.5 93.1 88.8 93.4C88.9 93.6 89.1 93.7 89.4 93.7C89.4 93.7 89.5 93.7 89.6 93.7C89.9 93.6 90.1 93.3 90.1 93C90.2 92.8 90.2 92.2 90.2 92.1L90.2 91.9C90.2 91.4 90.2 90.7 89.7 90.4Z"/><path fill="#FDE7C4" d="M88.3 95.3L88.3 95.3C88.1 95.7 88 96 87.8 96.4C87.7 96.7 87.6 97 87.5 97.3C87.4 97.5 87.4 97.7 87.5 97.9C87.6 98.1 87.7 98.2 87.9 98.3C88 98.4 88.1 98.4 88.2 98.4C88.4 98.4 88.6 98.3 88.7 98.1C89 97.7 89.2 97.2 89.3 96.7C89.4 96.5 89.4 96.4 89.5 96.3C89.7 95.9 89.6 95.4 89.3 95.2C89 95 88.6 95 88.3 95.3Z"/><path fill="#FDE7C4" d="M86.3 99.7L86.3 99.8C86.1 100 86 100.2 85.8 100.4C85.6 100.8 85.4 101.1 85.2 101.5C85.1 101.6 85 101.8 85 102C85.1 102.2 85.2 102.4 85.4 102.5C85.5 102.6 85.7 102.6 85.8 102.6C85.8 102.6 85.9 102.6 85.9 102.6C86.3 102.5 86.5 102.2 86.7 101.9C86.8 101.8 86.8 101.7 86.9 101.6C87.1 101.3 87.3 101 87.5 100.6C87.7 100.3 87.6 99.9 87.3 99.7C87 99.4 86.6 99.4 86.3 99.7Z"/><path fill="#FDE7C4" d="M83.4 103.7L83.4 103.7C83 104.2 82.5 104.7 82.1 105.1C81.8 105.4 81.8 105.9 82.1 106.2C82.3 106.3 82.4 106.4 82.6 106.4C83 106.4 83.2 106.1 83.4 105.9C83.5 105.8 83.6 105.7 83.7 105.6C83.7 105.5 83.9 105.4 84 105.3C84.4 104.9 85 104.3 84.5 103.6C84.2 103.4 83.7 103.4 83.4 103.7Z"/><path fill="#FDE7C4" d="M79.9 107C79.6 107.3 79.2 107.6 78.8 107.9L78.3 108.2L78.3 108.2C78 108.5 78 109 78.3 109.2C78.4 109.4 78.6 109.5 78.8 109.5C79 109.5 79.2 109.4 79.3 109.3L79.6 109.1C79.7 109 79.9 108.9 80.1 108.8C80.5 108.5 81 108.2 81.1 107.7C81.2 107.5 81.1 107.3 81 107.1C80.7 106.8 80.3 106.7 79.9 107Z"/><path fill="#FDE7C4" d="M76 109.6C75.7 109.7 75.3 109.9 75 110C74.7 110.2 74.4 110.3 74 110.5L74 110.5C73.7 110.7 73.7 111.1 73.9 111.5C74.1 111.7 74.3 111.8 74.5 111.8C74.6 111.8 74.7 111.8 74.8 111.7C75 111.7 75.2 111.6 75.4 111.5C75.6 111.4 75.7 111.4 75.8 111.3L76 111.2C76.1 111.2 76.1 111.2 76.2 111.1C76.5 111 76.9 110.8 77 110.5C77.1 110.3 77.1 110.1 77 109.9C76.8 109.5 76.3 109.4 76 109.6Z"/><path fill="#FDE7C4" d="M71.6 111.2C71.1 111.3 70.7 111.3 70.2 111.4C70 111.4 69.8 111.4 69.5 111.4C69 111.5 68.9 111.8 68.9 112C68.9 112.4 69.2 112.7 69.6 112.8C69.7 112.8 69.9 112.8 70 112.8C70.8 112.8 72 112.7 72.3 112.4C72.5 112.2 72.6 111.8 72.4 111.5C72.2 111.2 71.9 111.1 71.6 111.2Z"/></g></g></g></g>`,
14
- line: { box: "0 0 24 24", d: `M14.34 17.77L15.75 16.36L20 20.58L18.56 22L14.34 17.77M18.5 2A3.5 3.5 0 0 1 22 5.5A3.5 3.5 0 0 1 18.5 9A3.5 3.5 0 0 1 15 5.5A3.5 3.5 0 0 1 18.5 2M2.24 7.11L5.07 4.28C5.46 3.89 6.09 3.89 6.5 4.28L14.97 12.77C15.36 13.16 15.36 13.79 14.97 14.18L12.14 17C11.75 17.4 11.12 17.4 10.72 17L2.24 8.53C1.85 8.13 1.85 7.5 2.24 7.11Z` },
1
+ // A cricket bat and a ball, drawn for this package: a broad willow blade with a ridge down the back, a cane handle with a grip, and a red ball with its seam.
2
+ import { capsule, circle, drawn } from "./gear.core.js";
3
+ const T = "rotate(34 32 32)";
4
+ export const GEAR_CRICKET_BAT = /* @__PURE__ */ drawn("gear:cricket-bat", "Cricket bat", "クリケットのバット", {
5
+ main: "#e6b96e",
6
+ accent: "#2a2f38",
7
+ parts: [
8
+ { d: capsule(32, 2, 32, 26, 3.4), fill: "#c99a58", t: T, cyl: 1, shade: 0 },
9
+ { d: capsule(32, 2, 32, 16, 4.4), fill: "$accent", t: T, cyl: 0.7, shade: 0 },
10
+ { d: "M25.8 24.4h12.4L40.2 30V57a3 3 0 0 1-3 3H26.8a3 3 0 0 1-3-3V30z", fill: "$main", t: T, cyl: 0.9, shade: 0 },
11
+ { d: "M32 31v27", fill: "none", stroke: "#b88540", w: 0.9, t: T, op: 0.9, line: "none", fx: true },
12
+ { d: "M25 50.5h14", fill: "none", stroke: "#b88540", w: 0.8, t: T, line: "none", fx: true },
13
+ { d: "M28.4 25.4L26.2 30.4", fill: "none", stroke: "#fff", w: 1.1, t: T, op: 0.5, line: "none", fx: true },
14
+ { d: circle(53, 52.6, 6), fill: "#c4262e", stroke: "#6e1217", cyl: 0, shade: 0.7 },
15
+ { d: "M48.6 48.6Q52 53 48.4 57M57.4 48.2Q54 52.6 57.6 57", fill: "none", stroke: "#f4ece0", w: 0.9, op: 0.9, line: "none" },
16
+ ],
15
17
  });
@@ -1 +1 @@
1
- export declare const GEAR_FIELD_HOCKEY_STICK: import("./gear.index.ts").Piece<import("./gear.core.ts").CopiedSpec>;
1
+ export declare const GEAR_FIELD_HOCKEY_STICK: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;
@@ -1,15 +1,16 @@
1
- // Gear: Field hockey stick and ball. Copied, with changes, from Noto Emoji `2D/svg/emoji_u1f3d1.svg` (googlefonts/noto-emoji at e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e), Apache-2.0, Copyright 2013 Google, Inc. All Rights Reserved..
2
- // SHA-256 of the file as published: 12fd8768e49db168f6f3d5db786ec02928ea03938895d859b883a25d885de5ed.
3
- // The line style is the one-path icon Wikimedia Commons https://commons.wikimedia.org/wiki/File:Field_hockey_stick_with_ball_Pinhead_icon.svg (revision 1252209397), CC0, Author: Quincy Morgan, Temaki contributors | Credit: https://github.com/waysidemapping/pinhead/blob/v12.0.0/icons/hand_tools/field_hockey_stick_with_ball.svg (SHA-256 aad932b96f4c0dc9a562bd4980135167af478faead92f143f91e679e0996238e).
4
- // Changes: editor wrappers, metadata and ids removed, coordinates written absolute and rounded. Modified files are marked as the Apache-2.0 licence asks. Do not edit by hand: scripts/dougu/build-gear.mjs writes this file.
5
- import { copied } from "./gear.core.js";
6
- export const GEAR_FIELD_HOCKEY_STICK = /* @__PURE__ */ copied({
7
- id: "gear:field-hockey-stick",
8
- en: "Field hockey stick and ball",
9
- ja: "フィールドホッケーのスティックとボール",
10
- source: "noto",
11
- credit: "Noto Emoji `2D/svg/emoji_u1f3d1.svg` (googlefonts/noto-emoji at e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e), Apache-2.0, Copyright 2013 Google, Inc. All Rights Reserved.. Line style: Wikimedia Commons https://commons.wikimedia.org/wiki/File:Field_hockey_stick_with_ball_Pinhead_icon.svg (revision 1252209397), CC0, Author: Quincy Morgan, Temaki contributors | Credit: https://github.com/waysidemapping/pinhead/blob/v12.0.0/icons/hand_tools/field_hockey_stick_with_ball.svg.",
12
- box: "0 0 128 128",
13
- colour: `<g><g><path fill="#D8CDC9" d="M88.6 88.4C80.2 88.1 70.5 94 70.5 106.6C70.5 117.1 78.9 123.8 88.4 123.7C97.5 123.6 105.7 117.1 106 106.9C106.3 95.5 97.9 88.7 88.6 88.4Z"/><path fill="#EAEAEA" d="M81 113C85.2 115 92.6 114.8 95.9 109C99.7 102.3 96.3 94.6 91.4 93C86.6 91.3 79.9 92 76.8 97.2C74.7 100.6 73.6 109.5 81 113Z"/><path fill="#FFFFFF" d="M77.9 109.3C75.5 110 72 100.7 77.6 95C83.6 88.8 91.3 91.2 91.4 93.7C91.8 98.2 85.6 94.7 82.2 98.9C78.5 103.3 81.8 108.2 77.9 109.3Z"/><path fill="none" stroke="#004FAD" stroke-miterlimit="10" d="M47.2 96.6"/><path fill="#5F6165" d="M79.4 48.3L108.8 12.5C108.8 12.5 108.1 10.4 108.2 9.5C108.3 8.5 111.1 3.9 113.4 3.6C116.7 3.2 123.3 8.1 123.6 11.4C123.8 13.4 120.5 17.4 119 17.6C118.2 17.8 116.3 17.5 116.3 17.5L87.1 54.8L79.4 48.3Z"/><path fill="none" stroke="#5F6165" stroke-miterlimit="10" d="M35.4 97.6"/><path fill="#EA8D37" d="M87.8 48L45.2 106.8L29.6 104.1C29.6 104.1 26.5 104.4 24.9 102.2C23.8 100.5 25.1 97 25 94.5C24.8 90.3 21 88.2 21 88.2L17.4 95L10.2 115.7C10.2 115.7 11.2 117.9 15.6 120.9C18.9 123.2 25 124.1 27.1 124.1C29.2 124.1 32.9 123.5 35.4 122.3C42.6 119 48.3 109.9 48.3 109.9L48.2 109.8C49.5 108 53.5 102.7 58.2 96.3C63.3 89.3 69.3 80.7 72.8 75.7C77 69.8 90.9 49.9 90.9 49.9L87.8 48Z"/><path fill="#FFA828" d="M89.5 48.7L83.2 43.6C83.2 43.6 31.7 101.5 30.2 103.2C29.5 103.9 27.5 104.8 26.3 104.8C25.2 104.8 23.8 104.2 22.9 102.8C20.9 99.7 23.8 96.8 23.2 92.1C22.5 87.4 18 86.4 15.4 86.6C13.1 86.8 5.6 88.1 5.1 100.7C4.7 109.4 9 115.1 11.9 117.6C13.6 119 17.3 120.9 22 121.2C25.1 121.5 28.7 121 32.4 119.3C38.6 116.4 43 110.6 45.3 107.5C47.6 104.4 89.5 48.7 89.5 48.7Z"/><path fill="#848582" d="M86.2 43.4C86.2 44.2 87.1 45.3 89.8 44.4C92.1 43.6 91.4 41.8 92.6 40.5C93.7 39.3 94.9 39.6 96.2 37.7C97.4 35.8 97.2 34.4 98.3 33C99.8 31.3 100.4 32.4 101.8 30.7C103 29.2 102.1 28.3 103.2 26.9C104.5 25.2 104.9 26.5 106.6 24.6C108.2 22.8 107.3 22.1 108.3 20.5C109.1 19.3 110.4 19.2 111.3 18.1C112.9 16.2 113.4 15.2 112.2 14.4C110.9 13.4 110.1 15.2 109.2 16.1C107.9 17.4 107.2 17.1 106.1 18.3C104.4 20 105.4 21 104.1 22.5C102.9 24.1 101.9 23.3 100.6 24.8C99.4 26.4 99.8 27.8 98.9 28.7C98 29.6 97.3 29.3 96 30.7C94.3 32.5 95.1 34.1 93.7 35.8C92.6 37.2 91.4 36.6 90.2 38C89 39.4 89.2 40.8 88.7 41.3C87.6 42.2 86.2 41.9 86.2 43.4Z"/><g><path fill="#CCC5C2" d="M45.4 107.4L48.3 109.9L51.8 105L49 102.6C47.1 105.1 45.8 106.9 45.4 107.4Z"/><path fill="#E2E0E4" d="M38.6 93.8L34.5 98.3L45.4 107.4C45.8 106.9 47.1 105.1 49 102.6L38.6 93.8Z"/><path fill="#CCC5C2" d="M51 99.9L53.8 102.3L57.4 97.3L54.7 95C53.4 96.8 52.1 98.4 51 99.9Z"/><path fill="#E2E0E4" d="M44.9 86.6L40.9 91.2L51 99.9C52.1 98.4 53.4 96.8 54.7 95L44.9 86.6Z"/><path fill="#CCC5C2" d="M80.1 61.2L81.9 62.7L85.4 57.8L83.7 56.3C82.6 57.8 81.4 59.4 80.1 61.2Z"/><path fill="#E2E0E4" d="M77 50.6L73 55.2L80.1 61.2C81.4 59.4 82.6 57.8 83.7 56.3L77 50.6Z"/><path fill="#CCC5C2" d="M90.9 49.9L83.3 43.5L83.3 43.6L89.5 48.7C89.5 48.7 88.1 50.6 85.8 53.6L87.3 55L90.9 49.9Z"/><path fill="#E2E0E4" d="M83.3 43.6L79.3 48L85.8 53.6C88.1 50.6 89.5 48.7 89.5 48.7L83.3 43.6Z"/></g></g></g>`,
14
- line: { box: "0 0 15 15", d: `M13.9 9.69C13.56 9.24 12.94 9.15 12.5 9.5C12.09 9.8 11.99 10.35 12.23 10.79L12.3 10.9C12.63 11.34 12.54 11.96 12.1 12.3C11.66 12.63 11.03 12.54 10.71 12.1L9.21 10.1L7.61 11.31L9.11 13.3C10.11 14.63 11.98 14.89 13.31 13.89C14.63 12.9 14.89 11.02 13.9 9.69ZM0.9 0.7C0.45 1.03 0.37 1.66 0.7 2.1L7.31 10.91L8.91 9.7L2.3 0.9C1.96 0.46 1.34 0.37 0.9 0.7ZM3.02 14.02C4.12 14.02 5.01 13.12 5.01 12.02C5.01 10.92 4.12 10.02 3.02 10.02C1.92 10.02 1.02 10.92 1.02 12.02C1.02 13.12 1.92 14.02 3.02 14.02Z` },
1
+ // A field hockey stick and ball, drawn for this package: a long taped shaft and a head that hooks round at the foot, with a flat face, beside a white ball.
2
+ import { capsule, circle, drawn } from "./gear.core.js";
3
+ const T = "rotate(24 32 32)";
4
+ export const GEAR_FIELD_HOCKEY_STICK = /* @__PURE__ */ drawn("gear:field-hockey-stick", "Field hockey stick", "ホッケーのスティック", {
5
+ main: "#dcb06a",
6
+ accent: "#2a2f38",
7
+ parts: [
8
+ { d: capsule(32, 1.5, 32, 44, 3.6), fill: "$main", t: T, cyl: 1, shade: 0 },
9
+ { d: capsule(32, 1.5, 32, 16, 4.2), fill: "$accent", t: T, cyl: 0.7, shade: 0 },
10
+ { d: "M24.2 41.2L29.8 43.6Q29.4 50.4 33.2 52.2H43.6Q46.6 52.4 46.6 55.6Q46.6 58.8 43.6 58.8H32.4Q22.8 58 23.4 48.4Q23.6 44.6 24.2 41.2Z", fill: "$main", cyl: 0.9, shade: 0 },
11
+ { d: "M25.4 47.4Q25.6 55 33 56.6", fill: "none", stroke: "#fff", w: 1.1, op: 0.55, line: "none", fx: true },
12
+ { d: capsule(31.5, 22.4, 31.5, 27.4, 4.2).replace(/^/, ""), fill: "$accent", t: T, line: "none", shade: 0.3 },
13
+ { d: circle(54.5, 54.6, 4.8), fill: "#f4f2ee", stroke: "#8f98a3", shade: 0.9 },
14
+ { d: "M51.4 51.8a4.6 4.6 0 0 1 3-1", fill: "none", stroke: "#fff", w: 1, line: "none", fx: true },
15
+ ],
15
16
  });
@@ -1 +1 @@
1
- export declare const GEAR_FOOTBALL_HELMET: import("./gear.index.ts").Piece<import("./gear.core.ts").CopiedSpec>;
1
+ export declare const GEAR_FOOTBALL_HELMET: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;
@@ -1,15 +1,16 @@
1
- // Gear: Football helmet. Copied, with changes, from Wikimedia Commons https://commons.wikimedia.org/wiki/File:FootballHelmet.svg (revision 1195239242), CC0, Author: Simanek | Credit: https://openclipart.org/detail/86827/football-helmet.
2
- // SHA-256 of the file as published: dce506482424033bd40355528d642e3990148a553467eb9fe96dd4563e91b7b3.
3
- // The line style is the one-path icon Pictogrammers Material Design Icons `svg/football-helmet.svg` (Templarian/MaterialDesign-SVG at 9e04201d4557e729822fb57f62a316c3dea1d4a8), Apache-2.0, icon by Austin Andrews (SHA-256 9d8b31c33222c47cc70f0a4c87fb3decb4ef70a9c8aa3117ab6339a78ac88456).
4
- // Changes: editor wrappers, metadata and ids removed, coordinates written absolute and rounded. Modified files are marked as the Apache-2.0 licence asks. Do not edit by hand: scripts/dougu/build-gear.mjs writes this file.
5
- import { copied } from "./gear.core.js";
6
- export const GEAR_FOOTBALL_HELMET = /* @__PURE__ */ copied({
7
- id: "gear:football-helmet",
8
- en: "Football helmet",
9
- ja: "アメリカンフットボールのヘルメット",
10
- source: "commons",
11
- credit: "Wikimedia Commons https://commons.wikimedia.org/wiki/File:FootballHelmet.svg (revision 1195239242), CC0, Author: Simanek | Credit: https://openclipart.org/detail/86827/football-helmet. Line style: Pictogrammers Material Design Icons `svg/football-helmet.svg` (Templarian/MaterialDesign-SVG at 9e04201d4557e729822fb57f62a316c3dea1d4a8), Apache-2.0, icon by Austin Andrews.",
12
- box: "0 0 1000 1000",
13
- colour: `<defs><radialGradient id="afd320" gradientUnits="userSpaceOnUse" cy="361.2" cx="444.8" gradientTransform="matrix(-1.3068 0 0 -1.1468 1040.3 728.58)" r="369.8"><stop stop-color="#ffffff" offset="0"/><stop stop-color="#cbcbcb" offset="1"/></radialGradient><linearGradient id="afd321" y2="594.6" gradientUnits="userSpaceOnUse" x2="950.5" y1="594.6" x1="641.1"><stop stop-color="#a80400" offset="0"/><stop stop-color="#ac0500" offset="1"/></linearGradient><linearGradient id="afd322" y2="624" gradientUnits="userSpaceOnUse" x2="839.5" y1="730.9" x1="555"><stop stop-color="#c20500" offset="0"/><stop stop-color="#e00701" offset="1"/></linearGradient><linearGradient id="afd323" y2="432.9" gradientUnits="userSpaceOnUse" x2="743.4" y1="343.9" x1="701.6"><stop stop-color="#ffffff" offset="0"/><stop stop-color="#c5c5c5" offset="0.76"/><stop stop-color="#5d5d5d" offset="1"/></linearGradient></defs><g><path fill="#bf0600" d="M935 820C943 822 954 807 955 788C957 770 959 724 959 687C959 650 954 609 950 593C946 577 928 559 923 574C918 586 924 587 928 605C932 622 939 662 939 707C939 752 937 773 937 784C937 795 929 793 927 796C926 798 922 803 923 809C924 815 935 820 935 820Z"/><path fill="url(#afd321)" d="M710 375C716 391 748 476 754 499C761 523 761 523 765 530C766 533 769 535 776 535C787 535 821 535 848 538C876 541 897 546 911 555C925 564 935 577 938 584C941 591 934 594 928 592C922 591 917 586 911 580C905 574 884 563 856 560C827 556 781 553 779 553C776 553 775 552 775 558C776 563 779 574 781 577C782 580 782 581 791 581C800 581 848 586 862 587C877 588 896 593 908 598C920 602 934 610 941 616C947 622 950 630 950 636C950 642 949 649 945 655C941 661 935 661 931 658C927 655 918 656 924 645C929 635 923 626 906 620C890 614 855 604 826 602C797 600 794 601 794 601C794 601 788 601 790 607C795 624 801 650 804 658C806 666 817 688 830 700C845 714 882 736 899 751C916 765 927 783 932 794C937 805 938 806 939 812C940 819 938 828 934 827C930 826 925 834 919 814C913 794 904 779 880 760C855 740 842 729 827 718C815 710 803 700 797 687C790 674 781 646 775 624C771 607 769 602 761 601C751 600 717 602 703 602C689 601 675 601 660 600C645 599 635 581 657 580C680 579 756 581 759 580C762 580 762 579 761 575C759 572 755 556 754 554C753 551 746 553 740 552C733 551 720 544 707 506C693 469 673 478 673 478C673 478 671 483 656 484C641 484 637 475 645 471C654 468 670 461 682 459C694 458 707 463 711 474C716 484 730 515 734 521C738 528 737 527 740 529C746 534 747 529 742 516C736 503 724 460 718 448C712 437 697 392 691 379C686 366 698 356 703 364C709 373 710 375 710 375Z"/><path stroke="#4c4c4c" stroke-width="1px" fill="#878787" d="M579 383C563 383 546 383 529 385C442 395 272 472 205 561C139 650 199 731 199 731C199 731 218 765 237 746C256 727 324 690 351 678C379 666 424 653 475 687C526 720 575 726 614 726C653 726 697 693 708 652C718 612 698 577 693 526C689 475 700 428 708 396C708 396 648 382 579 383ZM531 496C544 496 557 501 568 511C586 528 588 553 571 567C555 581 527 579 509 562C491 545 489 519 505 505C512 499 522 496 531 496Z"/><path stroke="#a7a7a7" fill="url(#afd320)" d="M386 95C242 96 112 210 71 294C25 388 25 481 56 579C87 676 120 714 134 754C148 795 163 786 172 786C182 786 202 777 245 802C309 839 372 862 418 862C464 862 503 854 545 803C586 752 550 691 532 650C514 608 518 575 535 539C553 504 602 479 638 468C680 456 708 441 742 425C777 410 778 391 770 376C763 360 734 310 724 292C715 275 652 95 386 95ZM313 641C326 641 339 646 350 656C368 673 370 699 353 713C337 727 309 724 291 707C273 690 271 664 287 650C294 644 304 641 313 641Z"/><path fill="#e00701" d="M382 105C310 105 243 132 194 161C181 169 169 179 158 188C208 155 275 127 355 127C509 127 603 224 660 322C702 396 704 430 700 445C713 439 726 433 739 427C747 407 743 359 661 246C626 198 531 105 382 105Z"/><path stroke="#cecece" stroke-width="1px" fill="url(#afd323)" d="M645 328C672 316 695 308 709 303C724 297 734 286 742 305C754 329 767 356 775 368C782 379 780 396 776 404C769 417 755 424 747 428C739 431 699 451 678 458C666 462 686 449 679 437C673 427 657 416 650 399C626 347 624 338 645 328Z"/><path fill="url(#afd322)" d="M772 370C755 381 703 407 674 420C645 434 551 480 526 492C501 504 485 509 476 519C466 528 432 564 420 578C409 592 407 595 404 602C402 609 397 619 391 634C384 649 361 706 357 719C352 732 351 734 356 742C360 750 362 745 369 748C377 750 410 766 429 772C448 778 462 778 512 776C540 775 564 773 588 770C591 776 597 793 604 811C612 831 629 872 667 882C705 892 752 895 784 895C816 895 874 888 888 882C902 876 930 869 938 839C942 823 940 814 936 804C932 795 915 804 918 814C924 829 918 842 901 854C884 865 828 874 782 874C735 874 700 871 686 868C673 865 647 854 632 817C621 792 614 776 611 768C623 766 635 765 648 764C695 758 753 745 806 730C858 715 913 686 925 675C938 664 952 653 950 636C949 630 945 628 941 629C937 630 934 635 924 645C901 669 881 676 860 685C850 690 810 705 748 720C685 734 617 743 608 743C598 743 599 738 596 733C594 726 594 725 593 722C592 717 592 715 599 715C611 714 685 704 709 700C755 691 796 679 813 673C850 661 878 648 909 629C920 622 931 612 937 602C944 591 937 577 925 566C912 555 903 561 903 567C903 572 905 575 912 580C919 585 918 592 913 600C909 607 902 611 882 622C863 633 819 649 786 659C754 669 723 675 698 680C673 684 604 692 595 693C586 694 579 697 577 692C575 687 575 684 570 668C565 652 516 540 513 533C510 526 511 525 514 523C517 522 522 519 545 509C568 499 617 470 668 447C702 432 769 401 788 383C796 376 789 359 772 370ZM491 539C492 539 493 539 494 541C495 545 517 594 529 620C540 647 552 681 554 686C555 690 559 695 551 696C547 696 539 703 525 683C510 663 502 650 495 642C489 635 483 627 468 620C454 614 437 606 433 605C429 603 425 601 432 595C439 589 457 569 465 560C473 552 484 542 484 542C487 540 489 538 491 538ZM421 625C421 625 422 625 422 625C430 629 457 642 462 644C468 647 473 654 485 670C498 686 513 709 518 712C522 716 532 721 541 720C549 719 568 715 571 724C574 733 578 744 578 745C578 747 580 751 573 751C566 752 508 754 490 755C473 756 458 758 434 749C409 739 391 732 386 731C382 729 375 729 381 715C387 700 405 655 409 647C413 638 413 638 414 634C415 630 417 625 421 625Z"/><path fill="#f90800" d="M854 640C852 646 852 652 855 653C857 655 866 653 880 702C884 715 890 773 890 789C890 805 891 869 890 873C888 877 886 882 892 881C898 881 904 880 908 875C912 869 910 825 910 787C910 749 903 708 895 685C887 663 881 643 873 638C865 632 856 636 854 640Z"/><path fill-opacity=".52941" stroke="#cecece" stroke-width="2.2" fill="#898989" d="M703 431C703 431 714 427 710 417C707 410 703 407 698 408C693 408 693 406 690 400C686 394 681 388 688 383C696 378 704 375 707 373C711 371 712 376 715 381C719 386 720 392 726 390C732 389 737 392 740 400C742 405 745 411 735 417C728 421 716 427 711 430C706 433 703 431 703 431Z"/><path fill-opacity=".52941" stroke="#cecece" stroke-width="2.2" fill="#898989" d="M749 407C749 407 760 404 756 393C753 387 750 384 744 385C740 385 740 383 736 377C733 371 728 365 734 361C742 356 749 355 752 354C756 352 757 356 760 361C763 366 762 371 768 370C774 369 778 372 781 379C783 385 783 389 775 394C768 399 762 403 757 406C752 409 749 407 749 407Z"/><path fill-opacity=".53107" stroke="#cecece" stroke-width="2.2" fill="#4c4c4c" d="M383 653C383 653 381 651 376 655C372 658 363 688 360 693C358 699 356 706 358 710C361 713 370 719 376 718C382 717 384 711 389 712C394 713 406 720 413 722C420 725 450 733 462 715C474 697 460 682 444 676C428 669 410 664 407 662C404 661 402 665 397 665C392 665 389 665 385 661C381 657 383 653 383 653Z"/><path fill="#bdbdbd" d="M451 705A19 16 0 1 1 412 705A19 16 0 1 1 451 705Z" transform="matrix(0.9559 0.2938 -0.2938 0.9559 222.15 -99.838)"/></g>`,
14
- line: { box: "0 0 24 24", d: `M13.5 12A1.5 1.5 0 0 0 12 13.5A1.5 1.5 0 0 0 13.5 15A1.5 1.5 0 0 0 15 13.5A1.5 1.5 0 0 0 13.5 12M13.5 3C18.19 3 22 6.58 22 11C22 12.62 22 14 21.09 16C17 16 16 20 12.5 20C10.32 20 9.27 18.28 9.05 16H9L8.24 16L6.96 20.3C6.81 20.79 6.33 21.08 5.84 21H3A1 1 0 0 1 2 20A1 1 0 0 1 3 19V16A1 1 0 0 1 2 15A1 1 0 0 1 3 14H6.75L7.23 12.39C6.72 12.14 6.13 12 5.5 12H5.07L5 11C5 6.58 8.81 3 13.5 3M5 16V19H5.26L6.15 16H5Z` },
1
+ // A football helmet, drawn for this package: a glossy shell seen from the side with a stripe over the crown, an ear hole, and a cage of bars across the face opening.
2
+ import { drawn, ellipse } from "./gear.core.js";
3
+ export const GEAR_FOOTBALL_HELMET = /* @__PURE__ */ drawn("gear:football-helmet", "Football helmet", "アメフトのヘルメット", {
4
+ main: "#cfd6de",
5
+ accent: "#c8202c",
6
+ parts: [
7
+ { d: "M6 38C3 21 15 7 32 7C45 7 53 15 53 27V33L48.6 36L45.6 46C41.6 55 29.6 57 19.6 54C11.6 51 7 46 6 38Z", fill: "$main", cyl: 0.6 },
8
+ { d: "M45 11.6Q22 9.4 12 31", fill: "none", stroke: "$accent", w: 4.4, line: "none" },
9
+ { d: ellipse(25.5, 39, 6, 7.2), fill: "#2a2f38", stroke: "#1b1f27", shade: 0.5 },
10
+ { d: "M21 33Q25 30.4 30 33", fill: "none", stroke: "#fff", w: 1, op: 0.45, line: "none", fx: true },
11
+ { d: "M13 18Q21 9.6 33 10", fill: "none", stroke: "#fff", w: 2, op: 0.55, line: "none", fx: true },
12
+ { d: "M52.6 28Q62 29.6 61 38L57 47Q54 52 46 52.4", fill: "none", stroke: "#4a5362", w: 2.6 },
13
+ { d: "M50.4 35H60.4M49.2 41.6H58.4M47 47.4H55.4", fill: "none", stroke: "#4a5362", w: 2 },
14
+ { d: "M45.6 46L50 52.4M38.6 55.4Q43 54.4 46 52.4", fill: "none", stroke: "#2a2f38", w: 2, line: "none" },
15
+ ],
15
16
  });
@@ -1 +1 @@
1
- export declare const GEAR_GOALIE_MASK: import("./gear.index.ts").Piece<import("./gear.core.ts").CopiedSpec>;
1
+ export declare const GEAR_GOALIE_MASK: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;
@@ -1,17 +1,23 @@
1
- // Gear: Goalie mask. Copied, with changes, from Wikimedia Commons https://commons.wikimedia.org/wiki/File:Hockey_Mask_(188584)_-_The_Noun_Project.svg (revision 1129797576), CC0, Author: Philippe Tardif | Credit: Noun Project - https://thenounproject.com/icon/188584.
2
- // SHA-256 of the file as published: 9317aaa790597a994426bd98cfd493192fb0298cb54af8aab6d46b2e1c5f95a4.
3
- // The line style is worked out of the colour artwork (dark parts become the ink); no other line artwork is used.
4
- // Changes: editor wrappers, metadata and ids removed, coordinates written absolute and rounded, a pale face laid under the ink. Modified files are marked as the Apache-2.0 licence asks. Do not edit by hand: scripts/dougu/build-gear.mjs writes this file.
5
- import { copied } from "./gear.core.js";
6
- export const GEAR_GOALIE_MASK = /* @__PURE__ */ copied({
7
- id: "gear:goalie-mask",
8
- en: "Goalie mask",
9
- ja: "ゴールキーパーマスク",
10
- source: "commons",
11
- credit: "Wikimedia Commons https://commons.wikimedia.org/wiki/File:Hockey_Mask_(188584)_-_The_Noun_Project.svg (revision 1129797576), CC0, Author: Philippe Tardif | Credit: Noun Project - https://thenounproject.com/icon/188584.",
12
- box: "0 0 100 100",
13
- colour: `<g><g><path d="M73.6 34.1C73.8 33.8 74 33.5 74 33.1C74 32.3 73.3 31.6 72.5 31.6C71.7 31.6 71 32.3 71 33.1C71 33.1 71 33.2 71 33.2C70 32.9 69 32.7 67.8 32.5C68 32.3 68.1 32 68.1 31.7C68.1 30.9 67.4 30.2 66.6 30.2C65.8 30.2 65.1 30.9 65.1 31.7C65.1 31.9 65.1 32 65.2 32.2C64.2 32.1 63.1 32 62 31.9C58 31.7 54.2 31.7 52 31.8C52 31.7 52 31.6 52 31.5C52 30.4 51.1 29.5 50 29.5C48.9 29.5 48 30.4 48 31.5C48 31.6 48 31.7 48 31.8C45.8 31.7 42 31.7 38 31.9C36.9 32 35.8 32.1 34.8 32.2C34.9 32 34.9 31.9 34.9 31.7C34.9 30.9 34.2 30.2 33.4 30.2C32.6 30.2 31.9 30.9 31.9 31.7C31.9 32 32 32.3 32.2 32.5C31 32.7 29.9 32.9 29 33.2C29 33.2 29 33.1 29 33.1C29 32.3 28.3 31.6 27.5 31.6C26.7 31.6 26 32.3 26 33.1C26 33.5 26.2 33.9 26.4 34.1C24.7 34.8 23.5 35.8 22.8 36.9C22.6 37.2 22.6 37.5 22.6 37.8C23.4 41.9 24.7 49 24.6 50.6C24.5 51.9 25.7 55.4 28.2 59.2C28.2 59.5 28.2 59.8 28.3 60C28.3 60.1 28.3 60.2 28.3 60.3C28 60.6 27.8 61 27.8 61.4C27.8 62.2 28.5 62.9 29.3 62.9C29.8 62.9 30.3 62.7 30.5 62.3C31.4 63.4 32.5 64.6 33.7 65.6C33.6 65.8 33.6 66 33.6 66.2C33.6 67 34.3 67.7 35.1 67.7C35.4 67.7 35.7 67.6 36 67.4C39.4 70 43.6 72.1 48.7 72.9C48.6 73.1 48.6 73.3 48.6 73.5C48.6 74.3 49.3 75 50.1 75C50.1 75 50.1 75 50.1 75C50.1 75 50.1 75 50.1 75C50.9 75 51.6 74.3 51.6 73.5C51.6 73.3 51.6 73.1 51.5 72.9C56.6 72.1 60.8 70 64.2 67.4C64.4 67.6 64.8 67.7 65.1 67.7C65.9 67.7 66.6 67 66.6 66.2C66.6 66 66.5 65.7 66.5 65.6C67.7 64.5 68.7 63.4 69.7 62.3C70 62.7 70.4 62.9 70.9 62.9C71.7 62.9 72.4 62.2 72.4 61.4C72.4 61 72.2 60.6 71.9 60.3C71.9 60.2 71.9 60.1 71.9 60C71.9 59.8 71.9 59.5 72 59.2C74.5 55.3 75.7 51.9 75.6 50.6C75.5 49 76.7 41.9 77.6 37.8C77.7 37.5 77.6 37.1 77.4 36.9C76.5 35.8 75.4 34.8 73.6 34.1ZM74.7 37.9C74.6 38.7 74.3 40 74 41.5C73.3 42.9 72.1 45.1 70.5 47.6C70.3 47 70 46.5 69.6 46C71.5 42.8 72.5 39.3 73 36.7C73.9 37.2 74.4 37.6 74.7 37.9ZM31.4 47.8C31.4 47.9 31.4 47.9 31.4 47.8C36.1 53.8 45 57.1 48.5 57.2C48.5 57.2 48.5 57.2 48.5 57.2C48.5 57.2 48.5 57.2 48.5 57.2V57.2C47.4 57.2 45.8 57.3 44 57.8C42.6 58.2 41 58.8 39.4 59.8C36 57 33 53.2 30.6 49.7C30.8 49 31.1 48.4 31.4 47.8ZM51.2 42.7C51.2 42.7 51.3 42.7 51.2 42.7C51.4 42.7 61.9 40.7 67.2 46.1C67.1 46.3 66.9 46.5 66.8 46.7C62.6 52.1 54.4 55.2 51.3 55.2C51.3 55.2 51.3 55.2 51.3 55.2V42.7ZM48.6 55.2C48.5 55.2 48.5 55.2 48.6 55.2C45.5 55.1 37.2 52.1 33.1 46.7C33 46.5 32.8 46.3 32.7 46.1C38 40.7 48.4 42.7 48.6 42.7C48.6 42.7 48.7 42.7 48.7 42.7V55.2ZM48.6 59.2V64.4C46 64 43.5 62.8 41.2 61.1C44.1 59.5 47 59.2 48.6 59.2ZM51.2 59.2C52.8 59.2 55.7 59.5 58.6 61.1C56.3 62.8 53.8 64 51.2 64.4V59.2ZM55.7 57.8C53.9 57.3 52.3 57.2 51.2 57.2V57.2C51.2 57.2 51.2 57.2 51.2 57.2C51.2 57.2 51.2 57.2 51.2 57.2C54.7 57.1 63.7 53.9 68.3 47.9C68.3 47.9 68.3 47.9 68.4 47.8C68.7 48.4 68.9 49 69.1 49.7C66.7 53.2 63.7 57 60.3 59.8C58.7 58.8 57 58.2 55.7 57.8ZM71.1 36C70.7 38.3 69.9 41.5 68.3 44.4C65.8 42 62.1 40.7 57.5 40.4C54.5 40.2 52.1 40.6 51.2 40.7V39.2C51.3 39.2 51.3 39.2 51.4 39.2C51.4 39.2 51.4 39.2 51.4 39.2C51.5 39.2 57.1 39.1 60.8 39C63.8 38.9 65.6 37 66.5 35C68.5 35.3 69.9 35.7 71.1 36ZM61.7 34.6C62.7 34.7 63.6 34.7 64.5 34.8C63.8 36 62.7 37 60.8 37.1C57 37.2 51.4 37.3 51.4 37.3C51.4 37.3 51.3 37.3 51.3 37.3V34.5C53.2 34.4 57.3 34.3 61.7 34.6ZM38.1 34.6C42.4 34.3 46.6 34.4 48.6 34.5V37.3C48.6 37.3 48.5 37.3 48.5 37.3C48.4 37.3 42.8 37.2 39.1 37.1C37.2 37 36.1 36 35.4 34.8C36.4 34.7 37.3 34.6 38.1 34.6ZM33.2 35.1C34.1 37.1 35.9 39 38.9 39.1C42.7 39.2 48.3 39.3 48.3 39.3C48.3 39.3 48.3 39.3 48.3 39.3C48.4 39.3 48.4 39.3 48.5 39.3V40.8C47.7 40.7 45.2 40.3 42.2 40.5C37.6 40.8 33.9 42.1 31.4 44.5C29.8 41.6 29 38.4 28.6 36.1C30.1 35.6 31.7 35.3 33.2 35.1ZM26.8 36.7C27.3 39.3 28.3 42.8 30.2 46C29.9 46.5 29.6 47 29.3 47.6C27.7 45.1 26.5 42.9 25.8 41.5C25.5 39.9 25.3 38.6 25.1 37.8C25.5 37.4 26.1 37.1 26.8 36.7ZM26.7 47.3C27.2 48.2 27.8 49.1 28.5 50.1C28.2 51.3 28.1 52.5 28 53.7C27.3 52.1 27 51.1 27 50.8C27 50.1 26.9 48.8 26.7 47.3ZM32.3 60.6C31.4 59.4 30.6 58.3 29.9 57.3C29.9 55.8 29.9 54.1 30.1 52.5C30.2 52.7 30.4 52.8 30.5 53C32.9 56.3 35.3 59 37.8 61.1C36.9 61.8 36.1 62.7 35.2 63.7C34.1 62.6 33.1 61.6 32.3 60.6ZM36.7 65C37.5 63.9 38.4 63.1 39.3 62.4C42.4 64.7 45.4 66.1 48.5 66.5V70.4C43.6 69.5 39.7 67.4 36.7 65ZM51.2 70.4V66.5C54.3 66.1 57.3 64.7 60.4 62.4C61.3 63.1 62.2 64 63 65C60 67.4 56.1 69.5 51.2 70.4ZM64.6 63.7C63.8 62.7 62.9 61.8 62 61.1C64.4 59 66.9 56.3 69.3 53C69.4 52.8 69.6 52.7 69.7 52.5C69.9 54.2 69.9 55.9 69.9 57.3C69.2 58.4 68.4 59.5 67.5 60.6C66.6 61.6 65.7 62.6 64.6 63.7ZM72.8 50.7C72.8 51 72.5 52.1 71.8 53.7C71.7 52.5 71.6 51.3 71.3 50.1C71.9 49.1 72.5 48.2 73.1 47.3C72.8 48.8 72.7 50.1 72.8 50.7Z"></path><path d="M80.7 36C80.4 34.2 79.8 33.3 79.1 32.9C79 31.9 78.8 30.4 78.3 28.5C79.4 27.4 79.7 25.7 79.1 24.4L76.5 19.4C75.9 18.3 74.7 17.6 73.3 17.6C73.2 17.6 73 17.6 72.9 17.6C69.7 13.6 64.5 9.8 56.4 8.6C55.8 7.3 54.5 6.5 53 6.5H53H46.8H46.8C45.6 6.5 44.4 7.1 43.8 8C43.7 8.1 43.6 8.3 43.5 8.4C43.5 8.5 43.4 8.5 43.4 8.6C35.3 9.9 30.2 13.7 26.9 17.6C26.8 17.6 26.6 17.6 26.5 17.6C25.1 17.6 23.9 18.3 23.3 19.4L20.7 24.4C20.3 25.3 20.2 26.3 20.6 27.3C20.8 27.7 21.1 28.2 21.4 28.5C20.9 30.4 20.7 32 20.6 32.9C19.9 33.3 19.3 34.2 19 36C18.7 37.8 18.9 41.3 19.1 43.6C19.3 44.9 19.6 45.9 19.9 46.8C20.1 47.6 20.4 48.3 20.5 49.2C20.7 50.2 20.7 51.5 20.8 52.7C20.9 53.7 20.9 54.8 21 55.8C21.1 56.3 21.1 56.8 21.1 57.2C21.2 58.4 21.3 59.6 22 61.5C22.9 63.8 24.7 67.1 26.2 69.8L26.7 70.6C27.5 72.1 28.5 73.4 29.4 74.6C30.3 75.8 31.2 76.9 31.7 78C32.3 79.1 32.5 80.3 32.8 81.5C33.1 82.8 33.4 84.1 34.1 85.3C35.3 87.4 36.6 89.3 37.9 90.6C39.2 91.9 40.4 92.6 42.2 93.1C43.4 93.5 44.7 93.6 46.1 93.6C46.6 93.6 47.1 93.6 47.6 93.5H49.6H51.6C52.1 93.5 52.6 93.6 53.1 93.6C54.5 93.6 55.8 93.4 57 93.1C58.7 92.6 59.9 91.9 61.3 90.6C62.6 89.3 64 87.4 65.1 85.3C65.8 84.1 66.1 82.8 66.4 81.5C66.7 80.3 67 79.1 67.5 78C68.1 76.9 68.9 75.7 69.8 74.6C70.8 73.3 71.7 72.1 72.5 70.6L73 69.8C74.5 67.1 76.3 63.7 77.2 61.5C78 59.6 78 58.4 78.1 57.2C78.1 56.8 78.2 56.3 78.2 55.8C78.3 54.8 78.4 53.7 78.4 52.7C78.5 51.5 78.5 50.3 78.7 49.2C78.8 48.4 79.1 47.6 79.3 46.8C79.6 45.8 79.9 44.8 80.1 43.6C80.8 41.3 80.9 37.7 80.7 36ZM74.2 20.5L76.8 25.5C77.1 26 76.6 26.7 75.9 27.1C75.7 27.2 75.4 27.3 75.1 27.3C75.1 27.3 75 27.3 75 27.3C74.6 27.3 74.2 27.1 74.1 26.9L71.5 21.9C71.4 21.6 71.5 21.3 71.5 21.2C71.6 21 71.7 20.9 71.8 20.7C71.9 20.6 72.1 20.4 72.3 20.3C72.6 20.2 72.9 20.1 73.2 20.1C73.7 20 74.1 20.2 74.2 20.5ZM45.5 10.4C45.5 10.3 45.5 10.2 45.5 10.1C45.5 10 45.5 9.9 45.5 9.8C45.6 9.2 46.1 8.8 46.7 8.8H46.7H48.6H51H53C53.6 8.8 54.1 9.2 54.2 9.8C54.2 9.8 54.2 9.9 54.2 9.9C54.2 9.9 54.2 10 54.2 10C54.2 10 54.2 10.1 54.2 10.1C54.2 10.3 54.1 10.5 54 10.7C53.8 11 53.4 11.2 53 11.2H46.8H46.8C46.4 11.2 46 11 45.8 10.7C45.6 10.8 45.6 10.6 45.5 10.4ZM26.5 20C26.8 20 27.1 20.1 27.4 20.2C27.6 20.3 27.8 20.4 27.9 20.6C28 20.7 28.2 20.9 28.2 21.1C28.3 21.3 28.4 21.6 28.2 21.8L25.6 26.8C25.5 27.1 25.1 27.2 24.7 27.2C24.7 27.2 24.6 27.2 24.6 27.2C24.3 27.2 24.1 27.1 23.8 27C23.4 26.8 23.1 26.5 22.9 26.1C22.8 25.9 22.7 25.6 22.9 25.4L25.5 20.4C25.7 20.2 26 20 26.5 20ZM77.9 43.2C77.8 44.2 77.5 45.1 77.2 46C76.9 46.8 76.7 47.7 76.5 48.7C76.5 48.7 76.5 48.7 76.5 48.7C76.3 49.9 76.2 51.2 76.2 52.5C76.1 53.6 76.1 54.5 76 55.4C75.9 56 75.9 56.5 75.9 57C75.8 58.1 75.8 59 75.2 60.5C74.4 62.6 72.6 65.9 71.2 68.5L70.7 69.3C70 70.6 69.1 71.8 68.2 73C67.3 74.2 66.3 75.5 65.6 76.8C64.9 78.2 64.6 79.6 64.3 80.8C64 82 63.8 83 63.3 83.9C62.3 85.8 61.1 87.4 59.9 88.6C58.9 89.6 58 90.1 56.7 90.5C55.4 90.9 53.9 91 52.2 90.9C52.2 90.9 52.1 90.9 52.1 90.9H50.1H48.1C48.1 90.9 48 90.9 48 90.9C46.3 91 44.8 90.9 43.5 90.5C42.2 90.1 41.3 89.6 40.3 88.6C39.1 87.4 38 85.8 36.9 83.9C36.4 83 36.2 81.9 35.9 80.8C35.6 79.5 35.3 78.1 34.6 76.7C33.9 75.4 32.9 74.1 32 72.9C31.1 71.7 30.2 70.5 29.5 69.2L29 68.4C27.6 65.8 25.8 62.5 25 60.4C24.4 58.8 24.3 58 24.3 56.9C24.3 56.4 24.2 55.9 24.2 55.3C24.1 54.4 24 53.4 24 52.4C23.9 51.1 23.9 49.8 23.7 48.6C23.7 48.6 23.7 48.6 23.7 48.6C23.5 47.6 23.3 46.7 23 45.9C22.7 45 22.5 44.2 22.3 43.1C22 40.9 22 37.6 22.2 36.2C22.3 35.6 22.4 35.3 22.5 35.1C22.8 35.1 23.1 35 23.3 34.8C23.6 34.6 23.7 34.2 23.8 33.8C23.8 33.8 23.9 32.1 24.5 29.6C24.8 29.7 25 29.7 25.3 29.7C26.7 29.7 27.9 29 28.5 27.9L31.1 22.9C31.5 22 31.6 21 31.2 20C31 19.4 30.6 18.9 30.1 18.5C33.5 14.5 38.1 12.1 43.8 11.1C43.9 11.3 44 11.6 44.1 11.8C44.2 11.9 44.3 12.1 44.4 12.2C45.1 13.1 46.2 13.7 47.4 13.7H47.4H53H53C54.7 13.7 56.1 12.6 56.6 11C62.3 12 66.9 14.5 70.3 18.4C69.8 18.8 69.4 19.3 69.2 19.9C68.8 20.9 68.8 21.9 69.3 22.8L71.9 27.8C72.5 28.9 73.7 29.6 75.1 29.6C75.1 29.6 75.1 29.6 75.1 29.6C75.4 29.6 75.6 29.6 75.9 29.5C76.5 32 76.6 33.7 76.6 33.7C76.6 34.1 76.8 34.4 77.1 34.7C77.3 34.9 77.6 35 77.9 35C78 35.1 78.1 35.5 78.2 36.1C78.2 37.7 78.2 40.9 77.9 43.2Z"></path></g></g>`,
14
- line: "derived",
15
- underlay: "M27 36C27 30 40 27 50 27S73 30 73 36L72 60C70 74 60 85 50 87C40 85 30 74 28 60Z",
16
- ink: "#232a36",
1
+ // A goalie mask, drawn for this package: a pale moulded shell with a caged face opening, painted brow, side pieces over the ears and a chin guard.
2
+ import { drawn, ellipse, seg } from "./gear.core.js";
3
+ /** The cage: bars across the face opening. */
4
+ const CAGE = (() => {
5
+ let d = "";
6
+ for (const x of [26.5, 32, 37.5])
7
+ d += seg(x, 15, x, 53);
8
+ for (const y of [24, 35, 46])
9
+ d += `M${32 - 12.4 * Math.sqrt(1 - ((y - 34) / 20) ** 2)} ${y}H${32 + 12.4 * Math.sqrt(1 - ((y - 34) / 20) ** 2)}`;
10
+ return d;
11
+ })();
12
+ export const GEAR_GOALIE_MASK = /* @__PURE__ */ drawn("gear:goalie-mask", "Goalie mask", "ゴールキーパーマスク", {
13
+ main: "#eef0f2",
14
+ accent: "#c8202c",
15
+ parts: [
16
+ { d: "M32 3C46 3 53 14 53 29C53 41 48 51 41 58Q32 63 23 58C16 51 11 41 11 29C11 14 18 3 32 3Z", fill: "$main", cyl: 0.7 },
17
+ { d: "M14 20Q32 6 50 20L48 25Q32 13 16 25Z", fill: "$accent", stroke: "none", shade: 0.6, line: "none" },
18
+ { d: ellipse(32, 34, 13.6, 20.4), fill: "#2b3038", stroke: "#1b1f27", shade: 0, line: "stroke" },
19
+ { d: CAGE, fill: "none", stroke: "#cfd6de", w: 1.5 },
20
+ { d: "M11.6 30Q10.6 40 13.6 47L18 44Q15.4 38 16.4 30ZM52.4 30Q53.4 40 50.4 47L46 44Q48.6 38 47.6 30Z", fill: "$main", cyl: 0.6, line: "none" },
21
+ { d: "M18 8Q24 4.8 29 4.4", fill: "none", stroke: "#fff", w: 1.8, op: 0.8, line: "none", fx: true },
22
+ ],
17
23
  });
@@ -1 +1 @@
1
- export declare const GEAR_GOAL_NET: import("./gear.index.ts").Piece<import("./gear.core.ts").CopiedSpec>;
1
+ export declare const GEAR_GOAL_NET: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;