@rydr/game-sdk 8.4.0 → 8.5.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.
Files changed (53) hide show
  1. package/dist/protocol/version.d.ts +1 -1
  2. package/dist/protocol/version.js +1 -1
  3. package/dist/ui/README.md +20 -11
  4. package/dist/ui/controller/combo-demo.d.ts +0 -3
  5. package/dist/ui/controller/combo-demo.d.ts.map +1 -1
  6. package/dist/ui/controller/combo-demo.js +7 -1
  7. package/dist/ui/controller/combo-demo.js.map +1 -1
  8. package/dist/ui/controller/control-spotlight.d.ts.map +1 -1
  9. package/dist/ui/controller/control-spotlight.js +8 -0
  10. package/dist/ui/controller/control-spotlight.js.map +1 -1
  11. package/dist/ui/controller/control-trainer.d.ts +3 -11
  12. package/dist/ui/controller/control-trainer.d.ts.map +1 -1
  13. package/dist/ui/controller/control-trainer.js +1 -1
  14. package/dist/ui/controller/control-trainer.js.map +1 -1
  15. package/dist/ui/controller/controller-map.d.ts +0 -3
  16. package/dist/ui/controller/controller-map.d.ts.map +1 -1
  17. package/dist/ui/controller/controller-map.js +0 -1
  18. package/dist/ui/controller/controller-map.js.map +1 -1
  19. package/dist/ui/controller/controller-pad.d.ts +35 -10
  20. package/dist/ui/controller/controller-pad.d.ts.map +1 -1
  21. package/dist/ui/controller/controller-pad.js +23 -8
  22. package/dist/ui/controller/controller-pad.js.map +1 -1
  23. package/dist/ui/controller/input-chip.d.ts +4 -26
  24. package/dist/ui/controller/input-chip.d.ts.map +1 -1
  25. package/dist/ui/controller/input-chip.js +107 -106
  26. package/dist/ui/controller/input-chip.js.map +1 -1
  27. package/dist/ui/controller/live-presses.d.ts +11 -0
  28. package/dist/ui/controller/live-presses.d.ts.map +1 -1
  29. package/dist/ui/controller/live-presses.js +3 -1
  30. package/dist/ui/controller/live-presses.js.map +1 -1
  31. package/dist/ui/controller/styles.js +81 -29
  32. package/dist/ui/controller/styles.js.map +1 -1
  33. package/dist/ui/controller/types.d.ts +2 -1
  34. package/dist/ui/controller/types.d.ts.map +1 -1
  35. package/dist/ui/controller/types.js.map +1 -1
  36. package/dist/ui/keycap.d.ts +19 -0
  37. package/dist/ui/keycap.d.ts.map +1 -1
  38. package/dist/ui/keycap.js +4 -1
  39. package/dist/ui/keycap.js.map +1 -1
  40. package/dist/ui/labeled-diamond.d.ts +12 -1
  41. package/dist/ui/labeled-diamond.d.ts.map +1 -1
  42. package/dist/ui/labeled-diamond.js +6 -3
  43. package/dist/ui/labeled-diamond.js.map +1 -1
  44. package/dist/ui/power-race.d.ts +84 -3
  45. package/dist/ui/power-race.d.ts.map +1 -1
  46. package/dist/ui/power-race.js +98 -41
  47. package/dist/ui/power-race.js.map +1 -1
  48. package/dist/ui/showcase/index.d.ts.map +1 -1
  49. package/dist/ui/showcase/index.js +23 -132
  50. package/dist/ui/showcase/index.js.map +1 -1
  51. package/dist/ui/styles.js +17 -5
  52. package/dist/ui/styles.js.map +1 -1
  53. package/package.json +2 -1
@@ -36,6 +36,32 @@ import { type GlyphSet } from "../../protocol/glyphs.js";
36
36
  import { type PadDriver, type PadSvg } from "./pad-svg.js";
37
37
  import type { ControlName } from "./tokens.js";
38
38
  import type { PadBrandKey, PadLayout } from "./types.js";
39
+ /**
40
+ * What the host reports about the controller in the rider's hands, and how to hear about a swap.
41
+ *
42
+ * A `PlatformSession` satisfies it structurally, so a game just passes `session`. A SHELL — which
43
+ * identified the device itself and therefore knows more than the protocol carries — can also fill in
44
+ * {@link PadHardwareSnapshot.padBrand}.
45
+ */
46
+ export interface PadHardwareStore {
47
+ current: PadHardwareSnapshot;
48
+ subscribe?(cb: (snapshot: PadHardwareSnapshot) => void): () => void;
49
+ }
50
+ export interface PadHardwareSnapshot {
51
+ /** Which lettering the pad carries. Drives the glyphs, and the silhouette when nothing better is known. */
52
+ glyphSet?: GlyphSet;
53
+ /**
54
+ * Which pad to DRAW, when the host knows something the lettering can't say.
55
+ *
56
+ * A {@link GlyphSet} is a lettering family, not a device: a Joy-Con pair and a Switch Pro Controller
57
+ * both letter `nintendo`, yet one is two slim halves and the other is a single shell. A host that
58
+ * identified the device (the RYDR shell does, from `gamepad.id`) reports the drawing key here and the
59
+ * pad follows it — including across a swap, exactly as it re-letters. Games can leave it unset: the
60
+ * wire protocol doesn't carry device identity, so `glyphSet` is all a guest has, and deriving the
61
+ * silhouette from it is still the right answer there.
62
+ */
63
+ padBrand?: PadBrandKey;
64
+ }
39
65
  /**
40
66
  * The slice of a `PlatformSession` the controller views consume. A session satisfies it structurally —
41
67
  * just pass `session`. Everything but `onButton` is optional so a hand-rolled stub or a showcase double
@@ -60,20 +86,17 @@ export interface PadInputSource {
60
86
  * `ControlName` for the same reason as `onButton`: a shell source knows about `LB`/`RB` too.
61
87
  */
62
88
  buttonsDown?(): ControlName[];
63
- /** The hardware store — read for the rider's glyph set, subscribed to for pad swaps. */
64
- hardware?: {
65
- current: {
66
- glyphSet?: GlyphSet;
67
- };
68
- subscribe?(cb: (snapshot: {
69
- glyphSet?: GlyphSet;
70
- }) => void): () => void;
71
- };
89
+ /** The hardware store — read for the rider's lettering and silhouette, subscribed to for pad swaps. */
90
+ hardware?: PadHardwareStore;
72
91
  }
73
92
  export interface ControllerPadOptions {
74
93
  /** Wire to real input. Omit for static art. */
75
94
  press?: PadInputSource;
76
- /** Force a silhouette. Default: derived from the glyph set (`"joycon"` is only reachable this way). */
95
+ /**
96
+ * Force a silhouette, PINNING it: the pad then stops following pad swaps, which is what a preview or a
97
+ * showcase wants. Default: the host's own `hardware.current.padBrand` when it reports one, else derived
98
+ * from the glyph set.
99
+ */
77
100
  brand?: PadBrandKey;
78
101
  /**
79
102
  * Force the lettering. Default: the set reported by `press`, else `"xbox"`. Setting this explicitly
@@ -119,6 +142,8 @@ export interface ControllerPad {
119
142
  * (the map's chips) must use the SAME set, or a pad swap leaves the two disagreeing.
120
143
  */
121
144
  glyphSet(): GlyphSet;
145
+ /** The silhouette currently drawn — `"joycon"` when the host reported a Joy-Con pair. */
146
+ brand(): PadBrandKey;
122
147
  /** Fires after the drawing is rebuilt (a pad swap). The map view uses it to re-route its lines. */
123
148
  onRebuild(cb: () => void): () => void;
124
149
  setVisible(on: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"controller-pad.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/controller-pad.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAG5E,OAAO,EAAoD,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAW,MAAM,YAAY,CAAC;AAElE;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/E,yGAAyG;IACzG,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,IAAI,WAAW,EAAE,CAAC;IAC9B,wFAAwF;IACxF,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE;YAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;SAAE,CAAC;QACjC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE;YAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;SAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;KACzE,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,uGAAuG;IACvG,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gDAAgD;IAChD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gGAAgG;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAClC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,iGAAiG;IACjG,GAAG,IAAI,MAAM,CAAC;IACd,MAAM,IAAI,SAAS,CAAC;IACpB,MAAM,IAAI,SAAS,CAAC;IACpB;;;OAGG;IACH,QAAQ,IAAI,QAAQ,CAAC;IACrB,mGAAmG;IACnG,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;CACjB;AAUD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,oBAAyB,GAAG,aAAa,CAwJpG"}
1
+ {"version":3,"file":"controller-pad.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/controller-pad.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAG5E,OAAO,EAAoD,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAW,MAAM,YAAY,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,mBAAmB;IAClC,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/E,yGAAyG;IACzG,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,IAAI,WAAW,EAAE,CAAC;IAC9B,uGAAuG;IACvG,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gDAAgD;IAChD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gGAAgG;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAClC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,iGAAiG;IACjG,GAAG,IAAI,MAAM,CAAC;IACd,MAAM,IAAI,SAAS,CAAC;IACpB,MAAM,IAAI,SAAS,CAAC;IACpB;;;OAGG;IACH,QAAQ,IAAI,QAAQ,CAAC;IACrB,yFAAyF;IACzF,KAAK,IAAI,WAAW,CAAC;IACrB,mGAAmG;IACnG,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;CACjB;AAmBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,oBAAyB,GAAG,aAAa,CA+JpG"}
@@ -41,6 +41,14 @@ const DPAD_NAMES = ["UP", "DOWN", "LEFT", "RIGHT"];
41
41
  function resolveGlyphSet(opts) {
42
42
  return opts.glyphSet ?? opts.press?.hardware?.current?.glyphSet ?? DEFAULT_GLYPH_SET;
43
43
  }
44
+ /**
45
+ * Which pad to DRAW. Same shape as the lettering above, with one extra rung: a host that identified the
46
+ * device outranks anything derived from the lettering, because the lettering cannot distinguish a
47
+ * Joy-Con pair from a Pro Controller and it is the one place the drawing would otherwise be wrong.
48
+ */
49
+ function resolveBrand(opts, glyphSet) {
50
+ return opts.brand ?? opts.press?.hardware?.current?.padBrand ?? glyphSet;
51
+ }
44
52
  export function mountControllerPad(host, opts = {}) {
45
53
  injectPadCss();
46
54
  const root = document.createElement("div");
@@ -57,6 +65,7 @@ export function mountControllerPad(host, opts = {}) {
57
65
  const held = new Set();
58
66
  const rebuildCbs = new Set();
59
67
  let glyphSet = resolveGlyphSet(opts);
68
+ let brand = resolveBrand(opts, glyphSet);
60
69
  let pad;
61
70
  let driver;
62
71
  let layout;
@@ -72,7 +81,7 @@ export function mountControllerPad(host, opts = {}) {
72
81
  return parts;
73
82
  };
74
83
  function build() {
75
- layout = layoutForBrand(opts.brand ?? glyphSet);
84
+ layout = layoutForBrand(brand);
76
85
  pad = buildPadSvg(layout, { labels: opts.labels ?? true });
77
86
  driver = createPadDriver(pad, layout, { allowShellOwned: opts.allowShellOwned });
78
87
  root.textContent = "";
@@ -157,14 +166,19 @@ export function mountControllerPad(host, opts = {}) {
157
166
  startFrames();
158
167
  document.addEventListener("visibilitychange", onVisibility);
159
168
  }
160
- // ── re-lettering ────────────────────────────────────────────────────────────────────────────────
161
- // Only when the caller did NOT pin a glyph set: an explicit one is a deliberate preview.
162
- const offHardware = !opts.glyphSet && live
169
+ // ── re-lettering, and re-drawing ────────────────────────────────────────────────────────────────
170
+ // Only for the parts the caller did NOT pin: an explicit `glyphSet`/`brand` is a deliberate preview.
171
+ // Both are watched here rather than in two subscriptions, because they come from ONE snapshot and a
172
+ // swap usually changes both — two handlers would rebuild the drawing twice for the same event.
173
+ const offHardware = (!opts.glyphSet || !opts.brand) && live
163
174
  ? source?.hardware?.subscribe?.((snapshot) => {
164
- const next = snapshot.glyphSet ?? DEFAULT_GLYPH_SET;
165
- if (next === glyphSet)
166
- return; // a second pad of the same family is a non-event
167
- glyphSet = next;
175
+ const nextGlyphs = opts.glyphSet ?? snapshot.glyphSet ?? DEFAULT_GLYPH_SET;
176
+ const nextBrand = opts.brand ?? snapshot.padBrand ?? nextGlyphs;
177
+ // A second pad of the same family is a non-event — in EITHER field.
178
+ if (nextGlyphs === glyphSet && nextBrand === brand)
179
+ return;
180
+ glyphSet = nextGlyphs;
181
+ brand = nextBrand;
168
182
  build();
169
183
  applyAllHeld();
170
184
  for (const cb of rebuildCbs)
@@ -177,6 +191,7 @@ export function mountControllerPad(host, opts = {}) {
177
191
  driver: () => driver,
178
192
  layout: () => layout,
179
193
  glyphSet: () => glyphSet,
194
+ brand: () => brand,
180
195
  onRebuild(cb) {
181
196
  rebuildCbs.add(cb);
182
197
  return () => rebuildCbs.delete(cb);
@@ -1 +1 @@
1
- {"version":3,"file":"controller-pad.js","sourceRoot":"","sources":["../../../src/ui/controller/controller-pad.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller-pad.js","sourceRoot":"","sources":["../../../src/ui/controller/controller-pad.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,10 @@
7
7
  * UP/DOWN/LEFT/RIGHT, R* → `createDpadKeycap` (the kit's chevron-on-steel keycap)
8
8
  * LT / RT / OPTIONS → `createButtonKeycap` (the kit's pill "L2"/"ZL" for a trigger, the
9
9
  * pad's round ☰ / + icon pip for OPTIONS)
10
- * LSTICK / RSTICK → a stick pictogram, cap centred inside four outward arrows
11
- * LSTICK / RSTICK :direction → the same pictogram with ONE arrow, cap already slid that way
12
- * LSTICK_PRESS / RSTICK_PRESS → a stick pictogram of the cap CLICKED: sunk inside a collar,
13
- * with a chevron pressing down into it
10
+ * LSTICK / RSTICK → a stick pictogram whose cap runs its travel circle: any direction
11
+ * LSTICK / RSTICK :direction → the same pictogram, cap pushing that way and back on a loop
12
+ * LSTICK_PRESS / RSTICK_PRESS → the same pictogram again, cap centred: it shrinks under a real
13
+ * press, exactly as the live pad's cap does
14
14
  *
15
15
  * The sticks are pictures rather than lettered chips throughout, because that is the one control where
16
16
  * the letter tells a rider nothing: "L3" does not say *click the stick*, and it changes per brand on
@@ -49,8 +49,6 @@ export interface InputChipOptions {
49
49
  press?: ChipPressSource;
50
50
  /** Per-role hue on face keycaps (confirm green, back amber). Default true, as elsewhere in the kit. */
51
51
  colored?: boolean;
52
- /** Drawing convention for the joystick pictograms. Default {@link DEFAULT_STICK_STYLE}. */
53
- stickStyle?: StickPictogramStyle;
54
52
  }
55
53
  /**
56
54
  * What a chip is saying, for a guided lesson. Mirrors {@link PadPartState} so the chip in the card and
@@ -71,26 +69,6 @@ export interface InputChip {
71
69
  setDeflection(x: number, y: number): void;
72
70
  dispose(): void;
73
71
  }
74
- /**
75
- * Which drawing convention to use for the joystick pictograms. Three real ones from the industry, kept
76
- * as an option because they trade off differently and the right answer is a judgement call:
77
- *
78
- * - **`"topdown"`** — the abstract plan view: a well, a cap dot, outline chevrons. Compact and neutral,
79
- * the PlayStation/Steam-overlay convention. Weakest at small sizes, and the *click* is its hard case:
80
- * pressing along the view axis is exactly what a top-down view cannot show.
81
- * - **`"profile"`** — the hybrid the free prompt packs (Kenney, Xelu) settled on, and the clearest of
82
- * the three: **plan view with bold filled arrows for directions**, and a **side view for the click** —
83
- * a real stick with a shaft and a thumb pad, being pushed down by a solid arrow. Each gesture gets the
84
- * viewpoint that can actually depict it.
85
- * - **`"glyph"`** — the bold console-UI mark (Xbox / Steam Input): a solid disc with solid triangles,
86
- * and a click drawn as a heavy ring with an arrow inside it. Loudest and most legible far away;
87
- * least literal about the hardware.
88
- *
89
- * Compare them in the showcase's "Joystick pictograms" section before changing {@link DEFAULT_STICK_STYLE}.
90
- */
91
- export type StickPictogramStyle = "topdown" | "profile" | "glyph";
92
- /** The style used when a caller doesn't ask for one. */
93
- export declare const DEFAULT_STICK_STYLE: StickPictogramStyle;
94
72
  /**
95
73
  * Build the chip for one control.
96
74
  *
@@ -1 +1 @@
1
- {"version":3,"file":"input-chip.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/input-chip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAA+C,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGtG,OAAO,EAAgD,KAAK,UAAU,EAAE,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AAE7H;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sFAAsF;IACtF,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,uGAAuG;IACvG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAElE,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,EAAE,mBAA+B,CAAC;AA8KlE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,SAAS,CAmHzF"}
1
+ {"version":3,"file":"input-chip.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/input-chip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAA+C,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGtG,OAAO,EAAgD,KAAK,UAAU,EAAE,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AAE7H;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sFAAsF;IACtF,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,uGAAuG;IACvG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AA2KD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,SAAS,CAwHzF"}
@@ -7,10 +7,10 @@
7
7
  * UP/DOWN/LEFT/RIGHT, R* → `createDpadKeycap` (the kit's chevron-on-steel keycap)
8
8
  * LT / RT / OPTIONS → `createButtonKeycap` (the kit's pill "L2"/"ZL" for a trigger, the
9
9
  * pad's round ☰ / + icon pip for OPTIONS)
10
- * LSTICK / RSTICK → a stick pictogram, cap centred inside four outward arrows
11
- * LSTICK / RSTICK :direction → the same pictogram with ONE arrow, cap already slid that way
12
- * LSTICK_PRESS / RSTICK_PRESS → a stick pictogram of the cap CLICKED: sunk inside a collar,
13
- * with a chevron pressing down into it
10
+ * LSTICK / RSTICK → a stick pictogram whose cap runs its travel circle: any direction
11
+ * LSTICK / RSTICK :direction → the same pictogram, cap pushing that way and back on a loop
12
+ * LSTICK_PRESS / RSTICK_PRESS → the same pictogram again, cap centred: it shrinks under a real
13
+ * press, exactly as the live pad's cap does
14
14
  *
15
15
  * The sticks are pictures rather than lettered chips throughout, because that is the one control where
16
16
  * the letter tells a rider nothing: "L3" does not say *click the stick*, and it changes per brand on
@@ -32,38 +32,30 @@ import { createKeycap, createDpadKeycap, createButtonKeycap } from "../keycap.js
32
32
  import { injectPadCss } from "./styles.js";
33
33
  import { isShellControl, parseToken, STICK_DIR_VECTOR } from "./tokens.js";
34
34
  const NS = "http://www.w3.org/2000/svg";
35
- /** The style used when a caller doesn't ask for one. */
36
- export const DEFAULT_STICK_STYLE = "profile";
37
35
  /**
38
- * Plan-view geometry. The well is deliberately SMALL for its box: the direction arrows sit **outside**
39
- * its rim, in clear air.
36
+ * Plan-view geometry. One drawing convention, deliberately plain: a well and a cap, and nothing else.
40
37
  *
41
- * They used to sit inside it, and that was the bug the well's rim is stroked in `currentColor` and so
42
- * is the arrow, so an arrow tip reaching the rim fused into it and the whole thing read as a blob
43
- * instead of an arrow. Nothing that has to stay legible should touch that ring.
38
+ * There used to be three conventions (a top-down one, this one, and a bold console-UI glyph) and every
39
+ * one of them drew direction ARROWS around the well. They're gone: an arrow at chip size is stroked in
40
+ * the same `currentColor` as the well rim, so it either touches the rim and fuses into a blob, or it
41
+ * sits outside it and eats the room the well needed to look like a well. The cap itself says it better —
42
+ * it MOVES (see {@link animateStick}), which is what a stick actually does and what an arrow was only
43
+ * ever a static shorthand for.
44
+ *
45
+ * With the arrows gone the well can have the whole box, so these are much bigger than the arrowed
46
+ * version's.
44
47
  */
45
- const WELL_R = 6.6;
46
- const CAP_R = 3.8;
47
- /** Outline chevron pointing OUTWARD, clear of the well rim. */
48
- const STICK_ARROW = "M9.3 4 L12 1 L14.7 4";
49
- /** The same cue as a SOLID triangle — heavier, and far more legible at chip size. */
50
- const STICK_TRI = "M12 0.6 L14.9 4 L9.1 4 Z";
51
- /** A solid triangle for the glyph style, whose disc has no rim to collide with. */
52
- const STICK_TRI_FAR = "M12 1.2 L15.2 5.6 L8.8 5.6 Z";
53
- /** The four rotations that turn one arrow into the "any direction" cue. */
54
- const OMNI_ROTATIONS = [0, 90, 180, 270];
55
- /** Chevron pointing DOWN at the well from outside it — the top-down style's "click" cue. */
56
- const STICK_PRESS_ARROW = "M9.4 1 L12 3.8 L14.6 1";
57
- /** Solid arrow pressing DOWN onto the thumb pad of the side-view stick. */
58
- const STICK_PRESS_TRI = "M12 7.4 L9.4 3.4 L14.6 3.4 Z";
59
- /** Solid arrow pointing DOWN *inside* the glyph style's heavy ring. */
60
- const STICK_PRESS_TRI_IN = "M12 16.8 L8.3 9.6 L15.7 9.6 Z";
61
- /** The side-view stick: a socket ellipse, a tapering shaft, and a rounded thumb pad. */
62
- const STICK_SHAFT = "M9.8 19 L10.9 12.6 L13.1 12.6 L14.2 19 Z";
48
+ const WELL_R = 9;
49
+ const CAP_R = 4.6;
63
50
  /** How far the cap slides at full deflection, in the pictogram's own 24-unit box. Kept under
64
51
  * `WELL_R - CAP_R` so a fully-deflected cap still reads as *inside* its well rather than escaping it. */
65
- const PIC_TRAVEL = 2.6;
66
- const ARROW_ROT = { up: 0, right: 90, down: 180, left: 270 };
52
+ const PIC_TRAVEL = 3.6;
53
+ /** One full revolution of the "any direction" sweep, ms. Matches `combo-demo` / `control-spotlight`. */
54
+ const SWEEP_MS = 1200;
55
+ /** One out-and-back nudge of a DIRECTIONAL cap, ms. Matches `control-trainer`'s hint sweep. */
56
+ const NUDGE_MS = 1400;
57
+ /** Where a reduced-motion "any direction" cap parks: off-centre, so it still reads as a live stick. */
58
+ const OMNI_STILL = [0.7, 0.7];
67
59
  /** Lesson colours. Kept beside the CSS block that mirrors them for the plain chips. */
68
60
  const STATE_COLOR = {
69
61
  idle: null, // null = whatever setColored would give
@@ -99,8 +91,8 @@ function textChip(text, extraClass = "") {
99
91
  return span;
100
92
  }
101
93
  /**
102
- * A directional chip renders ALREADY deflected — that is the information ("push it left"). The combo
103
- * demo calls `setDeflection(0, 0)` first and eases in, so it starts from centre there instead.
94
+ * A directional chip is BORN deflected — that is the information ("push it left"), and it's the frame a
95
+ * reduced-motion reader keeps. The loop and the combo demo both start from centre and take over anyway.
104
96
  */
105
97
  function seatCap(cap, mode, travel = PIC_TRAVEL) {
106
98
  if (mode === "omni" || mode === "press")
@@ -108,92 +100,96 @@ function seatCap(cap, mode, travel = PIC_TRAVEL) {
108
100
  const [vx, vy] = STICK_DIR_VECTOR[mode];
109
101
  cap.setAttribute("transform", `translate(${vx * travel} ${-vy * travel})`);
110
102
  }
111
- /** Emit the direction cue(s): one arrow for a direction, four for "any direction", none for a click. */
112
- function addArrows(svg, mode, d, cls) {
113
- if (mode === "press")
114
- return;
115
- const rots = mode === "omni" ? OMNI_ROTATIONS : [ARROW_ROT[mode]];
116
- for (const rot of rots)
117
- svg.appendChild(svgEl("path", { d, transform: `rotate(${rot} 12 12)` }, cls));
118
- }
119
- /** Plan view, light outline chevrons. The click is concentric rings + a chevron pressing in. */
120
- function drawTopDown(svg, mode) {
121
- svg.appendChild(svgEl("circle", { cx: 12, cy: 12, r: WELL_R }, "rydr-pad-stickpic-well"));
122
- if (mode === "press") {
123
- svg.appendChild(svgEl("path", { d: STICK_PRESS_ARROW }, "rydr-pad-stickpic-arrow"));
124
- svg.appendChild(svgEl("circle", { cx: 12, cy: 12, r: 4.9 }, "rydr-pad-stickpic-ring"));
125
- const cap = svgEl("circle", { cx: 12, cy: 13, r: 3 }, "rydr-pad-stickpic-cap rydr-pad-stickpic-press");
126
- svg.appendChild(cap);
127
- return cap;
128
- }
129
- addArrows(svg, mode, STICK_ARROW, "rydr-pad-stickpic-arrow");
130
- const cap = svgEl("circle", { cx: 12, cy: 12, r: CAP_R }, "rydr-pad-stickpic-cap");
131
- seatCap(cap, mode);
132
- svg.appendChild(cap);
133
- return cap;
103
+ /** Write a deflection onto a cap, in the SDK's convention (right = +1, **up = +1**). */
104
+ function placeCap(cap, x, y) {
105
+ cap.setAttribute("transform", `translate(${(x * PIC_TRAVEL).toFixed(2)} ${(-y * PIC_TRAVEL).toFixed(2)})`);
134
106
  }
135
107
  /**
136
- * The hybrid: plan view with SOLID arrows for directions, and a SIDE view for the click.
108
+ * Draw the pictogram: a well, and a cap in it. Same two shapes for every mode what differs is what the
109
+ * cap DOES, which is the animation's job, not the drawing's.
137
110
  *
138
- * Switching viewpoint for the click is the whole point. Pressing a stick is motion along the viewing
139
- * axis, which a plan view physically cannot depict hence the ambiguity between "click" and "push
140
- * down" that the other two styles have to work around with rings and insets. From the side it's just a
141
- * stick with an arrow on top of it.
111
+ * The click's cap carries `-press` as well, which is what the pressed CSS scales: a click is motion along
112
+ * the viewing axis, so the cap shrinks in place (smaller = pushed away from you) and stays centred,
113
+ * exactly as the live pad's own cap does.
142
114
  */
143
- function drawProfile(svg, mode) {
144
- if (mode === "press") {
145
- svg.appendChild(svgEl("path", { d: STICK_PRESS_TRI }, "rydr-pad-stickpic-fill"));
146
- svg.appendChild(svgEl("ellipse", { cx: 12, cy: 20, rx: 7.5, ry: 2.4 }, "rydr-pad-stickpic-base"));
147
- svg.appendChild(svgEl("path", { d: STICK_SHAFT }, "rydr-pad-stickpic-shaft"));
148
- const cap = svgEl("rect", { x: 7.4, y: 8.4, width: 9.2, height: 4.8, rx: 2.4 }, "rydr-pad-stickpic-cap rydr-pad-stickpic-press");
149
- svg.appendChild(cap);
150
- return cap;
151
- }
115
+ function drawStick(svg, mode) {
152
116
  svg.appendChild(svgEl("circle", { cx: 12, cy: 12, r: WELL_R }, "rydr-pad-stickpic-well"));
153
- addArrows(svg, mode, STICK_TRI, "rydr-pad-stickpic-fill");
154
- const cap = svgEl("circle", { cx: 12, cy: 12, r: CAP_R }, "rydr-pad-stickpic-cap");
117
+ const cls = mode === "press" ? "rydr-pad-stickpic-cap rydr-pad-stickpic-press" : "rydr-pad-stickpic-cap";
118
+ const cap = svgEl("circle", { cx: 12, cy: 12, r: CAP_R }, cls);
155
119
  seatCap(cap, mode);
156
120
  svg.appendChild(cap);
157
121
  return cap;
158
122
  }
159
- /** The bold console-UI mark: a solid disc and solid triangles; the click is a heavy ring with an arrow in it. */
160
- function drawGlyph(svg, mode) {
161
- if (mode === "press") {
162
- svg.appendChild(svgEl("circle", { cx: 12, cy: 12, r: 8.8 }, "rydr-pad-stickpic-bigring"));
163
- const cap = svgEl("path", { d: STICK_PRESS_TRI_IN }, "rydr-pad-stickpic-fill rydr-pad-stickpic-press");
164
- svg.appendChild(cap);
165
- return cap;
123
+ /**
124
+ * Make the cap DEMONSTRATE its gesture instead of parking at it — this is what replaced the arrows.
125
+ *
126
+ * "omni" the cap runs its travel circle: every direction, in turn.
127
+ * a dir → the cap pushes that way and comes back, on a loop. A cap parked at full deflection reads
128
+ * as "already done" (the same reason `control-trainer` sweeps its hints); moving out and
129
+ * back reads as an instruction.
130
+ * "press" → nothing. A click is along the viewing axis, so there is no in-plane motion to loop; it
131
+ * shows the live pad's pressed look when the rider actually clicks (`setPressed`).
132
+ *
133
+ * `prefers-reduced-motion` gets a still frame, not a twitch: a directional cap parks deflected, an
134
+ * undirected one parks off-centre.
135
+ *
136
+ * Returns the stopper, which a driver calls on its first `setDeflection`: once the combo demo, the
137
+ * trainer or real axes are driving this cap, two things writing the same transform would fight.
138
+ */
139
+ function animateStick(wrap, cap, mode) {
140
+ if (mode === "press")
141
+ return () => { };
142
+ const reduceMotion = typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches;
143
+ if (reduceMotion) {
144
+ if (mode === "omni")
145
+ placeCap(cap, OMNI_STILL[0], OMNI_STILL[1]);
146
+ return () => { };
166
147
  }
167
- addArrows(svg, mode, STICK_TRI_FAR, "rydr-pad-stickpic-fill");
168
- const cap = svgEl("circle", { cx: 12, cy: 12, r: 5.4 }, "rydr-pad-stickpic-cap");
169
- seatCap(cap, mode);
170
- svg.appendChild(cap);
171
- return cap;
148
+ // The cap's CSS transition smooths a driver's occasional writes; per-frame it would only add lag.
149
+ wrap.classList.add("anim");
150
+ let raf = 0;
151
+ let t0 = 0;
152
+ const frame = (t) => {
153
+ if (!t0)
154
+ t0 = t;
155
+ const p = t - t0;
156
+ if (mode === "omni") {
157
+ const a = (p / SWEEP_MS) * Math.PI * 2;
158
+ placeCap(cap, Math.cos(a), Math.sin(a));
159
+ }
160
+ else {
161
+ const [vx, vy] = STICK_DIR_VECTOR[mode];
162
+ const s = 0.5 - 0.5 * Math.cos((p / NUDGE_MS) * Math.PI * 2);
163
+ placeCap(cap, vx * s, vy * s);
164
+ }
165
+ raf = requestAnimationFrame(frame);
166
+ };
167
+ raf = requestAnimationFrame(frame);
168
+ return () => {
169
+ cancelAnimationFrame(raf);
170
+ wrap.classList.remove("anim");
171
+ };
172
172
  }
173
- const STICK_DRAW = {
174
- topdown: drawTopDown,
175
- profile: drawProfile,
176
- glyph: drawGlyph,
177
- };
178
173
  /**
179
- * The stick pictogram. Three things must be tellable apart at a glance on a trainer screen:
174
+ * The stick pictogram. Three things must be tellable apart at a glance on a trainer screen, and none of
175
+ * them is drawn — all three are the SAME well and cap, told apart by how the cap moves:
180
176
  *
181
- * "omni" — the whole stick, free movement: FOUR outward arrows
182
- * a dir — the stick pushed one way: ONE arrow that way, cap already slid there
183
- * "press" — the stick CLICKED straight down (`LSTICK_PRESS`)
177
+ * "omni" — the whole stick, free movement: the cap runs its circle
178
+ * a dir — the stick pushed one way: the cap pushes out that way and comes back, on a loop
179
+ * "press" — the stick CLICKED straight down (`LSTICK_PRESS`): the cap stays centred and shrinks under
180
+ * a real press, the live pad's own click
184
181
  *
185
182
  * Sticks are pictures rather than lettered chips because that is the one control where the letter tells
186
183
  * a rider nothing — "L3" does not say *click the stick*, and it changes per brand on top of that. The
187
- * printed label still reaches them through the chip's tooltip. See {@link StickPictogramStyle} for the
188
- * three drawing conventions and why a click is the hard case.
184
+ * printed label still reaches them through the chip's tooltip.
189
185
  */
190
- function stickChip(mode, style) {
186
+ function stickChip(mode) {
191
187
  const wrap = document.createElement("span");
192
- wrap.className = `rydr-pad-chip stick ${style}`;
188
+ wrap.className = "rydr-pad-chip stick";
193
189
  const svg = svgEl("svg", { viewBox: "0 0 24 24" });
194
- const cap = STICK_DRAW[style](svg, mode);
190
+ const cap = drawStick(svg, mode);
195
191
  wrap.appendChild(svg);
196
- return { el: wrap, cap };
192
+ return { el: wrap, cap, stop: animateStick(wrap, cap, mode) };
197
193
  }
198
194
  /**
199
195
  * Build the chip for one control.
@@ -204,7 +200,6 @@ function stickChip(mode, style) {
204
200
  export function createInputChip(token, opts = {}) {
205
201
  injectPadCss();
206
202
  const set = opts.glyphSet ?? DEFAULT_GLYPH_SET;
207
- const stickStyle = opts.stickStyle ?? DEFAULT_STICK_STYLE;
208
203
  const parsed = parseToken(token);
209
204
  let el;
210
205
  let setPressed;
@@ -219,14 +214,14 @@ export function createInputChip(token, opts = {}) {
219
214
  /** The control whose real presses this chip reflects (a stick pictogram has none). */
220
215
  let pressName;
221
216
  if (parsed.kind === "stick") {
222
- const { el: node, cap } = stickChip(parsed.dir ?? "omni", stickStyle);
217
+ const { el: node, cap, stop } = stickChip(parsed.dir ?? "omni");
223
218
  el = node;
224
219
  node.title = parsed.stick === "LSTICK" ? "Left stick" : "Right stick";
225
220
  setPressed = (on) => node.classList.toggle("pressed", on);
226
221
  setState = (s) => classState(node, s);
227
- setDeflection = (x, y) => {
228
- cap.setAttribute("transform", `translate(${(x * PIC_TRAVEL).toFixed(2)} ${(-y * PIC_TRAVEL).toFixed(2)})`);
229
- };
222
+ // A driver taking over ends the self-demonstrating loop — see animateStick.
223
+ setDeflection = (x, y) => { stop(); placeCap(cap, x, y); };
224
+ disposeInner = stop;
230
225
  }
231
226
  else if (isShellControl(parsed.name)) {
232
227
  // The rider's resistance − / +, i.e. the UPPER shoulders. Same rectangle as a trigger, because
@@ -242,12 +237,18 @@ export function createInputChip(token, opts = {}) {
242
237
  else if (parsed.name === "LSTICK_PRESS" || parsed.name === "RSTICK_PRESS") {
243
238
  // Clicking a stick is its own gesture, so it gets its own picture rather than a "L3"/"LS" chip.
244
239
  // The brand letter still reaches the rider through the tooltip and assistive tech.
245
- const { el: node } = stickChip("press", stickStyle);
240
+ const { el: node } = stickChip("press");
246
241
  el = node;
247
242
  const side = parsed.name === "LSTICK_PRESS" ? "Left" : "Right";
248
243
  node.title = `${side} stick click (${buttonLabel(set, parsed.name)})`;
249
244
  setPressed = (on) => node.classList.toggle("pressed", on);
250
- setState = (s) => classState(node, s);
245
+ // The click chip is the one whose lesson states must also MOVE. Everywhere else a state is a colour,
246
+ // because the shape already says which control it is; here the shape is a dot in a well and the
247
+ // gesture is the only thing that distinguishes clicking the stick from pushing it. So `active` —
248
+ // "you are holding it right now" — drives the very same `pressed` class a real press drives, which
249
+ // is what makes the chip in the card and the cap on the live drawing perform the same click. `hint`
250
+ // loops that click in white, from CSS (see .rydr-pad-hint .rydr-pad-stickpic-press).
251
+ setState = (s) => { classState(node, s); setPressed(s === "active"); };
251
252
  pressName = parsed.name;
252
253
  }
253
254
  else if (DIAMONDS.includes(parsed.name)) {
@@ -1 +1 @@
1
- {"version":3,"file":"input-chip.js","sourceRoot":"","sources":["../../../src/ui/controller/input-chip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-chip.js","sourceRoot":"","sources":["../../../src/ui/controller/input-chip.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,17 @@ export interface LivePressesOptions extends Omit<HeldPartsOptions, "held"> {
52
52
  * deadzone — the component's own animation gets its cap back on the next frame by simply drawing it.
53
53
  */
54
54
  setStick?(side: "l" | "r", x: number, y: number, state: PadPartState): void;
55
+ /**
56
+ * Put a stick back: neither the rider nor the caller's own animation is moving this one.
57
+ *
58
+ * REQUIRED alongside `setStick`, and the reason is the release. `setStick` is called only while a stick
59
+ * is PAST the deadzone, on the understanding that the caller redraws its cap on the next frame — but a
60
+ * caller only ever writes the sticks its OWN animation names, so a deflection on any other side had
61
+ * nobody to undo it and the cap stayed parked where the rider left it, still lit. Called once per pass
62
+ * for every side the rider is not deflecting; the implementation decides whether its own animation owns
63
+ * that side (in which case it leaves it alone) and otherwise recentres it.
64
+ */
65
+ restStick?(side: "l" | "r"): void;
55
66
  /**
56
67
  * The rider let go of a part this pass had lit. A component that repaints the part itself every frame
57
68
  * (because its animation owns it) should hand it back rather than blank it — blanking flashes one dark
@@ -1 +1 @@
1
- {"version":3,"file":"live-presses.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/live-presses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,wFAAwF;IACxF,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5B,gGAAgG;IAChG,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,CAa9D;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACxE,8EAA8E;IAC9E,KAAK,EAAE,YAAY,CAAC;IACpB,uGAAuG;IACvG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5E;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAgBjG"}
1
+ {"version":3,"file":"live-presses.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/live-presses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,wFAAwF;IACxF,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5B,gGAAgG;IAChG,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,CAa9D;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACxE,8EAA8E;IAC9E,KAAK,EAAE,YAAY,CAAC;IACpB,uGAAuG;IACvG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAChD;;;;;;;OAOG;IACH,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5E;;;;;;;;;OASG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;IAClC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAiBjG"}