@rydr/game-sdk 8.3.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.
- package/dist/client/Room.d.ts +3 -6
- package/dist/client/Room.d.ts.map +1 -1
- package/dist/client/Room.js +149 -58
- package/dist/client/Room.js.map +1 -1
- package/dist/protocol/version.d.ts +1 -1
- package/dist/protocol/version.js +1 -1
- package/dist/ui/README.md +20 -11
- package/dist/ui/controller/combo-demo.d.ts +0 -3
- package/dist/ui/controller/combo-demo.d.ts.map +1 -1
- package/dist/ui/controller/combo-demo.js +7 -1
- package/dist/ui/controller/combo-demo.js.map +1 -1
- package/dist/ui/controller/control-spotlight.d.ts.map +1 -1
- package/dist/ui/controller/control-spotlight.js +8 -0
- package/dist/ui/controller/control-spotlight.js.map +1 -1
- package/dist/ui/controller/control-trainer.d.ts +3 -11
- package/dist/ui/controller/control-trainer.d.ts.map +1 -1
- package/dist/ui/controller/control-trainer.js +1 -1
- package/dist/ui/controller/control-trainer.js.map +1 -1
- package/dist/ui/controller/controller-map.d.ts +0 -3
- package/dist/ui/controller/controller-map.d.ts.map +1 -1
- package/dist/ui/controller/controller-map.js +0 -1
- package/dist/ui/controller/controller-map.js.map +1 -1
- package/dist/ui/controller/controller-pad.d.ts +35 -10
- package/dist/ui/controller/controller-pad.d.ts.map +1 -1
- package/dist/ui/controller/controller-pad.js +23 -8
- package/dist/ui/controller/controller-pad.js.map +1 -1
- package/dist/ui/controller/input-chip.d.ts +4 -26
- package/dist/ui/controller/input-chip.d.ts.map +1 -1
- package/dist/ui/controller/input-chip.js +107 -106
- package/dist/ui/controller/input-chip.js.map +1 -1
- package/dist/ui/controller/live-presses.d.ts +11 -0
- package/dist/ui/controller/live-presses.d.ts.map +1 -1
- package/dist/ui/controller/live-presses.js +3 -1
- package/dist/ui/controller/live-presses.js.map +1 -1
- package/dist/ui/controller/styles.js +81 -29
- package/dist/ui/controller/styles.js.map +1 -1
- package/dist/ui/controller/types.d.ts +2 -1
- package/dist/ui/controller/types.d.ts.map +1 -1
- package/dist/ui/controller/types.js.map +1 -1
- package/dist/ui/keycap.d.ts +19 -0
- package/dist/ui/keycap.d.ts.map +1 -1
- package/dist/ui/keycap.js +4 -1
- package/dist/ui/keycap.js.map +1 -1
- package/dist/ui/labeled-diamond.d.ts +12 -1
- package/dist/ui/labeled-diamond.d.ts.map +1 -1
- package/dist/ui/labeled-diamond.js +6 -3
- package/dist/ui/labeled-diamond.js.map +1 -1
- package/dist/ui/power-race.d.ts +84 -3
- package/dist/ui/power-race.d.ts.map +1 -1
- package/dist/ui/power-race.js +98 -41
- package/dist/ui/power-race.js.map +1 -1
- package/dist/ui/showcase/index.d.ts.map +1 -1
- package/dist/ui/showcase/index.js +23 -132
- package/dist/ui/showcase/index.js.map +1 -1
- package/dist/ui/styles.js +17 -5
- package/dist/ui/styles.js.map +1 -1
- package/package.json +2 -1
package/dist/ui/keycap.d.ts
CHANGED
|
@@ -49,6 +49,25 @@ export interface ButtonSource {
|
|
|
49
49
|
edge: ButtonEdge;
|
|
50
50
|
}) => void): () => void;
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Which lettering to draw: an explicit `glyphSet` wins, else the one a real `PlatformSession` passed
|
|
54
|
+
* as `press` reports, else {@link DEFAULT_GLYPH_SET}.
|
|
55
|
+
*
|
|
56
|
+
* The session is probed structurally rather than declared on {@link ButtonSource}, because that type
|
|
57
|
+
* is deliberately the *minimal* slice a keycap needs — plenty of callers pass a hand-rolled stub or a
|
|
58
|
+
* showcase double, and requiring a hardware snapshot on all of them would break every one for a value
|
|
59
|
+
* that is optional anyway.
|
|
60
|
+
*
|
|
61
|
+
* Resolved once at build time: keycaps are cheap to recreate, and riders swap controllers far more
|
|
62
|
+
* rarely than these are constructed.
|
|
63
|
+
*
|
|
64
|
+
* Exported because every component that PRINTS a button letter must answer this the same way — see
|
|
65
|
+
* {@link ./labeled-diamond}, which draws its own pips rather than a keycap.
|
|
66
|
+
*/
|
|
67
|
+
export declare function resolveGlyphSet(opts: {
|
|
68
|
+
glyphSet?: GlyphSet;
|
|
69
|
+
press?: ButtonSource;
|
|
70
|
+
}): GlyphSet;
|
|
52
71
|
export interface KeycapOptions {
|
|
53
72
|
/** "solo" (default) shows only the active button; "full" shows the 4-button diamond. */
|
|
54
73
|
variant?: KeycapVariant;
|
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;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAkC,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,+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;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,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;
|
|
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;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,+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;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,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;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAE,GAAG,QAAQ,CAI7F;AAED,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"}
|
package/dist/ui/keycap.js
CHANGED
|
@@ -36,8 +36,11 @@ import { injectCss } from "./styles.js";
|
|
|
36
36
|
*
|
|
37
37
|
* Resolved once at build time: keycaps are cheap to recreate, and riders swap controllers far more
|
|
38
38
|
* rarely than these are constructed.
|
|
39
|
+
*
|
|
40
|
+
* Exported because every component that PRINTS a button letter must answer this the same way — see
|
|
41
|
+
* {@link ./labeled-diamond}, which draws its own pips rather than a keycap.
|
|
39
42
|
*/
|
|
40
|
-
function resolveGlyphSet(opts) {
|
|
43
|
+
export function resolveGlyphSet(opts) {
|
|
41
44
|
if (opts.glyphSet)
|
|
42
45
|
return opts.glyphSet;
|
|
43
46
|
const snapshot = opts.press?.hardware?.current;
|
package/dist/ui/keycap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keycap.js","sourceRoot":"","sources":["../../src/ui/keycap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keycap.js","sourceRoot":"","sources":["../../src/ui/keycap.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,12 +9,23 @@
|
|
|
9
9
|
* Fixed-overlay by default (call `setScreenPos` to track a projected world point), or `inline:true`
|
|
10
10
|
* to lay it in normal flow.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import type { GlyphSet } from "../protocol/glyphs.js";
|
|
13
|
+
import { type ButtonSource, type DiamondButton } from "./keycap.js";
|
|
13
14
|
export interface LabeledDiamondOptions {
|
|
14
15
|
/** Lay the diamond inline (normal flow, full width) instead of as a fixed overlay. */
|
|
15
16
|
inline?: boolean;
|
|
16
17
|
/** Initial active labels — a label string activates that button; omit a button to leave it greyed. */
|
|
17
18
|
actions?: Partial<Record<DiamondButton, string>>;
|
|
19
|
+
/**
|
|
20
|
+
* Wire to real controller input — passed only so the diamond can read the rider's glyph set from a
|
|
21
|
+
* `session`. (The pips here are static affordances; they don't show a pressed sink.)
|
|
22
|
+
*/
|
|
23
|
+
press?: ButtonSource;
|
|
24
|
+
/**
|
|
25
|
+
* Which controller's lettering to print on the pips. Defaults to the set reported by `press` (when
|
|
26
|
+
* that's a `session`), else `"xbox"` — same rule as every keycap. See {@link resolveGlyphSet}.
|
|
27
|
+
*/
|
|
28
|
+
glyphSet?: GlyphSet;
|
|
18
29
|
}
|
|
19
30
|
export interface LabeledDiamond {
|
|
20
31
|
root: HTMLElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labeled-diamond.d.ts","sourceRoot":"","sources":["../../src/ui/labeled-diamond.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"labeled-diamond.d.ts","sourceRoot":"","sources":["../../src/ui/labeled-diamond.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAarF,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sGAAsG;IACtG,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,+GAA+G;IAC/G,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3D,kFAAkF;IAClF,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IACtD,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,kFAAkF;IAClF,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,iHAAiH;AACjH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,qBAA0B,GAAG,cAAc,CAwEvG"}
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* Fixed-overlay by default (call `setScreenPos` to track a projected world point), or `inline:true`
|
|
10
10
|
* to lay it in normal flow.
|
|
11
11
|
*/
|
|
12
|
+
import { buttonLabel } from "../protocol/glyphs.js";
|
|
12
13
|
import { mountCard } from "./card.js";
|
|
13
|
-
import {} from "./keycap.js";
|
|
14
|
+
import { resolveGlyphSet } from "./keycap.js";
|
|
14
15
|
import { injectCss } from "./styles.js";
|
|
15
16
|
const POS = {
|
|
16
17
|
DIAMOND_UP: "top", DIAMOND_RIGHT: "rgt", DIAMOND_DOWN: "bot", DIAMOND_LEFT: "lft",
|
|
@@ -23,6 +24,7 @@ const FACES = ["DIAMOND_UP", "DIAMOND_RIGHT", "DIAMOND_DOWN", "DIAMOND_LEFT"];
|
|
|
23
24
|
/** Mount a labeled A/B/Y/Z diamond: a pip cluster with a card-seated label radiating from each active button. */
|
|
24
25
|
export function mountLabeledDiamond(host, opts = {}) {
|
|
25
26
|
injectCss();
|
|
27
|
+
const set = resolveGlyphSet(opts);
|
|
26
28
|
const root = document.createElement("div");
|
|
27
29
|
root.className = "rydr-ui-ld-host" + (opts.inline ? " inline" : "");
|
|
28
30
|
const wrap = document.createElement("div");
|
|
@@ -43,8 +45,9 @@ export function mountLabeledDiamond(host, opts = {}) {
|
|
|
43
45
|
pip.style.opacity = "0.5";
|
|
44
46
|
const lt = document.createElement("span");
|
|
45
47
|
lt.className = "rydr-ui-pip-letter";
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
// the glyph PRINTED on the rider's own pad, never the canonical name — glyphs.ts is the only
|
|
49
|
+
// home for a letter. (Size comes from the stylesheet, next to the pip's own 40px.)
|
|
50
|
+
lt.textContent = buttonLabel(set, b);
|
|
48
51
|
pip.appendChild(lt);
|
|
49
52
|
cluster.appendChild(pip);
|
|
50
53
|
pips[b] = pip;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labeled-diamond.js","sourceRoot":"","sources":["../../src/ui/labeled-diamond.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"labeled-diamond.js","sourceRoot":"","sources":["../../src/ui/labeled-diamond.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/power-race.d.ts
CHANGED
|
@@ -27,6 +27,18 @@
|
|
|
27
27
|
* Driving it: `start()`, then pump `setPower(w)` + `tick(dt)` every frame. The HUD self-resolves to
|
|
28
28
|
* `won` / `lost` when either bar crosses 100%; poll `getPhase()` or pass `onResolve`. Drive external
|
|
29
29
|
* VFX (a glow, a light) off `getProgress().charge`.
|
|
30
|
+
*
|
|
31
|
+
* ── Timings ────────────────────────────────────────────────────────────────────────────────────
|
|
32
|
+
* Three of them, all optional:
|
|
33
|
+
* · `introS` — the wind-up before the bars go live (default 2 s; `0`/`false` = live on frame 1).
|
|
34
|
+
* A widget the rider OPENED by pressing a button wants `introS: 0` — they already committed, and
|
|
35
|
+
* a wind-up leaves them pedalling into nothing. A widget that arrives at them (an incoming
|
|
36
|
+
* missile) wants the default: the wind-up IS the warning.
|
|
37
|
+
* · `durationS` — the race itself: the clock's fill time, and the work that fills the charge bar.
|
|
38
|
+
* · `hold` — what happens after it resolves: when the win/lose stamp lands (`stampDelayS`) and when
|
|
39
|
+
* the overlay hides itself (`hideAfterS`, or `false` to leave it up and hide it yourself).
|
|
40
|
+
* `setTarget()` re-sizes the effort target in place, so a rider retuning their FTP mid-ride doesn't
|
|
41
|
+
* cost you a rebuilt widget.
|
|
30
42
|
*/
|
|
31
43
|
/** Layout of the two bars. Both drive the same class hooks. */
|
|
32
44
|
export type PowerRaceVariant = "twin-stacked" | "twin-towers";
|
|
@@ -36,8 +48,12 @@ export type PowerRaceScoreVariant = "tip" | "impact" | "above" | "infill";
|
|
|
36
48
|
export type PowerRacePhase = "idle" | "priming-warning" | "priming-prompt" | "priming-bars" | "racing" | "won" | "lost";
|
|
37
49
|
/** The two terminal outcomes. */
|
|
38
50
|
export type PowerRaceOutcome = "won" | "lost";
|
|
39
|
-
/**
|
|
51
|
+
/** Default total intro duration in seconds — the default of `introS`, and what it scales. */
|
|
40
52
|
export declare const INTRO_TOTAL_S: number;
|
|
53
|
+
/** Default delay from resolving to the win/lose stamp landing (seconds). */
|
|
54
|
+
export declare const DEFAULT_STAMP_DELAY_S = 0.25;
|
|
55
|
+
/** Default delay from resolving to the overlay hiding itself (seconds). */
|
|
56
|
+
export declare const DEFAULT_HIDE_AFTER_S = 1.25;
|
|
41
57
|
/**
|
|
42
58
|
* The six palette colours, driven into the component as CSS custom properties. Each bar is a
|
|
43
59
|
* `deep → bright` gradient; the win state recolours the charge bar green. The default is the original
|
|
@@ -68,6 +84,37 @@ export interface PowerRaceText {
|
|
|
68
84
|
win?: string;
|
|
69
85
|
lose?: string;
|
|
70
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* What happens once the race resolves — the beat AFTER the outcome, not the race.
|
|
89
|
+
*
|
|
90
|
+
* Both are delays measured from the moment it resolved. The defaults reproduce the original alert
|
|
91
|
+
* behaviour: the stamp lands a beat late (so the eye sees the bar finish first), and the overlay takes
|
|
92
|
+
* itself off the screen shortly after.
|
|
93
|
+
*/
|
|
94
|
+
export interface PowerRaceHold {
|
|
95
|
+
/**
|
|
96
|
+
* Seconds from resolving to the win/lose stamp landing. Default {@link DEFAULT_STAMP_DELAY_S} (0.25).
|
|
97
|
+
* `0` lands it on the spot; `false` never shows a stamp at all — for a game whose reward is the
|
|
98
|
+
* thing the rider just earned (the pick-up, the door) rather than a banner.
|
|
99
|
+
*/
|
|
100
|
+
stampDelayS?: number | false;
|
|
101
|
+
/**
|
|
102
|
+
* Seconds from resolving to the overlay hiding itself. Default {@link DEFAULT_HIDE_AFTER_S} (1.25).
|
|
103
|
+
* `false` leaves it up indefinitely — the game owns the exit and calls `reset()`/`dispose()`.
|
|
104
|
+
*/
|
|
105
|
+
hideAfterS?: number | false;
|
|
106
|
+
}
|
|
107
|
+
/** The effort target, re-settable at runtime by {@link PowerRaceHud.setTarget}. */
|
|
108
|
+
export interface PowerRaceTarget {
|
|
109
|
+
/** Rider FTP. */
|
|
110
|
+
ftp: number;
|
|
111
|
+
/** The race length in seconds. */
|
|
112
|
+
durationS: number;
|
|
113
|
+
/** Effort target as a fraction of FTP. */
|
|
114
|
+
targetFtpPct: number;
|
|
115
|
+
/** The derived work to fill the charge bar: `targetFtpPct × ftp × durationS`. */
|
|
116
|
+
requiredJoules: number;
|
|
117
|
+
}
|
|
71
118
|
export interface PowerRaceOpts {
|
|
72
119
|
/** Rider FTP — sets the effort target (`requiredJoules`). Always FTP-relative; never a raw threshold. */
|
|
73
120
|
ftp?: number;
|
|
@@ -75,6 +122,20 @@ export interface PowerRaceOpts {
|
|
|
75
122
|
durationS?: number;
|
|
76
123
|
/** Effort target as a fraction of FTP: `requiredJoules = targetFtpPct × ftp × durationS`. Default 1.1. */
|
|
77
124
|
targetFtpPct?: number;
|
|
125
|
+
/**
|
|
126
|
+
* The priming wind-up before the bars go live, in seconds. Default {@link INTRO_TOTAL_S} (2 s);
|
|
127
|
+
* the three sub-phases (alarm → prompt → bars open) scale together, so `1` gives the same
|
|
128
|
+
* choreography at double speed.
|
|
129
|
+
*
|
|
130
|
+
* `0` (or `false`) skips it: `start()` puts the widget straight into `racing`, watts count from that
|
|
131
|
+
* frame, and the intro's own slide/fade choreography is dropped so frame 1 already reads as the
|
|
132
|
+
* racing state. That's what a widget the rider OPENED wants — they pressed the button, the decision
|
|
133
|
+
* is made, and a wind-up would leave them pedalling into nothing. Keep the default for a widget that
|
|
134
|
+
* arrives at the rider unannounced, where the wind-up IS the warning.
|
|
135
|
+
*/
|
|
136
|
+
introS?: number | false;
|
|
137
|
+
/** What happens after it resolves — stamp delay and auto-hide. See {@link PowerRaceHold}. */
|
|
138
|
+
hold?: PowerRaceHold;
|
|
78
139
|
/**
|
|
79
140
|
* `"race"` (default) — a rival **deadline** bar races you; you lose if it fills first (the "push NOW
|
|
80
141
|
* or lose it" beat). `"charge"` — **no rival**: you just fill the charge bar (a solo "charge this
|
|
@@ -111,11 +172,31 @@ export interface PowerRaceHud {
|
|
|
111
172
|
deadline: number;
|
|
112
173
|
charge: number;
|
|
113
174
|
};
|
|
175
|
+
/** The effort target in force, including the derived `requiredJoules`. */
|
|
176
|
+
getTarget(): PowerRaceTarget;
|
|
177
|
+
/**
|
|
178
|
+
* Re-size the effort target in place (any subset) — no rebuild, no new DOM tree.
|
|
179
|
+
*
|
|
180
|
+
* This is how you honour a rider retuning their FTP mid-ride: the widget is long-lived and reused
|
|
181
|
+
* per beat, and `requiredJoules` is derived, so it can simply be re-derived. Intended BETWEEN races
|
|
182
|
+
* (before the next `start()`); called mid-race it takes effect on the next frame, which moves the
|
|
183
|
+
* finish line under a rider who is already pushing for it.
|
|
184
|
+
*/
|
|
185
|
+
setTarget(next: {
|
|
186
|
+
ftp?: number;
|
|
187
|
+
durationS?: number;
|
|
188
|
+
targetFtpPct?: number;
|
|
189
|
+
}): void;
|
|
114
190
|
/** Advance one frame; returns the (possibly new) phase. Self-resolves + fires `onResolve`. */
|
|
115
191
|
tick(dt: number): PowerRacePhase;
|
|
116
|
-
/**
|
|
192
|
+
/**
|
|
193
|
+
* Force a resolution (e.g. an externally decided outcome).
|
|
194
|
+
*
|
|
195
|
+
* `durationS` overrides the configured `hold.hideAfterS` for this one resolution — a number to hide
|
|
196
|
+
* after that many seconds, `false` to leave it up.
|
|
197
|
+
*/
|
|
117
198
|
showResolution(outcome: PowerRaceOutcome, opts?: {
|
|
118
|
-
durationS?: number;
|
|
199
|
+
durationS?: number | false;
|
|
119
200
|
}): void;
|
|
120
201
|
/** Back to idle (hidden, bars cleared) for reuse. */
|
|
121
202
|
reset(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"power-race.d.ts","sourceRoot":"","sources":["../../src/ui/power-race.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"power-race.d.ts","sourceRoot":"","sources":["../../src/ui/power-race.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/power-race.js
CHANGED
|
@@ -27,6 +27,18 @@
|
|
|
27
27
|
* Driving it: `start()`, then pump `setPower(w)` + `tick(dt)` every frame. The HUD self-resolves to
|
|
28
28
|
* `won` / `lost` when either bar crosses 100%; poll `getPhase()` or pass `onResolve`. Drive external
|
|
29
29
|
* VFX (a glow, a light) off `getProgress().charge`.
|
|
30
|
+
*
|
|
31
|
+
* ── Timings ────────────────────────────────────────────────────────────────────────────────────
|
|
32
|
+
* Three of them, all optional:
|
|
33
|
+
* · `introS` — the wind-up before the bars go live (default 2 s; `0`/`false` = live on frame 1).
|
|
34
|
+
* A widget the rider OPENED by pressing a button wants `introS: 0` — they already committed, and
|
|
35
|
+
* a wind-up leaves them pedalling into nothing. A widget that arrives at them (an incoming
|
|
36
|
+
* missile) wants the default: the wind-up IS the warning.
|
|
37
|
+
* · `durationS` — the race itself: the clock's fill time, and the work that fills the charge bar.
|
|
38
|
+
* · `hold` — what happens after it resolves: when the win/lose stamp lands (`stampDelayS`) and when
|
|
39
|
+
* the overlay hides itself (`hideAfterS`, or `false` to leave it up and hide it yourself).
|
|
40
|
+
* `setTarget()` re-sizes the effort target in place, so a rider retuning their FTP mid-ride doesn't
|
|
41
|
+
* cost you a rebuilt widget.
|
|
30
42
|
*/
|
|
31
43
|
const STYLE_ID = "rydr-power-race-styles";
|
|
32
44
|
const VARIANTS = ["twin-stacked", "twin-towers"];
|
|
@@ -39,12 +51,16 @@ const GRADES = [
|
|
|
39
51
|
{ min: 0, label: "CLEAN", color: "#9aa7c7" },
|
|
40
52
|
];
|
|
41
53
|
const gradeForPct = (pct) => GRADES.find((g) => pct >= g.min);
|
|
42
|
-
/** Intro sub-phase
|
|
54
|
+
/** Intro sub-phase weights (seconds at the default pace). `introS` scales all three together. */
|
|
43
55
|
const PRIMING_WARNING_S = 0.5;
|
|
44
56
|
const PRIMING_PROMPT_S = 1.0;
|
|
45
57
|
const PRIMING_BARS_S = 0.5;
|
|
46
|
-
/**
|
|
47
|
-
export const INTRO_TOTAL_S = PRIMING_WARNING_S + PRIMING_PROMPT_S + PRIMING_BARS_S; //
|
|
58
|
+
/** Default total intro duration in seconds — the default of `introS`, and what it scales. */
|
|
59
|
+
export const INTRO_TOTAL_S = PRIMING_WARNING_S + PRIMING_PROMPT_S + PRIMING_BARS_S; // 2.0
|
|
60
|
+
/** Default delay from resolving to the win/lose stamp landing (seconds). */
|
|
61
|
+
export const DEFAULT_STAMP_DELAY_S = 0.25;
|
|
62
|
+
/** Default delay from resolving to the overlay hiding itself (seconds). */
|
|
63
|
+
export const DEFAULT_HIDE_AFTER_S = 1.25;
|
|
48
64
|
/** The built-in "alert" skin — the proven Tower-Defense look. Default when no `theme` is passed. */
|
|
49
65
|
export const DEFAULT_POWER_RACE_THEME = {
|
|
50
66
|
deadline: "#ef4444",
|
|
@@ -63,23 +79,32 @@ const DEFAULT_TEXT = {
|
|
|
63
79
|
lose: "MISSED",
|
|
64
80
|
};
|
|
65
81
|
export function createPowerRace(opts = {}) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
82
|
+
let ftp = opts.ftp ?? 250;
|
|
83
|
+
let durationS = opts.durationS ?? 5;
|
|
84
|
+
let targetFtpPct = opts.targetFtpPct ?? 1.1;
|
|
69
85
|
let variant = opts.variant ?? "twin-stacked";
|
|
70
86
|
let scoreVariant = opts.scoreVariant ?? null;
|
|
71
87
|
const text = { ...DEFAULT_TEXT, ...(opts.text ?? {}) };
|
|
72
88
|
const theme = { ...DEFAULT_POWER_RACE_THEME, ...(opts.theme ?? {}) };
|
|
73
89
|
const onResolve = opts.onResolve;
|
|
74
90
|
const mode = opts.mode === "charge" ? "charge" : "race";
|
|
91
|
+
// Intro: one knob for all three sub-phases, so a game retimes the wind-up without re-choreographing
|
|
92
|
+
// it. The cumulative edges are precomputed — `tick` compares against them, not against a scale.
|
|
93
|
+
const introS = opts.introS === false ? 0 : Math.max(0, opts.introS ?? INTRO_TOTAL_S);
|
|
94
|
+
const introScale = introS / INTRO_TOTAL_S;
|
|
95
|
+
const warnEndS = PRIMING_WARNING_S * introScale;
|
|
96
|
+
const promptEndS = warnEndS + PRIMING_PROMPT_S * introScale;
|
|
97
|
+
// Resolution holds. `null` == "never" (the `false` the caller passed); a number is a delay in seconds.
|
|
98
|
+
const stampDelayS = opts.hold?.stampDelayS === false ? null : Math.max(0, opts.hold?.stampDelayS ?? DEFAULT_STAMP_DELAY_S);
|
|
99
|
+
const hideAfterS = opts.hold?.hideAfterS === false ? null : Math.max(0, opts.hold?.hideAfterS ?? DEFAULT_HIDE_AFTER_S);
|
|
75
100
|
ensureStyles();
|
|
76
101
|
if (!VARIANTS.includes(variant))
|
|
77
102
|
variant = "twin-stacked";
|
|
78
103
|
if (scoreVariant && !SCORE_VARIANTS.includes(scoreVariant))
|
|
79
104
|
scoreVariant = null;
|
|
80
|
-
|
|
105
|
+
let requiredJoules = targetFtpPct * ftp * durationS;
|
|
81
106
|
const root = document.createElement("div");
|
|
82
|
-
root.className = `rpr v-${variant} mode-${mode}${scoreVariant ? ` has-score place-${scoreVariant}` : ""}`;
|
|
107
|
+
root.className = `rpr v-${variant} mode-${mode}${introS <= 0 ? " no-intro" : ""}${scoreVariant ? ` has-score place-${scoreVariant}` : ""}`;
|
|
83
108
|
root.innerHTML = innerForVariant(variant);
|
|
84
109
|
// per-instance palette → CSS custom properties (cascades to every descendant)
|
|
85
110
|
root.style.setProperty("--rpr-deadline", theme.deadline);
|
|
@@ -114,7 +139,6 @@ export function createPowerRace(opts = {}) {
|
|
|
114
139
|
let accumulatedJoules = 0;
|
|
115
140
|
let lastPowerW = 0;
|
|
116
141
|
let lastStage = "idle";
|
|
117
|
-
let resolutionTimer = 0;
|
|
118
142
|
let stampRevealTimer = 0;
|
|
119
143
|
let hideTimer = 0;
|
|
120
144
|
let primingS = 0;
|
|
@@ -172,7 +196,13 @@ export function createPowerRace(opts = {}) {
|
|
|
172
196
|
root.classList.add("score-resolved");
|
|
173
197
|
root.classList.toggle("score-miss", isMiss);
|
|
174
198
|
}
|
|
175
|
-
|
|
199
|
+
/**
|
|
200
|
+
* Land an outcome: recolour, score it, then schedule the stamp and the auto-hide.
|
|
201
|
+
*
|
|
202
|
+
* `hideAfterOverrideS` is `undefined` for "use the configured hold" and `null` for "don't hide" —
|
|
203
|
+
* `showResolution` needs to say both, and a game that asked for no auto-hide must not get one.
|
|
204
|
+
*/
|
|
205
|
+
function applyOutcome(outcome, hideAfterOverrideS) {
|
|
176
206
|
phase = outcome;
|
|
177
207
|
root.classList.remove("racing", "won", "lost");
|
|
178
208
|
root.classList.add(outcome);
|
|
@@ -186,38 +216,58 @@ export function createPowerRace(opts = {}) {
|
|
|
186
216
|
stampEl.innerHTML = "";
|
|
187
217
|
root.classList.remove("stamp-revealed");
|
|
188
218
|
window.clearTimeout(stampRevealTimer);
|
|
219
|
+
stampRevealTimer = 0;
|
|
189
220
|
window.clearTimeout(hideTimer);
|
|
190
|
-
|
|
221
|
+
hideTimer = 0;
|
|
222
|
+
const revealStamp = () => {
|
|
191
223
|
stampEl.innerHTML = `<span class="text">${outcome === "won" ? text.win : text.lose}</span>`;
|
|
192
224
|
root.classList.add("stamp-revealed");
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
225
|
+
};
|
|
226
|
+
if (stampDelayS === 0)
|
|
227
|
+
revealStamp();
|
|
228
|
+
else if (stampDelayS !== null) {
|
|
229
|
+
stampRevealTimer = window.setTimeout(() => {
|
|
230
|
+
revealStamp();
|
|
231
|
+
stampRevealTimer = 0;
|
|
232
|
+
}, stampDelayS * 1000);
|
|
233
|
+
}
|
|
234
|
+
const hideAfter = hideAfterOverrideS === undefined ? hideAfterS : hideAfterOverrideS;
|
|
235
|
+
if (hideAfter !== null) {
|
|
236
|
+
hideTimer = window.setTimeout(() => {
|
|
237
|
+
root.classList.remove("show");
|
|
238
|
+
hideTimer = 0;
|
|
239
|
+
}, hideAfter * 1000);
|
|
240
|
+
}
|
|
199
241
|
onResolve?.(outcome);
|
|
200
242
|
}
|
|
201
243
|
return {
|
|
202
244
|
element: root,
|
|
203
245
|
start() {
|
|
204
|
-
window.clearTimeout(resolutionTimer);
|
|
205
|
-
resolutionTimer = 0;
|
|
206
246
|
window.clearTimeout(stampRevealTimer);
|
|
207
247
|
stampRevealTimer = 0;
|
|
208
248
|
window.clearTimeout(hideTimer);
|
|
209
249
|
hideTimer = 0;
|
|
210
|
-
phase = "priming-warning";
|
|
211
250
|
primingS = 0;
|
|
212
251
|
elapsedS = 0;
|
|
213
252
|
accumulatedJoules = 0;
|
|
214
253
|
lastPowerW = 0;
|
|
215
254
|
root.classList.remove("racing", "won", "lost", "stamp-revealed", "bars-open");
|
|
216
255
|
root.classList.add("show");
|
|
217
|
-
setPrimingClass("warning");
|
|
218
256
|
headingEl.textContent = text.heading;
|
|
219
257
|
promptEl.textContent = text.prompt;
|
|
220
258
|
stampEl.textContent = "";
|
|
259
|
+
if (introS <= 0) {
|
|
260
|
+
// No wind-up: straight into the race, so watts count from THIS frame. The priming classes are
|
|
261
|
+
// skipped outright rather than flipped three times in one frame, and `.no-intro` drops their
|
|
262
|
+
// slide/fade, so frame 1 already looks like the racing state instead of animating towards it.
|
|
263
|
+
phase = "racing";
|
|
264
|
+
setPrimingClass(null);
|
|
265
|
+
root.classList.add("bars-open", "racing");
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
phase = "priming-warning";
|
|
269
|
+
setPrimingClass("warning");
|
|
270
|
+
}
|
|
221
271
|
paint();
|
|
222
272
|
},
|
|
223
273
|
setPower(w) {
|
|
@@ -232,19 +282,32 @@ export function createPowerRace(opts = {}) {
|
|
|
232
282
|
charge: Math.min(1, accumulatedJoules / requiredJoules),
|
|
233
283
|
};
|
|
234
284
|
},
|
|
285
|
+
getTarget() {
|
|
286
|
+
return { ftp, durationS, targetFtpPct, requiredJoules };
|
|
287
|
+
},
|
|
288
|
+
setTarget(next) {
|
|
289
|
+
if (next.ftp != null && next.ftp > 0)
|
|
290
|
+
ftp = next.ftp;
|
|
291
|
+
if (next.durationS != null && next.durationS > 0)
|
|
292
|
+
durationS = next.durationS;
|
|
293
|
+
if (next.targetFtpPct != null && next.targetFtpPct > 0)
|
|
294
|
+
targetFtpPct = next.targetFtpPct;
|
|
295
|
+
requiredJoules = targetFtpPct * ftp * durationS;
|
|
296
|
+
paint();
|
|
297
|
+
},
|
|
235
298
|
tick(dt) {
|
|
236
299
|
if (phase === "priming-warning" || phase === "priming-prompt" || phase === "priming-bars") {
|
|
237
300
|
primingS += dt;
|
|
238
|
-
if (phase === "priming-warning" && primingS >=
|
|
301
|
+
if (phase === "priming-warning" && primingS >= warnEndS) {
|
|
239
302
|
phase = "priming-prompt";
|
|
240
303
|
setPrimingClass("prompt");
|
|
241
304
|
}
|
|
242
|
-
if (phase === "priming-prompt" && primingS >=
|
|
305
|
+
if (phase === "priming-prompt" && primingS >= promptEndS) {
|
|
243
306
|
phase = "priming-bars";
|
|
244
307
|
setPrimingClass("bars");
|
|
245
308
|
root.classList.add("bars-open");
|
|
246
309
|
}
|
|
247
|
-
if (phase === "priming-bars" && primingS >=
|
|
310
|
+
if (phase === "priming-bars" && primingS >= introS) {
|
|
248
311
|
phase = "racing";
|
|
249
312
|
setPrimingClass(null);
|
|
250
313
|
root.classList.add("racing");
|
|
@@ -276,24 +339,13 @@ export function createPowerRace(opts = {}) {
|
|
|
276
339
|
showResolution(outcome, opts2 = {}) {
|
|
277
340
|
if (outcome !== "won" && outcome !== "lost")
|
|
278
341
|
return;
|
|
279
|
-
|
|
342
|
+
// A caller-supplied hide time REPLACES the configured one — it used to be a second timer racing
|
|
343
|
+
// the built-in 1.25 s hide, which silently capped anything longer.
|
|
344
|
+
const override = opts2.durationS === false ? null : opts2.durationS != null && opts2.durationS > 0 ? opts2.durationS : undefined;
|
|
345
|
+
applyOutcome(outcome, override);
|
|
280
346
|
paint();
|
|
281
|
-
if (resolutionTimer) {
|
|
282
|
-
window.clearTimeout(resolutionTimer);
|
|
283
|
-
resolutionTimer = 0;
|
|
284
|
-
}
|
|
285
|
-
if (opts2.durationS != null && opts2.durationS > 0) {
|
|
286
|
-
resolutionTimer = window.setTimeout(() => {
|
|
287
|
-
root.classList.remove("show");
|
|
288
|
-
resolutionTimer = 0;
|
|
289
|
-
}, opts2.durationS * 1000);
|
|
290
|
-
}
|
|
291
347
|
},
|
|
292
348
|
reset() {
|
|
293
|
-
if (resolutionTimer) {
|
|
294
|
-
window.clearTimeout(resolutionTimer);
|
|
295
|
-
resolutionTimer = 0;
|
|
296
|
-
}
|
|
297
349
|
if (stampRevealTimer) {
|
|
298
350
|
window.clearTimeout(stampRevealTimer);
|
|
299
351
|
stampRevealTimer = 0;
|
|
@@ -313,8 +365,6 @@ export function createPowerRace(opts = {}) {
|
|
|
313
365
|
paint();
|
|
314
366
|
},
|
|
315
367
|
dispose() {
|
|
316
|
-
if (resolutionTimer)
|
|
317
|
-
window.clearTimeout(resolutionTimer);
|
|
318
368
|
if (stampRevealTimer)
|
|
319
369
|
window.clearTimeout(stampRevealTimer);
|
|
320
370
|
if (hideTimer)
|
|
@@ -651,6 +701,13 @@ const CSS = `
|
|
|
651
701
|
58% { transform: translateY(-50%) scale(0.92); }
|
|
652
702
|
100% { transform: translateY(-50%) scale(1.28); }
|
|
653
703
|
}
|
|
704
|
+
/* introS: 0 — no wind-up. The slide and the fade ARE the wind-up's choreography, so they go with it:
|
|
705
|
+
frame 1 has to read as the racing state, not as a 400 ms fade the rider pedals through having already
|
|
706
|
+
committed. Only the opacity cross-fade of the copy survives, which nothing has to wait for. */
|
|
707
|
+
.rpr.no-intro .rpr-stack,
|
|
708
|
+
.rpr.no-intro .rpr-towers { transition: none; }
|
|
709
|
+
.rpr.no-intro .rpr-heading,
|
|
710
|
+
.rpr.no-intro .rpr-prompt { transition: opacity 0.3s ease; }
|
|
654
711
|
/* charge mode — no rival: hide the deadline bar and calm the alarm framing. The single charge bar
|
|
655
712
|
stays centred by the flex/align layout it already lives in; only the effort bar remains. */
|
|
656
713
|
.rpr.mode-charge .rpr-deadline-bar { display: none; }
|