@rydr/game-sdk 3.11.0 → 3.13.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 +9 -1
- package/dist/client/PlatformClient.d.ts +17 -4
- package/dist/client/PlatformClient.d.ts.map +1 -1
- package/dist/client/PlatformClient.js +1 -1
- package/dist/client/PlatformClient.js.map +1 -1
- package/dist/conversations/voice-samples.d.ts.map +1 -1
- package/dist/conversations/voice-samples.js +183 -2
- package/dist/conversations/voice-samples.js.map +1 -1
- package/dist/conversations/voices.d.ts.map +1 -1
- package/dist/conversations/voices.js +5 -3
- package/dist/conversations/voices.js.map +1 -1
- package/dist/host/PlatformHost.d.ts +4 -2
- package/dist/host/PlatformHost.d.ts.map +1 -1
- package/dist/host/PlatformHost.js +1 -1
- package/dist/host/PlatformHost.js.map +1 -1
- package/dist/protocol/boards.d.ts +4 -0
- package/dist/protocol/boards.d.ts.map +1 -1
- package/dist/protocol/boards.js.map +1 -1
- package/dist/protocol/conversations.d.ts +11 -0
- package/dist/protocol/conversations.d.ts.map +1 -1
- package/dist/protocol/conversations.js +14 -0
- package/dist/protocol/conversations.js.map +1 -1
- package/dist/protocol/messages.d.ts +7 -1
- package/dist/protocol/messages.d.ts.map +1 -1
- package/dist/protocol/version.d.ts +2 -2
- package/dist/protocol/version.d.ts.map +1 -1
- package/dist/protocol/version.js +7 -2
- package/dist/protocol/version.js.map +1 -1
- package/dist/sound-gallery/index.d.ts +41 -0
- package/dist/sound-gallery/index.d.ts.map +1 -0
- package/dist/sound-gallery/index.js +1264 -0
- package/dist/sound-gallery/index.js.map +1 -0
- package/dist/soundboard-editor/index.d.ts +44 -0
- package/dist/soundboard-editor/index.d.ts.map +1 -0
- package/dist/soundboard-editor/index.js +253 -0
- package/dist/soundboard-editor/index.js.map +1 -0
- package/dist/sounds/audio-utils.d.ts +16 -0
- package/dist/sounds/audio-utils.d.ts.map +1 -0
- package/dist/sounds/audio-utils.js +150 -0
- package/dist/sounds/audio-utils.js.map +1 -0
- package/dist/sounds/index.d.ts +25 -0
- package/dist/sounds/index.d.ts.map +1 -0
- package/dist/sounds/index.js +22 -0
- package/dist/sounds/index.js.map +1 -0
- package/dist/sounds/sound-bank.d.ts +73 -0
- package/dist/sounds/sound-bank.d.ts.map +1 -0
- package/dist/sounds/sound-bank.js +321 -0
- package/dist/sounds/sound-bank.js.map +1 -0
- package/dist/sounds/soundboard.d.ts +121 -0
- package/dist/sounds/soundboard.d.ts.map +1 -0
- package/dist/sounds/soundboard.js +154 -0
- package/dist/sounds/soundboard.js.map +1 -0
- package/dist/sounds/types.d.ts +88 -0
- package/dist/sounds/types.d.ts.map +1 -0
- package/dist/sounds/types.js +8 -0
- package/dist/sounds/types.js.map +1 -0
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/power-race.d.ts +2 -2
- package/dist/ui/power-race.d.ts.map +1 -1
- package/dist/ui/power-race.js +8 -72
- 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 +42 -2
- package/dist/ui/showcase/index.js.map +1 -1
- package/dist/ui/solo-labeled-diamond.d.ts +69 -0
- package/dist/ui/solo-labeled-diamond.d.ts.map +1 -0
- package/dist/ui/solo-labeled-diamond.js +168 -0
- package/dist/ui/solo-labeled-diamond.js.map +1 -0
- package/dist/ui/styles.js +11 -2
- package/dist/ui/styles.js.map +1 -1
- package/dist/voice-gallery/index.d.ts.map +1 -1
- package/dist/voice-gallery/index.js +132 -12
- package/dist/voice-gallery/index.js.map +1 -1
- package/dist/voiceover-editor/index.d.ts +6 -0
- package/dist/voiceover-editor/index.d.ts.map +1 -1
- package/dist/voiceover-editor/index.js +222 -14
- package/dist/voiceover-editor/index.js.map +1 -1
- package/package.json +16 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Soundboard` — the game-facing **cue layer** over {@link SoundBank}.
|
|
3
|
+
*
|
|
4
|
+
* A `SoundBank` plays by raw library key (`bank.play("anime_sword_slash_fatality")`). That couples
|
|
5
|
+
* every game to the catalog's exact keys and re-implements the same glue (bus routing, cooldown,
|
|
6
|
+
* volume/mute, preload) in each game. A `Soundboard` adds the missing middle: a small set of stable,
|
|
7
|
+
* **semantic cues** (`"nav.move"`, `"record.pb"`, …) that a game fires by intent, decoupled from
|
|
8
|
+
* which sound is bound to them — the same code-owns-structure / data-owns-binding split as
|
|
9
|
+
* `defineConversation` + the voice-over editor.
|
|
10
|
+
*
|
|
11
|
+
* The SDK ships {@link STANDARD_CUES} (+ {@link STANDARD_BINDINGS} to reserved `sys.*` platform
|
|
12
|
+
* keys) so every game's menus/records sound consistent out of the box; a game overrides any cue's
|
|
13
|
+
* binding (or adds its own cues) and the rest keep the platform defaults:
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { createSoundboard, STANDARD_CUES } from "@rydr/game-sdk/sounds";
|
|
17
|
+
* const sounds = createSoundboard({
|
|
18
|
+
* context, // share the game's AudioContext
|
|
19
|
+
* cues: { "run.fail": { category: "sfx" } }, // game-specific cue (merged over STANDARD_CUES)
|
|
20
|
+
* bindings: { "record.wr": "chorale_spell_heal_holy" }, // override one default binding
|
|
21
|
+
* });
|
|
22
|
+
* await sounds.load(); // fetch the published library + preload every bound cue
|
|
23
|
+
* sounds.cue("nav.move"); // fail-silent: unknown/unbound/unpublished key just no-ops
|
|
24
|
+
* sounds.setUiVolume(-6); // player setting → the "ui" bus
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* Fail-silent by construction: a cue with no binding, an unpublished key, or an unavailable
|
|
28
|
+
* AudioContext is a no-op — so a game can declare and fire cues before their sounds exist in the
|
|
29
|
+
* gallery, and ship sounds later with no redeploy.
|
|
30
|
+
*/
|
|
31
|
+
import { createSoundBank } from "./sound-bank.js";
|
|
32
|
+
/** The published, platform-wide sound library (R2 `sounds/library.json`). Same host as the TTS cache.
|
|
33
|
+
* A game may pass its own `manifestUrl`, but every game shares this one library by default. */
|
|
34
|
+
export const DEFAULT_SOUND_LIBRARY_URL = "https://pub-3e9a1541a2e9454596e0f4148c48adef.r2.dev/sounds/library.json";
|
|
35
|
+
/**
|
|
36
|
+
* The standard cues every RYDR game shares, so menus and record moments feel the same platform-wide.
|
|
37
|
+
* A game inherits these and overrides only what it wants. Navigation cues are `ui` (subtle,
|
|
38
|
+
* cooldown-gated); the fanfares are one-shots with a longer cooldown so they can't stack.
|
|
39
|
+
*/
|
|
40
|
+
export const STANDARD_CUES = {
|
|
41
|
+
"nav.move": { category: "ui", cooldownMs: 40, gainDb: -4, description: "Menu highlight moved." },
|
|
42
|
+
"nav.confirm": { category: "ui", description: "Menu item confirmed / activated." },
|
|
43
|
+
"nav.back": { category: "ui", description: "Backed out / cancelled." },
|
|
44
|
+
"nav.error": { category: "ui", cooldownMs: 120, description: "Rejected / invalid action." },
|
|
45
|
+
"run.start": { category: "ui", description: "A run begins (countdown / go)." },
|
|
46
|
+
"record.pb": { category: "ui", cooldownMs: 500, description: "New personal best." },
|
|
47
|
+
"record.wr": { category: "ui", cooldownMs: 500, description: "New #1 / world record." },
|
|
48
|
+
"run.fail": { category: "sfx", cooldownMs: 500, description: "Run failed / game over." },
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Default bindings for {@link STANDARD_CUES}, pointing at reserved `sys.*` keys the platform sound
|
|
52
|
+
* gallery is expected to publish. Until those keys exist the standard cues are silent (fail-silent),
|
|
53
|
+
* and a game can bind them to its own catalog keys in the meantime.
|
|
54
|
+
*/
|
|
55
|
+
export const STANDARD_BINDINGS = {
|
|
56
|
+
"nav.move": "sys.nav.move",
|
|
57
|
+
"nav.confirm": "sys.nav.confirm",
|
|
58
|
+
"nav.back": "sys.nav.back",
|
|
59
|
+
"nav.error": "sys.nav.error",
|
|
60
|
+
"run.start": "sys.run.start",
|
|
61
|
+
"record.pb": "sys.record.pb",
|
|
62
|
+
"record.wr": "sys.record.wr",
|
|
63
|
+
"run.fail": "sys.run.fail",
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Where a game persists its cue→key bindings: a single `shared` gamedata doc (admin-written,
|
|
67
|
+
* public-read — like conversations/songs), edited in the soundboard editor and read at runtime to
|
|
68
|
+
* override the code defaults. The platform namespaces gamedata by game slug, so one collection + one
|
|
69
|
+
* doc id per game is enough. The doc's `data` is a {@link SoundboardDoc}.
|
|
70
|
+
*/
|
|
71
|
+
export const SOUNDBOARD_COLLECTION = "soundboard";
|
|
72
|
+
export const SOUNDBOARD_BINDINGS_ID = "bindings";
|
|
73
|
+
export function createSoundboard(opts = {}) {
|
|
74
|
+
const catalog = { ...STANDARD_CUES, ...opts.cues };
|
|
75
|
+
const bindings = { ...STANDARD_BINDINGS, ...opts.bindings };
|
|
76
|
+
const bank = createSoundBank({
|
|
77
|
+
manifestUrl: opts.manifestUrl ?? DEFAULT_SOUND_LIBRARY_URL,
|
|
78
|
+
manifest: opts.manifest,
|
|
79
|
+
context: opts.context,
|
|
80
|
+
limiter: opts.limiter,
|
|
81
|
+
});
|
|
82
|
+
const lastFiredAt = new Map();
|
|
83
|
+
let masterDb = 0;
|
|
84
|
+
/** Library keys actually bound to a declared cue — the set worth preloading. */
|
|
85
|
+
function boundKeys() {
|
|
86
|
+
const keys = new Set();
|
|
87
|
+
for (const id of Object.keys(catalog)) {
|
|
88
|
+
const key = bindings[id];
|
|
89
|
+
if (key)
|
|
90
|
+
keys.add(key);
|
|
91
|
+
}
|
|
92
|
+
return [...keys];
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
catalog,
|
|
96
|
+
bindings,
|
|
97
|
+
bank,
|
|
98
|
+
async load() {
|
|
99
|
+
await bank.load();
|
|
100
|
+
// Warm only the bound cues; the full library may be large. Unpublished keys are ignored.
|
|
101
|
+
await bank.preload(boundKeys());
|
|
102
|
+
},
|
|
103
|
+
cue(id, o = {}) {
|
|
104
|
+
const def = catalog[id];
|
|
105
|
+
const key = bindings[id];
|
|
106
|
+
if (!def || !key)
|
|
107
|
+
return null; // unknown or unbound cue
|
|
108
|
+
const cd = def.cooldownMs ?? 0;
|
|
109
|
+
if (cd > 0) {
|
|
110
|
+
const now = typeof performance !== "undefined" ? performance.now() : Date.now();
|
|
111
|
+
if (now - (lastFiredAt.get(id) ?? -Infinity) < cd)
|
|
112
|
+
return null;
|
|
113
|
+
lastFiredAt.set(id, now);
|
|
114
|
+
}
|
|
115
|
+
const gainDb = (def.gainDb ?? 0) + (o.gainDb ?? 0);
|
|
116
|
+
return bank.play(key, { ...o, gainDb });
|
|
117
|
+
},
|
|
118
|
+
stop(id) {
|
|
119
|
+
const key = bindings[id];
|
|
120
|
+
if (key)
|
|
121
|
+
bank.stop(key);
|
|
122
|
+
},
|
|
123
|
+
setBinding(cueId, key) {
|
|
124
|
+
if (key)
|
|
125
|
+
bindings[cueId] = key;
|
|
126
|
+
else
|
|
127
|
+
delete bindings[cueId];
|
|
128
|
+
void bank.preload(boundKeys());
|
|
129
|
+
},
|
|
130
|
+
setBindings(map) {
|
|
131
|
+
for (const [id, key] of Object.entries(map)) {
|
|
132
|
+
if (key)
|
|
133
|
+
bindings[id] = key;
|
|
134
|
+
else
|
|
135
|
+
delete bindings[id];
|
|
136
|
+
}
|
|
137
|
+
void bank.preload(boundKeys());
|
|
138
|
+
},
|
|
139
|
+
setMasterVolume(db) {
|
|
140
|
+
masterDb = db;
|
|
141
|
+
bank.setMasterVolume(db);
|
|
142
|
+
},
|
|
143
|
+
setUiVolume(db) {
|
|
144
|
+
bank.setBusVolume("ui", db);
|
|
145
|
+
},
|
|
146
|
+
mute(on) {
|
|
147
|
+
bank.setMasterVolume(on ? -60 : masterDb);
|
|
148
|
+
},
|
|
149
|
+
dispose() {
|
|
150
|
+
bank.dispose();
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=soundboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soundboard.js","sourceRoot":"","sources":["../../src/sounds/soundboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sound-library data types — owned by the SDK (like world/character types), so the platform's
|
|
3
|
+
* `SoundService`/gallery and every game's `SoundBank` share ONE shape. A "sound" is modelled as an
|
|
4
|
+
* **event** (a stable key + a pool of clips + behaviour), not a bare file — so variation and the
|
|
5
|
+
* hardware-driven adaptive layer are additive later with no schema migration.
|
|
6
|
+
*/
|
|
7
|
+
/** Mixer bus + organisational category. Each maps to an independently-controllable gain bus. */
|
|
8
|
+
export type SoundCategory = "sfx" | "music" | "ambience" | "ui" | "voice";
|
|
9
|
+
export declare const SOUND_CATEGORIES: readonly SoundCategory[];
|
|
10
|
+
/** One audio file in an event's pool. */
|
|
11
|
+
export interface SoundClip {
|
|
12
|
+
/** Public R2 URL of the audio (wav/mp3/ogg). */
|
|
13
|
+
url: string;
|
|
14
|
+
/** Original upload filename (display only). */
|
|
15
|
+
filename?: string;
|
|
16
|
+
/** Duration in seconds, measured at ingest. */
|
|
17
|
+
durationSec?: number;
|
|
18
|
+
}
|
|
19
|
+
/** Per-play randomisation. The runtime honours it on every {@link SoundBank.play}; all optional. */
|
|
20
|
+
export interface SoundVariation {
|
|
21
|
+
/** ± random detune per play, in cents (100 = one semitone). 0/undefined = none. */
|
|
22
|
+
pitchCents?: number;
|
|
23
|
+
/** ± random gain per play, in dB. 0/undefined = none. */
|
|
24
|
+
volumeDb?: number;
|
|
25
|
+
/** Drop retriggers of this event faster than this many ms (anti-machine-gun). */
|
|
26
|
+
cooldownMs?: number;
|
|
27
|
+
/** Cap simultaneous live voices of this event; the oldest is stolen. undefined = unlimited. */
|
|
28
|
+
maxVoices?: number;
|
|
29
|
+
}
|
|
30
|
+
/** Loudness measured at ingest — the input to future normalisation (P2). */
|
|
31
|
+
export interface SoundLoudness {
|
|
32
|
+
integratedLufs?: number;
|
|
33
|
+
peakDb?: number;
|
|
34
|
+
}
|
|
35
|
+
/** Provenance/attribution, e.g. for Freesound packs — feeds a future credits manifest. */
|
|
36
|
+
export interface SoundLicense {
|
|
37
|
+
source?: string;
|
|
38
|
+
author?: string;
|
|
39
|
+
url?: string;
|
|
40
|
+
note?: string;
|
|
41
|
+
}
|
|
42
|
+
/** A library entry: a named, foldered, taggable sound event games play by its stable {@link key}. */
|
|
43
|
+
export interface SoundAsset {
|
|
44
|
+
/** Stable play key AND Supabase row id (unique within the library): `sounds.play(key)`. */
|
|
45
|
+
key: string;
|
|
46
|
+
name: string;
|
|
47
|
+
label?: string;
|
|
48
|
+
category: SoundCategory;
|
|
49
|
+
/** Id of the {@link SoundFolder} this sound is filed under (authoring-only). null/undefined = unfiled. */
|
|
50
|
+
folderId?: string | null;
|
|
51
|
+
/** @deprecated Legacy free-text folder path; superseded by {@link folderId}. Kept for back-compat. */
|
|
52
|
+
folder?: string;
|
|
53
|
+
tags?: string[];
|
|
54
|
+
/** Clip pool. One entry today; many enables the random-container variation (P2). */
|
|
55
|
+
clips: SoundClip[];
|
|
56
|
+
/** Per-play randomisation. */
|
|
57
|
+
variation?: SoundVariation;
|
|
58
|
+
/** Static designer trim applied to every play, in dB. */
|
|
59
|
+
gainDb?: number;
|
|
60
|
+
/** Stream (music/ambience) instead of decoding fully into memory (sfx). */
|
|
61
|
+
stream?: boolean;
|
|
62
|
+
loudness?: SoundLoudness;
|
|
63
|
+
license?: SoundLicense;
|
|
64
|
+
/** Downsampled |amplitude| in 0..1 for instant waveform rendering in the gallery. */
|
|
65
|
+
peaks?: number[];
|
|
66
|
+
/** Epoch ms of last save. */
|
|
67
|
+
updatedAt?: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A folder in the authoring hierarchy — a first-class entity (stable id + parent), NOT a derived
|
|
71
|
+
* path. Sounds reference it by {@link SoundAsset.folderId}. Renaming touches one record; moving a
|
|
72
|
+
* subtree reparents one record. Folders are authoring-only and never published to games.
|
|
73
|
+
*/
|
|
74
|
+
export interface SoundFolder {
|
|
75
|
+
id: string;
|
|
76
|
+
name: string;
|
|
77
|
+
/** Parent folder id, or null for a root folder. */
|
|
78
|
+
parentId: string | null;
|
|
79
|
+
}
|
|
80
|
+
/** The published, game-facing library snapshot (R2 `sounds/library.json`). */
|
|
81
|
+
export interface SoundLibraryManifest {
|
|
82
|
+
/** Epoch ms of the last Publish, or null if never published. */
|
|
83
|
+
generatedAt: number | null;
|
|
84
|
+
/** Bumped on each Publish — lets a SoundBank cache-bust. */
|
|
85
|
+
version?: number;
|
|
86
|
+
sounds: SoundAsset[];
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sounds/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;AAC1E,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAAgD,CAAC;AAEtG,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oGAAoG;AACpG,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,2FAA2F;IAC3F,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC;IACxB,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,oFAAoF;IACpF,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sound-library data types — owned by the SDK (like world/character types), so the platform's
|
|
3
|
+
* `SoundService`/gallery and every game's `SoundBank` share ONE shape. A "sound" is modelled as an
|
|
4
|
+
* **event** (a stable key + a pool of clips + behaviour), not a bare file — so variation and the
|
|
5
|
+
* hardware-driven adaptive layer are additive later with no schema migration.
|
|
6
|
+
*/
|
|
7
|
+
export const SOUND_CATEGORIES = ["sfx", "music", "ambience", "ui", "voice"];
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sounds/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `@rydr/game-sdk/ui` — the reusable controller-button UI: a DOM/CSS keycap of the A/B/Y/Z face
|
|
3
3
|
* buttons and the UP/DOWN/LEFT/RIGHT d-pad, plus higher-level pieces built from it (a dark glass card
|
|
4
4
|
* with a content slot, an action card, the full A/B/Y/Z move diamond, an NPC dialogue card, a player
|
|
5
|
-
* choice menu, a labeled diamond, and a generic rarity card). Games use it to show "which button to
|
|
5
|
+
* choice menu, a labeled diamond, a solo labeled diamond, and a generic rarity card). Games use it to show "which button to
|
|
6
6
|
* press" in one consistent visual language across the library.
|
|
7
7
|
*
|
|
8
8
|
* Self-contained, like `@rydr/game-sdk/three`'s perf-overlay: it injects its own scoped `.rydr-ui-*`
|
|
@@ -29,6 +29,7 @@ export * from "./dialogue-card.js";
|
|
|
29
29
|
export * from "./subtitle.js";
|
|
30
30
|
export * from "./choice-card.js";
|
|
31
31
|
export * from "./labeled-diamond.js";
|
|
32
|
+
export * from "./solo-labeled-diamond.js";
|
|
32
33
|
export * from "./rarity-card.js";
|
|
33
34
|
export * from "./power-race.js";
|
|
34
35
|
//# sourceMappingURL=index.d.ts.map
|
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;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,aAAa,CAAC;AAC5B,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,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,aAAa,CAAC;AAC5B,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,iBAAiB,CAAC"}
|
package/dist/ui/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `@rydr/game-sdk/ui` — the reusable controller-button UI: a DOM/CSS keycap of the A/B/Y/Z face
|
|
3
3
|
* buttons and the UP/DOWN/LEFT/RIGHT d-pad, plus higher-level pieces built from it (a dark glass card
|
|
4
4
|
* with a content slot, an action card, the full A/B/Y/Z move diamond, an NPC dialogue card, a player
|
|
5
|
-
* choice menu, a labeled diamond, and a generic rarity card). Games use it to show "which button to
|
|
5
|
+
* choice menu, a labeled diamond, a solo labeled diamond, and a generic rarity card). Games use it to show "which button to
|
|
6
6
|
* press" in one consistent visual language across the library.
|
|
7
7
|
*
|
|
8
8
|
* Self-contained, like `@rydr/game-sdk/three`'s perf-overlay: it injects its own scoped `.rydr-ui-*`
|
|
@@ -29,6 +29,7 @@ export * from "./dialogue-card.js";
|
|
|
29
29
|
export * from "./subtitle.js";
|
|
30
30
|
export * from "./choice-card.js";
|
|
31
31
|
export * from "./labeled-diamond.js";
|
|
32
|
+
export * from "./solo-labeled-diamond.js";
|
|
32
33
|
export * from "./rarity-card.js";
|
|
33
34
|
export * from "./power-race.js";
|
|
34
35
|
//# sourceMappingURL=index.js.map
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,aAAa,CAAC;AAC5B,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,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,aAAa,CAAC;AAC5B,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,iBAAiB,CAAC"}
|
package/dist/ui/power-race.d.ts
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
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
30
|
*/
|
|
31
|
-
/** Layout of the two bars.
|
|
32
|
-
export type PowerRaceVariant = "twin-stacked" | "twin-towers"
|
|
31
|
+
/** Layout of the two bars. Both drive the same class hooks. */
|
|
32
|
+
export type PowerRaceVariant = "twin-stacked" | "twin-towers";
|
|
33
33
|
/** Where the live precision % sits (or `null` to hide it). */
|
|
34
34
|
export type PowerRaceScoreVariant = "tip" | "impact" | "above" | "infill";
|
|
35
35
|
/** The internal phase machine; `won`/`lost` are the resolved outcomes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"power-race.d.ts","sourceRoot":"","sources":["../../src/ui/power-race.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH
|
|
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
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* VFX (a glow, a light) off `getProgress().charge`.
|
|
30
30
|
*/
|
|
31
31
|
const STYLE_ID = "rydr-power-race-styles";
|
|
32
|
-
const VARIANTS = ["twin-stacked", "twin-towers"
|
|
32
|
+
const VARIANTS = ["twin-stacked", "twin-towers"];
|
|
33
33
|
const SCORE_VARIANTS = ["tip", "impact", "above", "infill"];
|
|
34
34
|
/** Grade tiers by precision %, highest first — drives the % colour. A fixed semantic palette, not themed. */
|
|
35
35
|
const GRADES = [
|
|
@@ -151,7 +151,6 @@ export function createPowerRace(opts = {}) {
|
|
|
151
151
|
const gap = deadlineProgress - chargeProgress;
|
|
152
152
|
const stage = stageFromGap(gap);
|
|
153
153
|
setStage(stage);
|
|
154
|
-
root.classList.toggle("behind", stage !== "idle");
|
|
155
154
|
}
|
|
156
155
|
if (phase !== "won" && phase !== "lost") {
|
|
157
156
|
// race: precision = how close to the wire; charge: how full the bar is.
|
|
@@ -175,7 +174,7 @@ export function createPowerRace(opts = {}) {
|
|
|
175
174
|
}
|
|
176
175
|
function applyOutcome(outcome) {
|
|
177
176
|
phase = outcome;
|
|
178
|
-
root.classList.remove("racing", "won", "lost"
|
|
177
|
+
root.classList.remove("racing", "won", "lost");
|
|
179
178
|
root.classList.add(outcome);
|
|
180
179
|
if (outcome === "won")
|
|
181
180
|
paintScore(mode === "charge" ? 100 : Math.min(1, elapsedS / durationS) * 100, "hit");
|
|
@@ -213,7 +212,7 @@ export function createPowerRace(opts = {}) {
|
|
|
213
212
|
elapsedS = 0;
|
|
214
213
|
accumulatedJoules = 0;
|
|
215
214
|
lastPowerW = 0;
|
|
216
|
-
root.classList.remove("racing", "won", "lost", "
|
|
215
|
+
root.classList.remove("racing", "won", "lost", "stamp-revealed", "bars-open");
|
|
217
216
|
root.classList.add("show");
|
|
218
217
|
setPrimingClass("warning");
|
|
219
218
|
headingEl.textContent = text.heading;
|
|
@@ -308,7 +307,7 @@ export function createPowerRace(opts = {}) {
|
|
|
308
307
|
elapsedS = 0;
|
|
309
308
|
accumulatedJoules = 0;
|
|
310
309
|
lastPowerW = 0;
|
|
311
|
-
root.classList.remove("show", "racing", "won", "lost", "
|
|
310
|
+
root.classList.remove("show", "racing", "won", "lost", "stamp-revealed", "bars-open");
|
|
312
311
|
setPrimingClass(null);
|
|
313
312
|
setStage("idle");
|
|
314
313
|
paint();
|
|
@@ -324,7 +323,7 @@ export function createPowerRace(opts = {}) {
|
|
|
324
323
|
},
|
|
325
324
|
};
|
|
326
325
|
}
|
|
327
|
-
/** Variant DOM.
|
|
326
|
+
/** Variant DOM. Both expose the same class hooks the factory drives. */
|
|
328
327
|
function innerForVariant(variant) {
|
|
329
328
|
if (variant === "twin-towers") {
|
|
330
329
|
return `
|
|
@@ -348,19 +347,6 @@ function innerForVariant(variant) {
|
|
|
348
347
|
<div class="rpr-prompt">PUSH TO INTERCEPT</div>
|
|
349
348
|
<div class="rpr-stamp"></div>`;
|
|
350
349
|
}
|
|
351
|
-
if (variant === "single-track") {
|
|
352
|
-
return `
|
|
353
|
-
<div class="rpr-heading">INCOMING MISSILE</div>
|
|
354
|
-
<div class="rpr-race">
|
|
355
|
-
<div class="rpr-race-rail rpr-charge-bar">
|
|
356
|
-
<div class="rpr-rail-finish"></div>
|
|
357
|
-
<div class="rpr-deadline-chip rpr-deadline-fill"><span>NUKE</span></div>
|
|
358
|
-
<div class="rpr-charge-chip rpr-charge-fill"><span>INTERCEPTOR</span></div>
|
|
359
|
-
</div>
|
|
360
|
-
</div>
|
|
361
|
-
<div class="rpr-prompt">PUSH TO INTERCEPT</div>
|
|
362
|
-
<div class="rpr-stamp"></div>`;
|
|
363
|
-
}
|
|
364
350
|
// 'twin-stacked' default.
|
|
365
351
|
return `
|
|
366
352
|
<div class="rpr-heading">INCOMING MISSILE</div>
|
|
@@ -571,50 +557,6 @@ const CSS = `
|
|
|
571
557
|
background: linear-gradient(0deg, var(--rpr-win-deep) 0%, var(--rpr-win) 100%);
|
|
572
558
|
box-shadow: 0 0 30px var(--rpr-win), inset 0 0 16px rgba(220,255,200,0.4);
|
|
573
559
|
}
|
|
574
|
-
.rpr.v-single-track.bars-open .rpr-heading { top: calc(50% - 44px); }
|
|
575
|
-
.rpr.v-single-track.bars-open .rpr-prompt { top: calc(50% + 44px); }
|
|
576
|
-
.rpr.v-single-track .rpr-race {
|
|
577
|
-
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
|
|
578
|
-
width: 60vw; max-width: 980px; min-width: 520px;
|
|
579
|
-
}
|
|
580
|
-
.rpr.v-single-track .rpr-race-rail {
|
|
581
|
-
position: relative; height: 64px;
|
|
582
|
-
background: linear-gradient(180deg, #0c0c12 0%, #14141a 100%);
|
|
583
|
-
border: 1px solid #2a2a32; border-radius: 32px; overflow: hidden;
|
|
584
|
-
box-shadow: inset 0 1px 0 rgba(255,255,255,0.05), inset 0 -1px 0 rgba(0,0,0,0.45);
|
|
585
|
-
}
|
|
586
|
-
.rpr.v-single-track .rpr-rail-finish {
|
|
587
|
-
position: absolute; right: 0; top: 0; bottom: 0; width: 8px;
|
|
588
|
-
background: repeating-linear-gradient(0deg, #fff 0 8px, #111 8px 16px);
|
|
589
|
-
box-shadow: 0 0 14px rgba(255,255,255,0.6);
|
|
590
|
-
}
|
|
591
|
-
.rpr.v-single-track .rpr-deadline-chip,
|
|
592
|
-
.rpr.v-single-track .rpr-charge-chip {
|
|
593
|
-
position: absolute; top: 6px; bottom: 6px;
|
|
594
|
-
width: 14%;
|
|
595
|
-
border-radius: 24px;
|
|
596
|
-
display: flex; align-items: center; justify-content: center;
|
|
597
|
-
font-weight: 700; font-size: 14px; letter-spacing: 3px; color: #fff;
|
|
598
|
-
text-transform: uppercase; text-shadow: 0 0 6px #000;
|
|
599
|
-
transition: left 0.10s linear;
|
|
600
|
-
}
|
|
601
|
-
.rpr.v-single-track .rpr-deadline-chip {
|
|
602
|
-
left: calc(var(--deadline) * (100% - 14%));
|
|
603
|
-
background: linear-gradient(180deg, var(--rpr-deadline) 0%, var(--rpr-deadline-deep) 100%);
|
|
604
|
-
box-shadow: 0 0 18px color-mix(in srgb, var(--rpr-deadline) 65%, transparent), inset 0 0 12px rgba(255,200,200,0.25);
|
|
605
|
-
}
|
|
606
|
-
.rpr.v-single-track .rpr-charge-chip {
|
|
607
|
-
left: calc(var(--charge) * (100% - 14%));
|
|
608
|
-
background: linear-gradient(180deg, var(--rpr-charge) 0%, var(--rpr-charge-deep) 100%);
|
|
609
|
-
box-shadow: 0 0 18px color-mix(in srgb, var(--rpr-charge) 60%, transparent), inset 0 0 12px rgba(180,240,255,0.25);
|
|
610
|
-
}
|
|
611
|
-
.rpr.v-single-track.won .rpr-charge-chip {
|
|
612
|
-
background: linear-gradient(180deg, var(--rpr-win) 0%, var(--rpr-win-deep) 100%);
|
|
613
|
-
box-shadow: 0 0 30px var(--rpr-win), inset 0 0 16px rgba(220,255,200,0.4);
|
|
614
|
-
}
|
|
615
|
-
.rpr.v-single-track.behind .rpr-race-rail {
|
|
616
|
-
background: linear-gradient(180deg, #2a0e0e 0%, #14141a 100%);
|
|
617
|
-
}
|
|
618
560
|
.rpr-heading { top: calc(50% - 5px); }
|
|
619
561
|
.rpr-prompt { top: calc(50% + 5px); }
|
|
620
562
|
.rpr-heading,
|
|
@@ -624,23 +566,18 @@ const CSS = `
|
|
|
624
566
|
}
|
|
625
567
|
.rpr.priming-warning .rpr-prompt { opacity: 0; pointer-events: none; }
|
|
626
568
|
.rpr .rpr-stack,
|
|
627
|
-
.rpr .rpr-towers
|
|
628
|
-
.rpr .rpr-race {
|
|
569
|
+
.rpr .rpr-towers {
|
|
629
570
|
opacity: 0;
|
|
630
571
|
transition: opacity 0.4s ease;
|
|
631
572
|
}
|
|
632
573
|
.rpr.priming-bars .rpr-stack,
|
|
633
574
|
.rpr.priming-bars .rpr-towers,
|
|
634
|
-
.rpr.priming-bars .rpr-race,
|
|
635
575
|
.rpr.racing .rpr-stack,
|
|
636
576
|
.rpr.racing .rpr-towers,
|
|
637
|
-
.rpr.racing .rpr-race,
|
|
638
577
|
.rpr.won .rpr-stack,
|
|
639
578
|
.rpr.won .rpr-towers,
|
|
640
|
-
.rpr.won .rpr-race,
|
|
641
579
|
.rpr.lost .rpr-stack,
|
|
642
|
-
.rpr.lost .rpr-towers
|
|
643
|
-
.rpr.lost .rpr-race {
|
|
580
|
+
.rpr.lost .rpr-towers {
|
|
644
581
|
opacity: 1;
|
|
645
582
|
}
|
|
646
583
|
.rpr.priming-warning::after,
|
|
@@ -716,8 +653,7 @@ const CSS = `
|
|
|
716
653
|
}
|
|
717
654
|
/* charge mode — no rival: hide the deadline bar and calm the alarm framing. The single charge bar
|
|
718
655
|
stays centred by the flex/align layout it already lives in; only the effort bar remains. */
|
|
719
|
-
.rpr.mode-charge .rpr-deadline-bar
|
|
720
|
-
.rpr.mode-charge .rpr-deadline-chip { display: none; }
|
|
656
|
+
.rpr.mode-charge .rpr-deadline-bar { display: none; }
|
|
721
657
|
.rpr.mode-charge.priming-warning::after,
|
|
722
658
|
.rpr.mode-charge.priming-prompt::after,
|
|
723
659
|
.rpr.mode-charge.priming-bars::after { display: none; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"power-race.js","sourceRoot":"","sources":["../../src/ui/power-race.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"power-race.js","sourceRoot":"","sources":["../../src/ui/power-race.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/showcase/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/showcase/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyBH,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7E,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAoBpD,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAiV3F"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* components never pulls the catalog into its bundle. Pass a real `session` for live watts + real
|
|
13
13
|
* button reflection; omit it and the catalog renders static.
|
|
14
14
|
*/
|
|
15
|
-
import { createKeycap, createDpadKeycap, mountCard, mountActionCard, mountActionDiamond, mountDialogueCard, mountChoiceCard, mountLabeledDiamond, mountRarityCard, createPowerRace, RARITY, } from "../index.js";
|
|
15
|
+
import { createKeycap, createDpadKeycap, mountCard, mountActionCard, mountActionDiamond, mountDialogueCard, mountChoiceCard, mountLabeledDiamond, mountSoloLabeledDiamond, mountRarityCard, createPowerRace, RARITY, } from "../index.js";
|
|
16
16
|
import { Gallery, el, makeCanvas } from "./gallery.js";
|
|
17
17
|
const FACES = ["A", "B", "Y", "Z"];
|
|
18
18
|
const DIRS = ["UP", "RIGHT", "DOWN", "LEFT"];
|
|
@@ -232,6 +232,47 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
232
232
|
btn.addEventListener("click", () => { disabled = !disabled; sync(); });
|
|
233
233
|
sync();
|
|
234
234
|
}
|
|
235
|
+
// --- the solo labeled diamond ------------------------------------------
|
|
236
|
+
g.section("Labeled diamond — solo (one active)", "The labeled diamond's radiating card label, but with exactly ONE active button at a time — a big lit pip, the other three the small blank grey circles of the A/B/Y/Z diamond. Colour and mono. Press ‘Next’ to move the active button (setActive).");
|
|
237
|
+
{
|
|
238
|
+
const grid = el(g.list, "div", "bs-grid");
|
|
239
|
+
const LABELS = { Y: "Inspect", A: "Equip", B: "Inventory", Z: "Back" };
|
|
240
|
+
const order = ["A", "Y", "B", "Z"];
|
|
241
|
+
for (const colored of [true, false]) {
|
|
242
|
+
const cellWrap = el(grid, "div", "bs-cell ld-cell");
|
|
243
|
+
const stage = el(cellWrap, "div", "bs-ld");
|
|
244
|
+
const sld = mountSoloLabeledDiamond(stage, { inline: true, colored, animate: false, active: "A", label: LABELS.A });
|
|
245
|
+
let i = 0;
|
|
246
|
+
const btn = el(cellWrap, "button", "bs-btn");
|
|
247
|
+
btn.textContent = "Next button";
|
|
248
|
+
btn.addEventListener("click", () => {
|
|
249
|
+
i = (i + 1) % order.length;
|
|
250
|
+
const b = order[i];
|
|
251
|
+
sld.setActive(b, LABELS[b] ?? "");
|
|
252
|
+
});
|
|
253
|
+
el(cellWrap, "div", "bs-cap", colored ? "Colour" : "Mono");
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// --- solo labeled diamond: label placement -----------------------------
|
|
257
|
+
g.section("Solo diamond — label placement", "The label side is set with labelPos (default ‘auto’ = the active button's side), independent of which button is active. Change the active button AND the label side separately: the tuck adapts to the pip under the label — deeper for a small grey circle, shallower for the big active pip — so the letter is never covered.");
|
|
258
|
+
{
|
|
259
|
+
const grid = el(g.list, "div", "bs-grid");
|
|
260
|
+
const sides = ["top", "right", "bottom", "left"];
|
|
261
|
+
for (const colored of [true, false]) {
|
|
262
|
+
const cellWrap = el(grid, "div", "bs-cell ld-cell");
|
|
263
|
+
const stage = el(cellWrap, "div", "bs-ld");
|
|
264
|
+
const sld = mountSoloLabeledDiamond(stage, { inline: true, colored, animate: false, active: "A", label: "Equip", labelPos: "right" });
|
|
265
|
+
let si = 1; // start on "right"
|
|
266
|
+
const sideBtn = el(cellWrap, "button", "bs-btn");
|
|
267
|
+
sideBtn.addEventListener("click", () => { si = (si + 1) % sides.length; sld.setLabelPos(sides[si]); sideBtn.textContent = `Side: ${sides[si]} → next`; });
|
|
268
|
+
sideBtn.textContent = `Side: ${sides[si]} → next`;
|
|
269
|
+
let ai = 0;
|
|
270
|
+
const actBtn = el(cellWrap, "button", "bs-btn");
|
|
271
|
+
actBtn.addEventListener("click", () => { ai = (ai + 1) % FACES.length; sld.setActive(FACES[ai]); actBtn.textContent = `Active: ${FACES[ai]} → next`; });
|
|
272
|
+
actBtn.textContent = `Active: ${FACES[ai]} → next`;
|
|
273
|
+
el(cellWrap, "div", "bs-cap", colored ? "Colour" : "Mono");
|
|
274
|
+
}
|
|
275
|
+
}
|
|
235
276
|
// --- the rarity card ---------------------------------------------------
|
|
236
277
|
g.section("Rarity card", "A generic rarity-tinted frame + a content slot the game fills (here a name + a stat line). The SDK ships the rarity palette and the label band; .selected adds the ring + deeper glow. ◄ / ► move the selection (pass a session).");
|
|
237
278
|
{
|
|
@@ -275,7 +316,6 @@ export function mountUiShowcase(host, opts = {}) {
|
|
|
275
316
|
};
|
|
276
317
|
mk("Twin stacked", { variant: "twin-stacked", scoreVariant: "impact" });
|
|
277
318
|
mk("Twin towers", { variant: "twin-towers" });
|
|
278
|
-
mk("Single track", { variant: "single-track" });
|
|
279
319
|
mk("Charge (no rival)", {
|
|
280
320
|
mode: "charge",
|
|
281
321
|
text: { heading: "CHARGING", prompt: "PUSH TO CHARGE", chargeLabel: "CHARGE", win: "CHARGED" },
|