@rydr/game-sdk 7.0.1 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -4
- package/dist/client/PlatformClient.d.ts +14 -7
- package/dist/client/PlatformClient.d.ts.map +1 -1
- package/dist/client/PlatformClient.js.map +1 -1
- package/dist/difficulty/index.d.ts +141 -0
- package/dist/difficulty/index.d.ts.map +1 -0
- package/dist/difficulty/index.js +300 -0
- package/dist/difficulty/index.js.map +1 -0
- package/dist/nav/README.md +1 -1
- package/dist/protocol/glyphs.d.ts +7 -0
- package/dist/protocol/glyphs.d.ts.map +1 -1
- package/dist/protocol/glyphs.js +26 -0
- package/dist/protocol/glyphs.js.map +1 -1
- package/dist/protocol/version.d.ts +1 -1
- package/dist/protocol/version.js +1 -1
- package/dist/ui/README.md +143 -11
- package/dist/ui/action-diamond.js +1 -1
- package/dist/ui/action-diamond.js.map +1 -1
- package/dist/ui/controller/combo-demo.d.ts +74 -0
- package/dist/ui/controller/combo-demo.d.ts.map +1 -0
- package/dist/ui/controller/combo-demo.js +295 -0
- package/dist/ui/controller/combo-demo.js.map +1 -0
- package/dist/ui/controller/combo-strip.d.ts +36 -0
- package/dist/ui/controller/combo-strip.d.ts.map +1 -0
- package/dist/ui/controller/combo-strip.js +66 -0
- package/dist/ui/controller/combo-strip.js.map +1 -0
- package/dist/ui/controller/control-trainer.d.ts +132 -0
- package/dist/ui/controller/control-trainer.d.ts.map +1 -0
- package/dist/ui/controller/control-trainer.js +570 -0
- package/dist/ui/controller/control-trainer.js.map +1 -0
- package/dist/ui/controller/controller-map.d.ts +82 -0
- package/dist/ui/controller/controller-map.d.ts.map +1 -0
- package/dist/ui/controller/controller-map.js +291 -0
- package/dist/ui/controller/controller-map.js.map +1 -0
- package/dist/ui/controller/controller-pad.d.ts +122 -0
- package/dist/ui/controller/controller-pad.d.ts.map +1 -0
- package/dist/ui/controller/controller-pad.js +200 -0
- package/dist/ui/controller/controller-pad.js.map +1 -0
- package/dist/ui/controller/index.d.ts +26 -0
- package/dist/ui/controller/index.d.ts.map +1 -0
- package/dist/ui/controller/index.js +26 -0
- package/dist/ui/controller/index.js.map +1 -0
- package/dist/ui/controller/input-chip.d.ts +101 -0
- package/dist/ui/controller/input-chip.d.ts.map +1 -0
- package/dist/ui/controller/input-chip.js +323 -0
- package/dist/ui/controller/input-chip.js.map +1 -0
- package/dist/ui/controller/layouts/dualsense.d.ts +12 -0
- package/dist/ui/controller/layouts/dualsense.d.ts.map +1 -0
- package/dist/ui/controller/layouts/dualsense.js +64 -0
- package/dist/ui/controller/layouts/dualsense.js.map +1 -0
- package/dist/ui/controller/layouts/index.d.ts +20 -0
- package/dist/ui/controller/layouts/index.d.ts.map +1 -0
- package/dist/ui/controller/layouts/index.js +34 -0
- package/dist/ui/controller/layouts/index.js.map +1 -0
- package/dist/ui/controller/layouts/joycon.d.ts +21 -0
- package/dist/ui/controller/layouts/joycon.d.ts.map +1 -0
- package/dist/ui/controller/layouts/joycon.js +76 -0
- package/dist/ui/controller/layouts/joycon.js.map +1 -0
- package/dist/ui/controller/layouts/switch-pro.d.ts +12 -0
- package/dist/ui/controller/layouts/switch-pro.d.ts.map +1 -0
- package/dist/ui/controller/layouts/switch-pro.js +60 -0
- package/dist/ui/controller/layouts/switch-pro.js.map +1 -0
- package/dist/ui/controller/layouts/xbox.d.ts +11 -0
- package/dist/ui/controller/layouts/xbox.d.ts.map +1 -0
- package/dist/ui/controller/layouts/xbox.js +59 -0
- package/dist/ui/controller/layouts/xbox.js.map +1 -0
- package/dist/ui/controller/layouts/zwift.d.ts +27 -0
- package/dist/ui/controller/layouts/zwift.d.ts.map +1 -0
- package/dist/ui/controller/layouts/zwift.js +62 -0
- package/dist/ui/controller/layouts/zwift.js.map +1 -0
- package/dist/ui/controller/pad-svg.d.ts +105 -0
- package/dist/ui/controller/pad-svg.d.ts.map +1 -0
- package/dist/ui/controller/pad-svg.js +289 -0
- package/dist/ui/controller/pad-svg.js.map +1 -0
- package/dist/ui/controller/parts-map.d.ts +96 -0
- package/dist/ui/controller/parts-map.d.ts.map +1 -0
- package/dist/ui/controller/parts-map.js +187 -0
- package/dist/ui/controller/parts-map.js.map +1 -0
- package/dist/ui/controller/styles.d.ts +19 -0
- package/dist/ui/controller/styles.d.ts.map +1 -0
- package/dist/ui/controller/styles.js +364 -0
- package/dist/ui/controller/styles.js.map +1 -0
- package/dist/ui/controller/tokens.d.ts +106 -0
- package/dist/ui/controller/tokens.d.ts.map +1 -0
- package/dist/ui/controller/tokens.js +50 -0
- package/dist/ui/controller/tokens.js.map +1 -0
- package/dist/ui/controller/types.d.ts +157 -0
- package/dist/ui/controller/types.d.ts.map +1 -0
- package/dist/ui/controller/types.js +61 -0
- package/dist/ui/controller/types.js.map +1 -0
- package/dist/ui/index.d.ts +9 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +9 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/keycap.d.ts +65 -20
- package/dist/ui/keycap.d.ts.map +1 -1
- package/dist/ui/keycap.js +99 -28
- package/dist/ui/keycap.js.map +1 -1
- package/dist/ui/{pause-menu.d.ts → option-menu.d.ts} +34 -24
- package/dist/ui/option-menu.d.ts.map +1 -0
- package/dist/ui/{pause-menu.js → option-menu.js} +134 -90
- package/dist/ui/option-menu.js.map +1 -0
- package/dist/ui/showcase/gallery.d.ts +13 -1
- package/dist/ui/showcase/gallery.d.ts.map +1 -1
- package/dist/ui/showcase/gallery.js.map +1 -1
- package/dist/ui/showcase/index.d.ts.map +1 -1
- package/dist/ui/showcase/index.js +265 -9
- package/dist/ui/showcase/index.js.map +1 -1
- package/dist/ui/solo-labeled-diamond.js +1 -1
- package/dist/ui/solo-labeled-diamond.js.map +1 -1
- package/dist/ui/styles.js +14 -9
- package/dist/ui/styles.js.map +1 -1
- package/package.json +5 -1
- package/dist/ui/pause-menu.d.ts.map +0 -1
- package/dist/ui/pause-menu.js.map +0 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pad layout descriptors — the DATA behind the controller drawing.
|
|
3
|
+
*
|
|
4
|
+
* One renderer ({@link buildPadSvg}) draws every controller from one of these. The alternative, a
|
|
5
|
+
* hand-drawn SVG per brand, would duplicate the `data-part` contract, the press/idle CSS, the stick
|
|
6
|
+
* group structure and the per-part titles once per brand — and every new part would have to be added
|
|
7
|
+
* everywhere.
|
|
8
|
+
*
|
|
9
|
+
* **Parts are keyed by POSITION, never by letter.** That is load-bearing, and it is the whole reason a
|
|
10
|
+
* game can hand us one action list and get a correct drawing on every controller: the canonical
|
|
11
|
+
* {@link ButtonName} vocabulary is positional (`DIAMOND_DOWN` *is* "the bottom button" on every
|
|
12
|
+
* device), but a Switch Pro prints `A` on the right and `B` on the bottom — the mirror of an Xbox pad.
|
|
13
|
+
* Keying by position lets the renderer stay brand-agnostic while every letter comes from
|
|
14
|
+
* `buttonLabel()` in `protocol/glyphs.ts`, the only module allowed to contain one.
|
|
15
|
+
*
|
|
16
|
+
* Ported from the platform shell's `pad-layouts/`, which is where this geometry was first tuned. The
|
|
17
|
+
* coordinate tables are deliberately unchanged so the two stay interchangeable — see the note on
|
|
18
|
+
* {@link PAD_BODY_PATH} about the usable interior.
|
|
19
|
+
*/
|
|
20
|
+
import type { GlyphSet } from "../../protocol/glyphs.js";
|
|
21
|
+
/**
|
|
22
|
+
* Which silhouette to draw.
|
|
23
|
+
*
|
|
24
|
+
* A {@link GlyphSet} plus the shapes that need their own drawing regardless of lettering: a Joy-Con
|
|
25
|
+
* pair is a Nintendo device but is two slim halves rather than one shell, so `"joycon"` is a *drawing*
|
|
26
|
+
* key rather than a glyph family — reachable only by asking for it explicitly.
|
|
27
|
+
*/
|
|
28
|
+
export type PadBrandKey = GlyphSet | "joycon";
|
|
29
|
+
/** Every drawable, highlightable part of a controller. Positional names only. */
|
|
30
|
+
export type PadPart = "dpadUp" | "dpadDown" | "dpadLeft" | "dpadRight" | "faceTop" | "faceRight" | "faceBottom" | "faceLeft" | "lb" | "rb" | "lt" | "rt" | "lstickPress" | "rstickPress" | "start" | "select" | "home";
|
|
31
|
+
export type PartGeom = {
|
|
32
|
+
kind: "circle";
|
|
33
|
+
cx: number;
|
|
34
|
+
cy: number;
|
|
35
|
+
r: number;
|
|
36
|
+
} | {
|
|
37
|
+
kind: "rect";
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
w: number;
|
|
41
|
+
h: number;
|
|
42
|
+
rx?: number;
|
|
43
|
+
} | {
|
|
44
|
+
kind: "path";
|
|
45
|
+
d: string;
|
|
46
|
+
};
|
|
47
|
+
export interface PartSpec {
|
|
48
|
+
geom: PartGeom;
|
|
49
|
+
/** Text glyph centred on the part. Omitted for parts the brand leaves blank. */
|
|
50
|
+
glyph?: string;
|
|
51
|
+
/** Vector glyph instead of text — PlayStation's ✕ ◯ ▢ △. Drawn centred on the part. */
|
|
52
|
+
glyphPath?: string;
|
|
53
|
+
/** Accessible / tooltip name, e.g. "A button (bottom)". */
|
|
54
|
+
label: string;
|
|
55
|
+
}
|
|
56
|
+
export interface StickSpec {
|
|
57
|
+
cx: number;
|
|
58
|
+
cy: number;
|
|
59
|
+
/** Recess radius and thumb-cap radius, in viewBox units. */
|
|
60
|
+
well: number;
|
|
61
|
+
cap: number;
|
|
62
|
+
/** Cap travel at full deflection, viewBox units. */
|
|
63
|
+
travel: number;
|
|
64
|
+
label: string;
|
|
65
|
+
}
|
|
66
|
+
export interface TriggerSpec {
|
|
67
|
+
geom: PartGeom;
|
|
68
|
+
/**
|
|
69
|
+
* Travel meter, filled bottom-up as the value goes 0 → 1.
|
|
70
|
+
*
|
|
71
|
+
* The platform drives this from real analog trigger travel. In *this* protocol `LT`/`RT` are plain
|
|
72
|
+
* clicks — `buttons.ts` says so explicitly, and protocol 27 removed the trigger axes — so the SDK
|
|
73
|
+
* drives it `0`/`1` from button state. The rect stays because a filled meter still reads as "held",
|
|
74
|
+
* and keeping the geometry identical is what lets the two sides share these tables.
|
|
75
|
+
*/
|
|
76
|
+
meter: {
|
|
77
|
+
x: number;
|
|
78
|
+
y: number;
|
|
79
|
+
w: number;
|
|
80
|
+
h: number;
|
|
81
|
+
rx?: number;
|
|
82
|
+
};
|
|
83
|
+
glyph: string;
|
|
84
|
+
label: string;
|
|
85
|
+
}
|
|
86
|
+
export interface PadLayout {
|
|
87
|
+
brand: PadBrandKey;
|
|
88
|
+
/** Used in the drawing's accessible name, e.g. "Xbox-style controller". */
|
|
89
|
+
displayName: string;
|
|
90
|
+
/** SHARED across every layout so host CSS never varies and swapping brands can't reflow. */
|
|
91
|
+
viewBox: readonly [number, number, number, number];
|
|
92
|
+
body: {
|
|
93
|
+
d: string;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Everything below the face buttons is OPTIONAL, because not every controller has it and drawing a
|
|
97
|
+
* control the rider cannot press is worse than drawing nothing. The Zwift family is the case that
|
|
98
|
+
* forced this: it reports a d-pad and the four face buttons and *nothing else* — no sticks, no
|
|
99
|
+
* triggers, no stick clicks, no system buttons (see `layouts/zwift.ts`). The renderer skips whatever
|
|
100
|
+
* is absent, and `PadDriver` no-ops on it.
|
|
101
|
+
*/
|
|
102
|
+
dpad?: Record<"up" | "down" | "left" | "right", PartSpec>;
|
|
103
|
+
face: Record<"top" | "right" | "bottom" | "left", PartSpec>;
|
|
104
|
+
bumpers?: {
|
|
105
|
+
l: PartSpec;
|
|
106
|
+
r: PartSpec;
|
|
107
|
+
};
|
|
108
|
+
triggers?: {
|
|
109
|
+
l: TriggerSpec;
|
|
110
|
+
r: TriggerSpec;
|
|
111
|
+
};
|
|
112
|
+
sticks?: {
|
|
113
|
+
l: StickSpec;
|
|
114
|
+
r: StickSpec;
|
|
115
|
+
};
|
|
116
|
+
system?: {
|
|
117
|
+
start?: PartSpec;
|
|
118
|
+
select?: PartSpec;
|
|
119
|
+
home?: PartSpec;
|
|
120
|
+
};
|
|
121
|
+
/** Non-interactive brand furniture (DualSense touchpad, Switch capture bar, Zwift handlebar). */
|
|
122
|
+
decor?: readonly {
|
|
123
|
+
geom: PartGeom;
|
|
124
|
+
opacity?: number;
|
|
125
|
+
}[];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Shared canvas for all layouts: `[minX, minY, width, height]`.
|
|
129
|
+
*
|
|
130
|
+
* The origin starts at **y −20**, above the shell's top edge, purely to give the shoulder row room.
|
|
131
|
+
* Triggers and bumpers are the only parts drawn off the body — stacked flush they read as one
|
|
132
|
+
* four-line block, so the negative band lets each sit clear of the other and of the shell, the way
|
|
133
|
+
* they're separated on the hardware.
|
|
134
|
+
*/
|
|
135
|
+
export declare const PAD_VIEWBOX: readonly [number, number, number, number];
|
|
136
|
+
/**
|
|
137
|
+
* The gamepad silhouette, shared by every gamepad-shaped layout.
|
|
138
|
+
*
|
|
139
|
+
* One body, not four: the meaningful difference between brands is where the CONTROLS sit (Xbox offsets
|
|
140
|
+
* its sticks diagonally, DualSense puts both low and symmetric, Switch mirrors Xbox), not the outline
|
|
141
|
+
* — and separately hand-tuned outlines are separate chances for a control to end up drawn outside the
|
|
142
|
+
* shell. The two-piece devices (Joy-Con, Zwift) carry their own body path because their shape, not
|
|
143
|
+
* just their control placement, is genuinely different.
|
|
144
|
+
*
|
|
145
|
+
* Its usable interior, which every control must stay inside:
|
|
146
|
+
* top edge x 58 → 182 at y 22 — bumpers must fit within THIS, not the wider waist below
|
|
147
|
+
* waist x 28 → 212 around y 54 (where the face diamond and sticks sit)
|
|
148
|
+
* central mass down to y 98; below that only the grips, under x 30–80 and x 160–210
|
|
149
|
+
* Triggers are the one deliberate exception: they sit ABOVE the top edge, as on the hardware.
|
|
150
|
+
*/
|
|
151
|
+
export declare const PAD_BODY_PATH: string;
|
|
152
|
+
/** Centre of a part, for placing its glyph and for anchoring a callout line at it. */
|
|
153
|
+
export declare function partCentre(g: PartGeom): {
|
|
154
|
+
x: number;
|
|
155
|
+
y: number;
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/controller/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pad layout descriptors — the DATA behind the controller drawing.
|
|
3
|
+
*
|
|
4
|
+
* One renderer ({@link buildPadSvg}) draws every controller from one of these. The alternative, a
|
|
5
|
+
* hand-drawn SVG per brand, would duplicate the `data-part` contract, the press/idle CSS, the stick
|
|
6
|
+
* group structure and the per-part titles once per brand — and every new part would have to be added
|
|
7
|
+
* everywhere.
|
|
8
|
+
*
|
|
9
|
+
* **Parts are keyed by POSITION, never by letter.** That is load-bearing, and it is the whole reason a
|
|
10
|
+
* game can hand us one action list and get a correct drawing on every controller: the canonical
|
|
11
|
+
* {@link ButtonName} vocabulary is positional (`DIAMOND_DOWN` *is* "the bottom button" on every
|
|
12
|
+
* device), but a Switch Pro prints `A` on the right and `B` on the bottom — the mirror of an Xbox pad.
|
|
13
|
+
* Keying by position lets the renderer stay brand-agnostic while every letter comes from
|
|
14
|
+
* `buttonLabel()` in `protocol/glyphs.ts`, the only module allowed to contain one.
|
|
15
|
+
*
|
|
16
|
+
* Ported from the platform shell's `pad-layouts/`, which is where this geometry was first tuned. The
|
|
17
|
+
* coordinate tables are deliberately unchanged so the two stay interchangeable — see the note on
|
|
18
|
+
* {@link PAD_BODY_PATH} about the usable interior.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Shared canvas for all layouts: `[minX, minY, width, height]`.
|
|
22
|
+
*
|
|
23
|
+
* The origin starts at **y −20**, above the shell's top edge, purely to give the shoulder row room.
|
|
24
|
+
* Triggers and bumpers are the only parts drawn off the body — stacked flush they read as one
|
|
25
|
+
* four-line block, so the negative band lets each sit clear of the other and of the shell, the way
|
|
26
|
+
* they're separated on the hardware.
|
|
27
|
+
*/
|
|
28
|
+
export const PAD_VIEWBOX = [0, -20, 240, 180];
|
|
29
|
+
/**
|
|
30
|
+
* The gamepad silhouette, shared by every gamepad-shaped layout.
|
|
31
|
+
*
|
|
32
|
+
* One body, not four: the meaningful difference between brands is where the CONTROLS sit (Xbox offsets
|
|
33
|
+
* its sticks diagonally, DualSense puts both low and symmetric, Switch mirrors Xbox), not the outline
|
|
34
|
+
* — and separately hand-tuned outlines are separate chances for a control to end up drawn outside the
|
|
35
|
+
* shell. The two-piece devices (Joy-Con, Zwift) carry their own body path because their shape, not
|
|
36
|
+
* just their control placement, is genuinely different.
|
|
37
|
+
*
|
|
38
|
+
* Its usable interior, which every control must stay inside:
|
|
39
|
+
* top edge x 58 → 182 at y 22 — bumpers must fit within THIS, not the wider waist below
|
|
40
|
+
* waist x 28 → 212 around y 54 (where the face diamond and sticks sit)
|
|
41
|
+
* central mass down to y 98; below that only the grips, under x 30–80 and x 160–210
|
|
42
|
+
* Triggers are the one deliberate exception: they sit ABOVE the top edge, as on the hardware.
|
|
43
|
+
*/
|
|
44
|
+
export const PAD_BODY_PATH = "M 58 22 L 182 22 C 200 22 210 34 212 52 L 220 94 C 226 122 214 146 192 146 " +
|
|
45
|
+
"C 178 146 167 137 162 124 L 156 110 C 152 102 145 98 137 98 L 103 98 " +
|
|
46
|
+
"C 95 98 88 102 84 110 L 78 124 C 73 137 62 146 48 146 C 26 146 14 122 20 94 " +
|
|
47
|
+
"L 28 52 C 30 34 40 22 58 22 Z";
|
|
48
|
+
/** Centre of a part, for placing its glyph and for anchoring a callout line at it. */
|
|
49
|
+
export function partCentre(g) {
|
|
50
|
+
switch (g.kind) {
|
|
51
|
+
case "circle":
|
|
52
|
+
return { x: g.cx, y: g.cy };
|
|
53
|
+
case "rect":
|
|
54
|
+
return { x: g.x + g.w / 2, y: g.y + g.h / 2 };
|
|
55
|
+
case "path":
|
|
56
|
+
// Paths carry their own glyph placement; none do today. Callers that need a real centre for a
|
|
57
|
+
// path part should measure the rendered node instead (the map view does exactly that).
|
|
58
|
+
return { x: 0, y: 0 };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ui/controller/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAsFH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAA8C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEzF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,6EAA6E;IAC7E,uEAAuE;IACvE,8EAA8E;IAC9E,+BAA+B,CAAC;AAElC,sFAAsF;AACtF,MAAM,UAAU,UAAU,CAAC,CAAW;IACpC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,MAAM;YACT,8FAA8F;YAC9F,uFAAuF;YACvF,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -9,6 +9,13 @@
|
|
|
9
9
|
* overlay, and the pre-assembled bar that composes both — so every game with a heat mechanic shares
|
|
10
10
|
* one look and can take just the pieces it needs (a game drawing its own bar takes only the cues).
|
|
11
11
|
*
|
|
12
|
+
* …and the **controller family** (`./controller/`), for showing a rider their whole control scheme:
|
|
13
|
+
* `mountControllerPad` draws the controller in their hands and lights it as they press;
|
|
14
|
+
* `mountControllerMap` surrounds it with action callouts joined by lines to their buttons; and
|
|
15
|
+
* `mountComboDemo` animates the combination one action needs. A game describes its controls once as a
|
|
16
|
+
* declarative `ControlAction[]` and the SDK owns the rest — which physical button that is on the
|
|
17
|
+
* rider's pad, the letter printed on it, the layout, and the animation.
|
|
18
|
+
*
|
|
12
19
|
* Self-contained, like `@rydr/game-sdk/three`'s perf-overlay: it injects its own scoped `.rydr-ui-*`
|
|
13
20
|
* CSS once into `<head>`, depends on no global styles or CSS variables, and pulls in no three.js — so
|
|
14
21
|
* a game gets the look just by constructing a component. Wire any keycap to real input by passing the
|
|
@@ -26,6 +33,7 @@
|
|
|
26
33
|
* ──────────────────────────────────────────────────────────────────────────────────────────────
|
|
27
34
|
*/
|
|
28
35
|
export * from "./keycap.js";
|
|
36
|
+
export * from "./controller/index.js";
|
|
29
37
|
export * from "./card.js";
|
|
30
38
|
export * from "./action-card.js";
|
|
31
39
|
export * from "./action-diamond.js";
|
|
@@ -35,7 +43,7 @@ export * from "./choice-card.js";
|
|
|
35
43
|
export * from "./labeled-diamond.js";
|
|
36
44
|
export * from "./solo-labeled-diamond.js";
|
|
37
45
|
export * from "./rarity-card.js";
|
|
38
|
-
export * from "./
|
|
46
|
+
export * from "./option-menu.js";
|
|
39
47
|
export * from "./power-race.js";
|
|
40
48
|
export * from "./admin-nav.js";
|
|
41
49
|
export * from "./heat-vignette.js";
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
|
package/dist/ui/index.js
CHANGED
|
@@ -9,6 +9,13 @@
|
|
|
9
9
|
* overlay, and the pre-assembled bar that composes both — so every game with a heat mechanic shares
|
|
10
10
|
* one look and can take just the pieces it needs (a game drawing its own bar takes only the cues).
|
|
11
11
|
*
|
|
12
|
+
* …and the **controller family** (`./controller/`), for showing a rider their whole control scheme:
|
|
13
|
+
* `mountControllerPad` draws the controller in their hands and lights it as they press;
|
|
14
|
+
* `mountControllerMap` surrounds it with action callouts joined by lines to their buttons; and
|
|
15
|
+
* `mountComboDemo` animates the combination one action needs. A game describes its controls once as a
|
|
16
|
+
* declarative `ControlAction[]` and the SDK owns the rest — which physical button that is on the
|
|
17
|
+
* rider's pad, the letter printed on it, the layout, and the animation.
|
|
18
|
+
*
|
|
12
19
|
* Self-contained, like `@rydr/game-sdk/three`'s perf-overlay: it injects its own scoped `.rydr-ui-*`
|
|
13
20
|
* CSS once into `<head>`, depends on no global styles or CSS variables, and pulls in no three.js — so
|
|
14
21
|
* a game gets the look just by constructing a component. Wire any keycap to real input by passing the
|
|
@@ -26,6 +33,7 @@
|
|
|
26
33
|
* ──────────────────────────────────────────────────────────────────────────────────────────────
|
|
27
34
|
*/
|
|
28
35
|
export * from "./keycap.js";
|
|
36
|
+
export * from "./controller/index.js";
|
|
29
37
|
export * from "./card.js";
|
|
30
38
|
export * from "./action-card.js";
|
|
31
39
|
export * from "./action-diamond.js";
|
|
@@ -35,7 +43,7 @@ export * from "./choice-card.js";
|
|
|
35
43
|
export * from "./labeled-diamond.js";
|
|
36
44
|
export * from "./solo-labeled-diamond.js";
|
|
37
45
|
export * from "./rarity-card.js";
|
|
38
|
-
export * from "./
|
|
46
|
+
export * from "./option-menu.js";
|
|
39
47
|
export * from "./power-race.js";
|
|
40
48
|
export * from "./admin-nav.js";
|
|
41
49
|
export * from "./heat-vignette.js";
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
|
package/dist/ui/keycap.d.ts
CHANGED
|
@@ -2,20 +2,26 @@
|
|
|
2
2
|
* KEYCAP — a DOM/CSS keycap of the controller face buttons (zero dependencies), so a game can show
|
|
3
3
|
* "which button to press" in a consistent visual language. Two shapes:
|
|
4
4
|
*
|
|
5
|
-
* • "full" — the classic diamond: the active button enlarged
|
|
5
|
+
* • "full" — the classic diamond: the active button enlarged, the other three small + grey.
|
|
6
6
|
* • "solo" — light variation: JUST the active button (the idle siblings removed).
|
|
7
7
|
*
|
|
8
8
|
* The keycap is a small STATE MACHINE: it can pulse (the bouncing attract animation), show a pressed
|
|
9
|
-
* sink, run a depleting COOLDOWN ring + countdown,
|
|
9
|
+
* sink, run a depleting COOLDOWN ring + countdown, and hide.
|
|
10
|
+
*
|
|
11
|
+
* **Mono by default** — a white face with a dark letter, which is the RYDR look everywhere (the shell
|
|
12
|
+
* draws all of its own chrome that way). The per-button role hues still exist behind
|
|
13
|
+
* `colored: true`, for a deliberately loud isolated affordance or to show the palette itself.
|
|
10
14
|
*
|
|
11
15
|
* Two button families share that machine: `createKeycap` for the A/B/Y/Z face buttons (a letter on
|
|
12
16
|
* the active pip) and `createDpadKeycap` for the UP/DOWN/LEFT/RIGHT directional buttons (a white
|
|
13
17
|
* chevron on a steel-grey pip, rotated per direction). They differ ONLY in the face drawn and the
|
|
14
18
|
* button name the press-wiring listens for; everything else is identical.
|
|
15
19
|
*
|
|
16
|
-
* A third factory, `
|
|
17
|
-
*
|
|
18
|
-
*
|
|
20
|
+
* A third factory, `createButtonKeycap`, covers what's left — the system/options button, the shoulder
|
|
21
|
+
* triggers, the stick clicks — and draws each the way the pad does: `OPTIONS` as a round pip with the
|
|
22
|
+
* pad's ICON (`☰` on Xbox/DualSense, `+` on a Switch Pro), since it's a small round key like the
|
|
23
|
+
* others; the triggers and stick clicks as a text PILL, since those are printed with a word ("LT",
|
|
24
|
+
* "L2", "LS") that no pip sized for one glyph could hold.
|
|
19
25
|
*/
|
|
20
26
|
import type { ButtonName, ButtonEdge } from "../protocol/index.js";
|
|
21
27
|
import { type GlyphSet } from "../protocol/glyphs.js";
|
|
@@ -40,7 +46,12 @@ export interface ButtonSource {
|
|
|
40
46
|
export interface KeycapOptions {
|
|
41
47
|
/** "solo" (default) shows only the active button; "full" shows the 4-button diamond. */
|
|
42
48
|
variant?: KeycapVariant;
|
|
43
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Per-button hue. **Default `false` — mono** (a white face with a dark letter), which is the RYDR
|
|
51
|
+
* look: the shell draws every keycap in its chrome that way, so a coloured cap is the one loud key
|
|
52
|
+
* on the screen. Pass `true` only for a deliberately loud, isolated affordance (or to show the
|
|
53
|
+
* palette itself, as the showcase does).
|
|
54
|
+
*/
|
|
44
55
|
colored?: boolean;
|
|
45
56
|
/** Run the bouncing pulse on the active button (default true). */
|
|
46
57
|
animate?: boolean;
|
|
@@ -55,6 +66,20 @@ export interface KeycapOptions {
|
|
|
55
66
|
* a settings screen, a showcase, a screenshot.
|
|
56
67
|
*/
|
|
57
68
|
glyphSet?: GlyphSet;
|
|
69
|
+
/**
|
|
70
|
+
* Size multiplier for the whole keycap — pip diameter, letter, glyph and (on the pill shape) its
|
|
71
|
+
* height, padding and type. Default `1`.
|
|
72
|
+
*
|
|
73
|
+
* **This is the ONLY sanctioned way to make a keycap smaller.** The kit's rule against restyling
|
|
74
|
+
* stands: don't override the `.rydr-ui-*` sizes and never wrap a cap in `transform: scale()`, which
|
|
75
|
+
* leaves a full-size layout box, blurs the text and breaks any positioning done against it. This
|
|
76
|
+
* option resizes the real geometry instead, so layout stays honest.
|
|
77
|
+
*
|
|
78
|
+
* For **secondary** emphasis only — a hint the rider *may* use (the option menu's `Shortcut` caps ride
|
|
79
|
+
* at `0.65`), never a primary prompt. A prompt telling the rider what to press now stays at `1`: full
|
|
80
|
+
* size is what keeps it legible from a few feet away on a trainer.
|
|
81
|
+
*/
|
|
82
|
+
scale?: number;
|
|
58
83
|
}
|
|
59
84
|
/** A bare keycap with its state setters. */
|
|
60
85
|
export interface Keycap {
|
|
@@ -71,6 +96,20 @@ export interface Keycap {
|
|
|
71
96
|
setCooldown(frac: number | null, label?: string | number): void;
|
|
72
97
|
/** Per-button hue on/off. */
|
|
73
98
|
setColored(on: boolean): void;
|
|
99
|
+
/**
|
|
100
|
+
* Override the pip's colour outright. `null` restores whatever {@link setColored} would give.
|
|
101
|
+
*
|
|
102
|
+
* The pip's face and its 3D shadow are both derived from one `--c` custom property, set inline — so a
|
|
103
|
+
* caller that needs a colour outside the per-role palette has to go through here rather than a
|
|
104
|
+
* stylesheet rule, which an inline value would beat. Used by the guided-lesson states in
|
|
105
|
+
* `controller/input-chip.ts` (whitish "do this", accent "doing it", green "done").
|
|
106
|
+
*
|
|
107
|
+
* **Optional deliberately.** `createKeycap` always provides it, but consumers WRAP this interface —
|
|
108
|
+
* the shell's `shellKeycaps` re-letters keycaps by rebuilding them behind a handle of this shape —
|
|
109
|
+
* and making it required would break every such wrapper at compile time for a method they have no
|
|
110
|
+
* need of. Callers must therefore treat it as absent-safe.
|
|
111
|
+
*/
|
|
112
|
+
setAccent?(color: string | null): void;
|
|
74
113
|
/** Disabled = the action is unavailable: flat grey, inert (no pulse/press), letter dimmed. */
|
|
75
114
|
setDisabled(on: boolean): void;
|
|
76
115
|
/** Hide/show the keycap. */
|
|
@@ -87,24 +126,30 @@ export interface Keycap {
|
|
|
87
126
|
*/
|
|
88
127
|
export declare function createKeycap(button: DiamondButton, opts?: KeycapOptions): Keycap;
|
|
89
128
|
/**
|
|
90
|
-
* Build a keycap for
|
|
91
|
-
* button (`OPTIONS`
|
|
92
|
-
*
|
|
129
|
+
* Build a keycap for the buttons that carry neither a face letter nor a direction — the system/options
|
|
130
|
+
* button (`OPTIONS`), the shoulder triggers (`LT`/`RT`) and the stick clicks
|
|
131
|
+
* (`LSTICK_PRESS`/`RSTICK_PRESS`) — drawn the way the rider's pad actually draws them:
|
|
132
|
+
*
|
|
133
|
+
* • **`OPTIONS` → a round pip with the pad's ICON** (`☰` on Xbox/DualSense, `+` on a Switch Pro).
|
|
134
|
+
* It is a small round key on every pad, so it gets the same circular pip as the d-pad's chevron and
|
|
135
|
+
* sits in the same visual family as the face buttons.
|
|
136
|
+
* • **everything else → a text PILL** carrying {@link buttonLabel} ("LT" / "L2" / "ZL", "LS" / "L3"),
|
|
137
|
+
* because those buttons really are printed with a *word*, and no word fits a pip sized for one
|
|
138
|
+
* glyph. The trigger hardware isn't round either.
|
|
93
139
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* rule that no letter is ever hardcoded holds here too.
|
|
140
|
+
* Either way the state machine is the pip's, reused verbatim (raised lip, pulse, pressed sink, inert
|
|
141
|
+
* grey), and nothing is hardcoded per brand: the icon comes from {@link SYSTEM_ICON} and the text from
|
|
142
|
+
* {@link buttonLabel}.
|
|
98
143
|
*
|
|
99
|
-
* Steel-grey
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
144
|
+
* Steel-grey (these are never the confirm/back hues), and — unlike the pip factories — the attract
|
|
145
|
+
* pulse is **off** unless asked for: these caps label a shortcut the rider *can* take, not an action
|
|
146
|
+
* being demanded of them. `setCooldown` is accepted for interface parity but draws nothing on the pill:
|
|
147
|
+
* these buttons open menus, they don't gate timed abilities.
|
|
103
148
|
*
|
|
104
|
-
* Pass a face-diamond or d-pad button here and you get its letter
|
|
105
|
-
* {@link createKeycap} / {@link createDpadKeycap}, which draw
|
|
149
|
+
* Pass a face-diamond or d-pad button here and you get its letter in a pill — legal, but prefer
|
|
150
|
+
* {@link createKeycap} / {@link createDpadKeycap}, which draw those buttons' real shapes.
|
|
106
151
|
*/
|
|
107
|
-
export declare function
|
|
152
|
+
export declare function createButtonKeycap(button: ButtonName, opts?: KeycapOptions): Keycap;
|
|
108
153
|
/**
|
|
109
154
|
* Build a bare directional (UP/DOWN/LEFT/RIGHT) keycap. Identical state machine to {@link createKeycap}
|
|
110
155
|
* — solo/full, pulse, pressed, cooldown ring — only the active button shows a WHITE chevron (rotated
|
package/dist/ui/keycap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycap.d.ts","sourceRoot":"","sources":["../../src/ui/keycap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"keycap.d.ts","sourceRoot":"","sources":["../../src/ui/keycap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAkC,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtF,+FAA+F;AAC/F,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC;AAC7F,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACzD,sEAAsE;AACtE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAC5C,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/E;AAoBD,MAAM,WAAW,aAAa;IAC5B,wFAAwF;IACxF,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,MAAM,WAAW,MAAM;IACrB,mDAAmD;IACnD,EAAE,EAAE,WAAW,CAAC;IAChB,uCAAuC;IACvC,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChE,6BAA6B;IAC7B,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACvC,8FAA8F;IAC9F,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,4BAA4B;IAC5B,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;CACjB;AA2ND;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAEpF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAgCvF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAEjF"}
|