@indiegems/gem-web-sdk 13.4.2 → 14.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/CHANGELOG.md +19 -0
- package/dist/game.d.ts +66 -1
- package/dist/gem-web-sdk.bridge.js +2 -2
- package/dist/gem-web-sdk.esm.js +3 -3
- package/dist/gem-web-sdk.function.js +3 -3
- package/dist/gem-web-sdk.game.js +3 -3
- package/dist/gem-web-sdk.min.js +3 -3
- package/dist/gem-web-sdk.sdk.js +3 -3
- package/dist/gem-web-sdk.server.js +2 -2
- package/dist/index.d.ts +38 -4
- package/dist/sdk.d.ts +66 -1
- package/docs/api/api-reference-function.md +1 -1
- package/docs/api/api-reference-game.md +530 -12
- package/docs/api/api-reference-server.md +1 -1
- package/docs/api/reference.json +683 -2
- package/docs/changelog.md +19 -0
- package/docs/getting-started.md +9 -15
- package/docs/manifest.json +8 -8
- package/docs/server-bundles.md +2 -2
- package/docs/what-a-game-must-do.md +122 -27
- package/package.json +1 -1
- package/schema/bridge.v1.json +201 -2
- package/schema/capabilities.public.json +7 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# The browser surface — API reference
|
|
2
2
|
|
|
3
|
-
Generated from `@indiegems/gem-web-sdk/sdk`
|
|
3
|
+
Generated from `@indiegems/gem-web-sdk/sdk` v14.0.0, the version of the package this file ships in. Every symbol below carries an explicit anchor, its `anchor` in `reference.json` beside this file.
|
|
4
4
|
|
|
5
5
|
`@indiegems/gem-web-sdk/sdk` is the one import a game writes, wherever its code runs. `@indiegems/gem-web-sdk/game` exports exactly the symbols on this page and nothing else, for a build that wants only this half.
|
|
6
6
|
|
|
@@ -5854,6 +5854,30 @@ connected, and only to an arcade that draws a menu.
|
|
|
5854
5854
|
**Returns.** whether the message left the frame — `false` before the bridge is
|
|
5855
5855
|
up, for an arcade with no menu, and past this frame's own limit.
|
|
5856
5856
|
|
|
5857
|
+
<a id="gemframe-declaresettings"></a>
|
|
5858
|
+
|
|
5859
|
+
## GemFrame.declareSettings
|
|
5860
|
+
|
|
5861
|
+
```ts
|
|
5862
|
+
declareSettings(settings: { id: string; label: string; kind: "toggle" | "slider" | "choice"; value: string | number | boolean; quick?: boolean; icon?: string; min?: number; max?: number; step?: number; options?: { id: string; label: string }[] }[]): boolean
|
|
5863
|
+
```
|
|
5864
|
+
|
|
5865
|
+
Mirror up to eight of your game's own settings into the arcade's menu —
|
|
5866
|
+
the whole list each time, the latest one winning.
|
|
5867
|
+
|
|
5868
|
+
Prefer `gem.settings.declare`, which checks each entry, holds the list
|
|
5869
|
+
across a reconnect and calls your handlers when the player changes one.
|
|
5870
|
+
This one sends only while connected, and only to an arcade that draws game
|
|
5871
|
+
settings.
|
|
5872
|
+
|
|
5873
|
+
| Parameter | Type |
|
|
5874
|
+
| --- | --- |
|
|
5875
|
+
| `settings` | `{ id: string; label: string; kind: "toggle" \| "slider" \| "choice"; value: string \| number \| boolean; quick?: boolean; icon?: string; min?: number; max?: number; step?: number; options?: { id: string; label: string }[] }[]` |
|
|
5876
|
+
|
|
5877
|
+
**Returns.** whether the message left the frame — `false` before the bridge is
|
|
5878
|
+
up, for an arcade that draws no game settings, for a list the schema
|
|
5879
|
+
refuses, and past this frame's own limit.
|
|
5880
|
+
|
|
5857
5881
|
<a id="gemframe-setgemcorner"></a>
|
|
5858
5882
|
|
|
5859
5883
|
## GemFrame.setGemCorner
|
|
@@ -7222,6 +7246,470 @@ const { accepted, why } = result.json();
|
|
|
7222
7246
|
own `Err`. `TransportRefusal` for an input that is neither bytes nor
|
|
7223
7247
|
JSON, before anything is sent. `AuthError` if the token cannot be renewed.
|
|
7224
7248
|
|
|
7249
|
+
<a id="gemgamesettingicon"></a>
|
|
7250
|
+
|
|
7251
|
+
## GemGameSettingIcon
|
|
7252
|
+
|
|
7253
|
+
```ts
|
|
7254
|
+
type GemGameSettingIcon = "music" | "sfx" | "voice" | "eye" | "text" | "hint" | "speed" | "bright" | "controls" | "star"
|
|
7255
|
+
```
|
|
7256
|
+
|
|
7257
|
+
The icon codes a declared setting may carry — the Arcade draws the glyph. An
|
|
7258
|
+
icon is optional, and a setting without one gets the Arcade's generic glyph.
|
|
7259
|
+
|
|
7260
|
+
<a id="gemgamesettingvalue"></a>
|
|
7261
|
+
|
|
7262
|
+
## GemGameSettingValue
|
|
7263
|
+
|
|
7264
|
+
```ts
|
|
7265
|
+
type GemGameSettingValue = boolean | number | string
|
|
7266
|
+
```
|
|
7267
|
+
|
|
7268
|
+
The value of a declared setting: `boolean` for a toggle, `number` for a
|
|
7269
|
+
slider, and an option's `id` for a choice.
|
|
7270
|
+
|
|
7271
|
+
<a id="gemgamesettingbase"></a>
|
|
7272
|
+
|
|
7273
|
+
## GemGameSettingBase
|
|
7274
|
+
|
|
7275
|
+
```ts
|
|
7276
|
+
interface GemGameSettingBase
|
|
7277
|
+
```
|
|
7278
|
+
|
|
7279
|
+
What every declared setting has, whatever its kind.
|
|
7280
|
+
|
|
7281
|
+
<a id="gemgamesettingbase-id"></a>
|
|
7282
|
+
|
|
7283
|
+
## GemGameSettingBase.id
|
|
7284
|
+
|
|
7285
|
+
```ts
|
|
7286
|
+
readonly id: string
|
|
7287
|
+
```
|
|
7288
|
+
|
|
7289
|
+
Your own name for the setting — 1 to 40 of `A-Z a-z 0-9 _ -`, unique in
|
|
7290
|
+
one declaration. It is what [GemGameSettingChange.id](#gemgamesettingchange-id) carries back.
|
|
7291
|
+
|
|
7292
|
+
<a id="gemgamesettingbase-label"></a>
|
|
7293
|
+
|
|
7294
|
+
## GemGameSettingBase.label
|
|
7295
|
+
|
|
7296
|
+
```ts
|
|
7297
|
+
readonly label: string
|
|
7298
|
+
```
|
|
7299
|
+
|
|
7300
|
+
What the player reads, 1 to 40 characters, **already in the player's
|
|
7301
|
+
language** (`gem.prefs.locale`): the Arcade does not translate it. Cut at
|
|
7302
|
+
40 characters.
|
|
7303
|
+
|
|
7304
|
+
<a id="gemgamesettingbase-icon"></a>
|
|
7305
|
+
|
|
7306
|
+
## GemGameSettingBase.icon
|
|
7307
|
+
|
|
7308
|
+
```ts
|
|
7309
|
+
readonly icon?: GemGameSettingIcon
|
|
7310
|
+
```
|
|
7311
|
+
|
|
7312
|
+
One of the Arcade's icon codes; a code this SDK does not know is left out
|
|
7313
|
+
(with a warning) and the setting is kept with the generic glyph.
|
|
7314
|
+
|
|
7315
|
+
<a id="gemgametogglesetting"></a>
|
|
7316
|
+
|
|
7317
|
+
## GemGameToggleSetting
|
|
7318
|
+
|
|
7319
|
+
```ts
|
|
7320
|
+
interface GemGameToggleSetting
|
|
7321
|
+
```
|
|
7322
|
+
|
|
7323
|
+
An on/off setting — Music, Color help.
|
|
7324
|
+
|
|
7325
|
+
<a id="gemgametogglesetting-id"></a>
|
|
7326
|
+
|
|
7327
|
+
## GemGameToggleSetting.id
|
|
7328
|
+
|
|
7329
|
+
```ts
|
|
7330
|
+
readonly id: string
|
|
7331
|
+
```
|
|
7332
|
+
|
|
7333
|
+
Your own name for the setting — 1 to 40 of `A-Z a-z 0-9 _ -`, unique in
|
|
7334
|
+
one declaration. It is what [GemGameSettingChange.id](#gemgamesettingchange-id) carries back.
|
|
7335
|
+
|
|
7336
|
+
<a id="gemgametogglesetting-label"></a>
|
|
7337
|
+
|
|
7338
|
+
## GemGameToggleSetting.label
|
|
7339
|
+
|
|
7340
|
+
```ts
|
|
7341
|
+
readonly label: string
|
|
7342
|
+
```
|
|
7343
|
+
|
|
7344
|
+
What the player reads, 1 to 40 characters, **already in the player's
|
|
7345
|
+
language** (`gem.prefs.locale`): the Arcade does not translate it. Cut at
|
|
7346
|
+
40 characters.
|
|
7347
|
+
|
|
7348
|
+
<a id="gemgametogglesetting-icon"></a>
|
|
7349
|
+
|
|
7350
|
+
## GemGameToggleSetting.icon
|
|
7351
|
+
|
|
7352
|
+
```ts
|
|
7353
|
+
readonly icon?: GemGameSettingIcon
|
|
7354
|
+
```
|
|
7355
|
+
|
|
7356
|
+
One of the Arcade's icon codes; a code this SDK does not know is left out
|
|
7357
|
+
(with a warning) and the setting is kept with the generic glyph.
|
|
7358
|
+
|
|
7359
|
+
<a id="gemgametogglesetting-kind"></a>
|
|
7360
|
+
|
|
7361
|
+
## GemGameToggleSetting.kind
|
|
7362
|
+
|
|
7363
|
+
```ts
|
|
7364
|
+
readonly kind: "toggle"
|
|
7365
|
+
```
|
|
7366
|
+
|
|
7367
|
+
`'toggle'`: what kind of setting this is.
|
|
7368
|
+
|
|
7369
|
+
<a id="gemgametogglesetting-value"></a>
|
|
7370
|
+
|
|
7371
|
+
## GemGameToggleSetting.value
|
|
7372
|
+
|
|
7373
|
+
```ts
|
|
7374
|
+
readonly value: boolean
|
|
7375
|
+
```
|
|
7376
|
+
|
|
7377
|
+
Whether it is on now.
|
|
7378
|
+
|
|
7379
|
+
<a id="gemgametogglesetting-quick"></a>
|
|
7380
|
+
|
|
7381
|
+
## GemGameToggleSetting.quick
|
|
7382
|
+
|
|
7383
|
+
```ts
|
|
7384
|
+
readonly quick?: boolean
|
|
7385
|
+
```
|
|
7386
|
+
|
|
7387
|
+
Ask for this toggle in the menu's quick row, beside the Arcade's own Sound
|
|
7388
|
+
and Vibration. The first two toggles that ask get it; a third is shown only
|
|
7389
|
+
in the settings list.
|
|
7390
|
+
|
|
7391
|
+
<a id="gemgameslidersetting"></a>
|
|
7392
|
+
|
|
7393
|
+
## GemGameSliderSetting
|
|
7394
|
+
|
|
7395
|
+
```ts
|
|
7396
|
+
interface GemGameSliderSetting
|
|
7397
|
+
```
|
|
7398
|
+
|
|
7399
|
+
A number between two ends — Music volume, Game speed.
|
|
7400
|
+
|
|
7401
|
+
<a id="gemgameslidersetting-id"></a>
|
|
7402
|
+
|
|
7403
|
+
## GemGameSliderSetting.id
|
|
7404
|
+
|
|
7405
|
+
```ts
|
|
7406
|
+
readonly id: string
|
|
7407
|
+
```
|
|
7408
|
+
|
|
7409
|
+
Your own name for the setting — 1 to 40 of `A-Z a-z 0-9 _ -`, unique in
|
|
7410
|
+
one declaration. It is what [GemGameSettingChange.id](#gemgamesettingchange-id) carries back.
|
|
7411
|
+
|
|
7412
|
+
<a id="gemgameslidersetting-label"></a>
|
|
7413
|
+
|
|
7414
|
+
## GemGameSliderSetting.label
|
|
7415
|
+
|
|
7416
|
+
```ts
|
|
7417
|
+
readonly label: string
|
|
7418
|
+
```
|
|
7419
|
+
|
|
7420
|
+
What the player reads, 1 to 40 characters, **already in the player's
|
|
7421
|
+
language** (`gem.prefs.locale`): the Arcade does not translate it. Cut at
|
|
7422
|
+
40 characters.
|
|
7423
|
+
|
|
7424
|
+
<a id="gemgameslidersetting-icon"></a>
|
|
7425
|
+
|
|
7426
|
+
## GemGameSliderSetting.icon
|
|
7427
|
+
|
|
7428
|
+
```ts
|
|
7429
|
+
readonly icon?: GemGameSettingIcon
|
|
7430
|
+
```
|
|
7431
|
+
|
|
7432
|
+
One of the Arcade's icon codes; a code this SDK does not know is left out
|
|
7433
|
+
(with a warning) and the setting is kept with the generic glyph.
|
|
7434
|
+
|
|
7435
|
+
<a id="gemgameslidersetting-kind"></a>
|
|
7436
|
+
|
|
7437
|
+
## GemGameSliderSetting.kind
|
|
7438
|
+
|
|
7439
|
+
```ts
|
|
7440
|
+
readonly kind: "slider"
|
|
7441
|
+
```
|
|
7442
|
+
|
|
7443
|
+
`'slider'`: what kind of setting this is.
|
|
7444
|
+
|
|
7445
|
+
<a id="gemgameslidersetting-value"></a>
|
|
7446
|
+
|
|
7447
|
+
## GemGameSliderSetting.value
|
|
7448
|
+
|
|
7449
|
+
```ts
|
|
7450
|
+
readonly value: number
|
|
7451
|
+
```
|
|
7452
|
+
|
|
7453
|
+
The number now. Clamped into `[min, max]` and snapped onto `step` before it
|
|
7454
|
+
is sent.
|
|
7455
|
+
|
|
7456
|
+
<a id="gemgameslidersetting-min"></a>
|
|
7457
|
+
|
|
7458
|
+
## GemGameSliderSetting.min
|
|
7459
|
+
|
|
7460
|
+
```ts
|
|
7461
|
+
readonly min?: number
|
|
7462
|
+
```
|
|
7463
|
+
|
|
7464
|
+
The lowest value, `0` when left out. Within ±1 000 000, below `max`.
|
|
7465
|
+
|
|
7466
|
+
<a id="gemgameslidersetting-max"></a>
|
|
7467
|
+
|
|
7468
|
+
## GemGameSliderSetting.max
|
|
7469
|
+
|
|
7470
|
+
```ts
|
|
7471
|
+
readonly max?: number
|
|
7472
|
+
```
|
|
7473
|
+
|
|
7474
|
+
The highest value, `100` when left out. Within ±1 000 000, above `min`.
|
|
7475
|
+
|
|
7476
|
+
<a id="gemgameslidersetting-step"></a>
|
|
7477
|
+
|
|
7478
|
+
## GemGameSliderSetting.step
|
|
7479
|
+
|
|
7480
|
+
```ts
|
|
7481
|
+
readonly step?: number
|
|
7482
|
+
```
|
|
7483
|
+
|
|
7484
|
+
The increment from `min`, `1` when left out. Greater than `0`.
|
|
7485
|
+
|
|
7486
|
+
<a id="gemgamesettingoption"></a>
|
|
7487
|
+
|
|
7488
|
+
## GemGameSettingOption
|
|
7489
|
+
|
|
7490
|
+
```ts
|
|
7491
|
+
interface GemGameSettingOption
|
|
7492
|
+
```
|
|
7493
|
+
|
|
7494
|
+
One answer of a [GemGameChoiceSetting](#gemgamechoicesetting).
|
|
7495
|
+
|
|
7496
|
+
<a id="gemgamesettingoption-id"></a>
|
|
7497
|
+
|
|
7498
|
+
## GemGameSettingOption.id
|
|
7499
|
+
|
|
7500
|
+
```ts
|
|
7501
|
+
readonly id: string
|
|
7502
|
+
```
|
|
7503
|
+
|
|
7504
|
+
Your own name for the answer, 1 to 40 of `A-Z a-z 0-9 _ -`.
|
|
7505
|
+
|
|
7506
|
+
<a id="gemgamesettingoption-label"></a>
|
|
7507
|
+
|
|
7508
|
+
## GemGameSettingOption.label
|
|
7509
|
+
|
|
7510
|
+
```ts
|
|
7511
|
+
readonly label: string
|
|
7512
|
+
```
|
|
7513
|
+
|
|
7514
|
+
What the player reads, 1 to 40 characters, already translated.
|
|
7515
|
+
|
|
7516
|
+
<a id="gemgamechoicesetting"></a>
|
|
7517
|
+
|
|
7518
|
+
## GemGameChoiceSetting
|
|
7519
|
+
|
|
7520
|
+
```ts
|
|
7521
|
+
interface GemGameChoiceSetting
|
|
7522
|
+
```
|
|
7523
|
+
|
|
7524
|
+
One of two to four answers — Difficulty: Easy, Normal, Hard.
|
|
7525
|
+
|
|
7526
|
+
<a id="gemgamechoicesetting-id"></a>
|
|
7527
|
+
|
|
7528
|
+
## GemGameChoiceSetting.id
|
|
7529
|
+
|
|
7530
|
+
```ts
|
|
7531
|
+
readonly id: string
|
|
7532
|
+
```
|
|
7533
|
+
|
|
7534
|
+
Your own name for the setting — 1 to 40 of `A-Z a-z 0-9 _ -`, unique in
|
|
7535
|
+
one declaration. It is what [GemGameSettingChange.id](#gemgamesettingchange-id) carries back.
|
|
7536
|
+
|
|
7537
|
+
<a id="gemgamechoicesetting-label"></a>
|
|
7538
|
+
|
|
7539
|
+
## GemGameChoiceSetting.label
|
|
7540
|
+
|
|
7541
|
+
```ts
|
|
7542
|
+
readonly label: string
|
|
7543
|
+
```
|
|
7544
|
+
|
|
7545
|
+
What the player reads, 1 to 40 characters, **already in the player's
|
|
7546
|
+
language** (`gem.prefs.locale`): the Arcade does not translate it. Cut at
|
|
7547
|
+
40 characters.
|
|
7548
|
+
|
|
7549
|
+
<a id="gemgamechoicesetting-icon"></a>
|
|
7550
|
+
|
|
7551
|
+
## GemGameChoiceSetting.icon
|
|
7552
|
+
|
|
7553
|
+
```ts
|
|
7554
|
+
readonly icon?: GemGameSettingIcon
|
|
7555
|
+
```
|
|
7556
|
+
|
|
7557
|
+
One of the Arcade's icon codes; a code this SDK does not know is left out
|
|
7558
|
+
(with a warning) and the setting is kept with the generic glyph.
|
|
7559
|
+
|
|
7560
|
+
<a id="gemgamechoicesetting-kind"></a>
|
|
7561
|
+
|
|
7562
|
+
## GemGameChoiceSetting.kind
|
|
7563
|
+
|
|
7564
|
+
```ts
|
|
7565
|
+
readonly kind: "choice"
|
|
7566
|
+
```
|
|
7567
|
+
|
|
7568
|
+
`'choice'`: what kind of setting this is.
|
|
7569
|
+
|
|
7570
|
+
<a id="gemgamechoicesetting-value"></a>
|
|
7571
|
+
|
|
7572
|
+
## GemGameChoiceSetting.value
|
|
7573
|
+
|
|
7574
|
+
```ts
|
|
7575
|
+
readonly value: string
|
|
7576
|
+
```
|
|
7577
|
+
|
|
7578
|
+
The `id` of the option chosen now.
|
|
7579
|
+
|
|
7580
|
+
<a id="gemgamechoicesetting-options"></a>
|
|
7581
|
+
|
|
7582
|
+
## GemGameChoiceSetting.options
|
|
7583
|
+
|
|
7584
|
+
```ts
|
|
7585
|
+
readonly options: readonly GemGameSettingOption[]
|
|
7586
|
+
```
|
|
7587
|
+
|
|
7588
|
+
Two to four answers, ids unique. A fifth and later are left out.
|
|
7589
|
+
|
|
7590
|
+
<a id="gemgamesetting"></a>
|
|
7591
|
+
|
|
7592
|
+
## GemGameSetting
|
|
7593
|
+
|
|
7594
|
+
```ts
|
|
7595
|
+
type GemGameSetting = GemGameToggleSetting | GemGameSliderSetting | GemGameChoiceSetting
|
|
7596
|
+
```
|
|
7597
|
+
|
|
7598
|
+
One of your game's settings, as `gem.settings.declare` mirrors it into the
|
|
7599
|
+
Arcade's menu: a toggle, a slider or a choice.
|
|
7600
|
+
|
|
7601
|
+
<a id="gemgamesettingchange"></a>
|
|
7602
|
+
|
|
7603
|
+
## GemGameSettingChange
|
|
7604
|
+
|
|
7605
|
+
```ts
|
|
7606
|
+
interface GemGameSettingChange
|
|
7607
|
+
```
|
|
7608
|
+
|
|
7609
|
+
The player changed one of your declared settings in the Arcade's menu.
|
|
7610
|
+
|
|
7611
|
+
<a id="gemgamesettingchange-id"></a>
|
|
7612
|
+
|
|
7613
|
+
## GemGameSettingChange.id
|
|
7614
|
+
|
|
7615
|
+
```ts
|
|
7616
|
+
readonly id: string
|
|
7617
|
+
```
|
|
7618
|
+
|
|
7619
|
+
The setting's `id`, from your latest declaration.
|
|
7620
|
+
|
|
7621
|
+
<a id="gemgamesettingchange-value"></a>
|
|
7622
|
+
|
|
7623
|
+
## GemGameSettingChange.value
|
|
7624
|
+
|
|
7625
|
+
```ts
|
|
7626
|
+
readonly value: GemGameSettingValue
|
|
7627
|
+
```
|
|
7628
|
+
|
|
7629
|
+
The new value, of the setting's kind: a `boolean` for a toggle, a `number`
|
|
7630
|
+
inside a slider's range and on its step, an option's `id` for a choice.
|
|
7631
|
+
|
|
7632
|
+
<a id="gamesettingsapi"></a>
|
|
7633
|
+
|
|
7634
|
+
## GameSettingsApi
|
|
7635
|
+
|
|
7636
|
+
```ts
|
|
7637
|
+
interface GameSettingsApi
|
|
7638
|
+
```
|
|
7639
|
+
|
|
7640
|
+
`gem.settings` — mirror up to eight of your game's own settings into the
|
|
7641
|
+
Arcade's Gem menu. Your own settings button and screen stay: this is a
|
|
7642
|
+
second door to a few of the same settings, never the only one.
|
|
7643
|
+
|
|
7644
|
+
<a id="gamesettingsapi-declare"></a>
|
|
7645
|
+
|
|
7646
|
+
## GameSettingsApi.declare
|
|
7647
|
+
|
|
7648
|
+
```ts
|
|
7649
|
+
declare(settings: readonly GemGameSetting[]): boolean
|
|
7650
|
+
```
|
|
7651
|
+
|
|
7652
|
+
Show up to eight of your settings in the Arcade's menu, in this order — the
|
|
7653
|
+
whole list each time, the latest call winning. `declare([])` takes them
|
|
7654
|
+
all back out.
|
|
7655
|
+
|
|
7656
|
+
```js
|
|
7657
|
+
gem.settings.declare([
|
|
7658
|
+
{ id: 'music', label: t('Music'), kind: 'toggle', value: music.on, quick: true, icon: 'music' },
|
|
7659
|
+
{ id: 'speed', label: t('Game speed'), kind: 'slider', value: speed, min: 0.5, max: 2, step: 0.25 },
|
|
7660
|
+
]);
|
|
7661
|
+
```
|
|
7662
|
+
|
|
7663
|
+
**Keep your own settings button and screen** — top-right, on every screen.
|
|
7664
|
+
This mirrors a few of those settings; it never replaces them, and an
|
|
7665
|
+
embedder that draws no game settings shows none of it.
|
|
7666
|
+
|
|
7667
|
+
**Declare again whenever your own screen changes a value**, so the menu
|
|
7668
|
+
never shows a stale one. Mark at most two toggles `quick` (good ones:
|
|
7669
|
+
Music, Sound effects, Color help). **Never declare the Arcade's own
|
|
7670
|
+
settings** — master volume or mute, vibration, graphics quality, controls:
|
|
7671
|
+
the Arcade already has them and they reach you as `gem.prefs`.
|
|
7672
|
+
|
|
7673
|
+
An entry that breaks a rule is left out, with a warning through your
|
|
7674
|
+
`log`; nothing throws.
|
|
7675
|
+
|
|
7676
|
+
| Parameter | Type | Description |
|
|
7677
|
+
| --- | --- | --- |
|
|
7678
|
+
| `settings` | `readonly GemGameSetting[]` | Up to eight settings, in the order to show them. |
|
|
7679
|
+
|
|
7680
|
+
**Returns.** `true` when the Arcade has been told, or will be within half a
|
|
7681
|
+
second; `false` before the bridge is up (the list is held and sent when
|
|
7682
|
+
it connects), under an embedder that draws no game settings, and for an
|
|
7683
|
+
argument that is not an array.
|
|
7684
|
+
|
|
7685
|
+
<a id="gamesettingsapi-onchange"></a>
|
|
7686
|
+
|
|
7687
|
+
## GameSettingsApi.onChange
|
|
7688
|
+
|
|
7689
|
+
```ts
|
|
7690
|
+
onChange(handler: (change: GemGameSettingChange) => void): () => void
|
|
7691
|
+
```
|
|
7692
|
+
|
|
7693
|
+
Called when the player changes one of your declared settings in the
|
|
7694
|
+
Arcade's menu. Apply it at once, **even while paused** — the menu holds
|
|
7695
|
+
the pause, and the player should hear the music stop while it is open —
|
|
7696
|
+
and keep it where you keep that setting's other changes.
|
|
7697
|
+
|
|
7698
|
+
```js
|
|
7699
|
+
gem.settings.onChange(({ id, value }) => {
|
|
7700
|
+
if (id === 'music') setMusic(value === true);
|
|
7701
|
+
});
|
|
7702
|
+
```
|
|
7703
|
+
|
|
7704
|
+
The SDK has already written the new value into your declaration, so there
|
|
7705
|
+
is no need to declare again for this change.
|
|
7706
|
+
|
|
7707
|
+
| Parameter | Type |
|
|
7708
|
+
| --- | --- |
|
|
7709
|
+
| `handler` | `(change: GemGameSettingChange) => void` |
|
|
7710
|
+
|
|
7711
|
+
**Returns.** A function that removes the handler.
|
|
7712
|
+
|
|
7225
7713
|
<a id="arcade_embedders"></a>
|
|
7226
7714
|
|
|
7227
7715
|
## ARCADE_EMBEDDERS
|
|
@@ -7761,21 +8249,22 @@ readonly onScreenshot?: (request: { maxWidth: number; maxHeight: number }) => Pr
|
|
|
7761
8249
|
Supply the screenshot yourself, instead of letting the SDK find it.
|
|
7762
8250
|
|
|
7763
8251
|
**You do not need this to get screenshots.** By default the SDK captures
|
|
7764
|
-
your largest visible canvas, which is right for almost every game
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
picture. That is a one-line change and NOT a reason to reach for this
|
|
7770
|
-
option.
|
|
8252
|
+
your largest visible canvas, which is right for almost every game: 2D,
|
|
8253
|
+
WebGL or WebGPU, and WITHOUT `preserveDrawingBuffer`, which you should leave
|
|
8254
|
+
off. The SDK reads the canvas right after a frame you draw, or keeps the
|
|
8255
|
+
last one you drew before your loop stopped. That needs `createGem` called
|
|
8256
|
+
before your renderer is made, and drawing inside `requestAnimationFrame`.
|
|
7771
8257
|
|
|
7772
8258
|
Reach for it when the default genuinely cannot work, or when you want a say
|
|
7773
8259
|
per moment:
|
|
7774
8260
|
|
|
7775
|
-
- your canvas is an `OffscreenCanvas` driven from a worker
|
|
7776
|
-
|
|
7777
|
-
|
|
7778
|
-
|
|
8261
|
+
- your canvas is an `OffscreenCanvas` driven from a worker. Nothing on the
|
|
8262
|
+
page can read it, no flag changes that, and the platform reports
|
|
8263
|
+
`unreadable` rather than `unsupported` precisely so you do not go looking
|
|
8264
|
+
for a flag;
|
|
8265
|
+
- you draw outside `requestAnimationFrame`, so there is no moment the SDK
|
|
8266
|
+
can read your canvas in: render, then `createImageBitmap(canvas)`, in the
|
|
8267
|
+
same task;
|
|
7779
8268
|
- you draw across several layered canvases and want them composited;
|
|
7780
8269
|
- you want to decline while something specific is on screen.
|
|
7781
8270
|
|
|
@@ -9297,6 +9786,35 @@ camera.pitch += t.pitch;
|
|
|
9297
9786
|
|
|
9298
9787
|
See the guide's "Camera and look controls" section.
|
|
9299
9788
|
|
|
9789
|
+
<a id="gem-settings"></a>
|
|
9790
|
+
|
|
9791
|
+
## Gem.settings
|
|
9792
|
+
|
|
9793
|
+
```ts
|
|
9794
|
+
readonly settings: GameSettingsApi
|
|
9795
|
+
```
|
|
9796
|
+
|
|
9797
|
+
Mirror up to eight of your game's own settings — Music, Color help, Game
|
|
9798
|
+
speed — into the Arcade's Gem menu, and hear when the player changes one
|
|
9799
|
+
there. Up to two toggles can sit in the menu's quick row.
|
|
9800
|
+
|
|
9801
|
+
```js
|
|
9802
|
+
gem.settings.declare([
|
|
9803
|
+
{ id: 'music', label: t('Music'), kind: 'toggle', value: music.on, quick: true, icon: 'music' },
|
|
9804
|
+
]);
|
|
9805
|
+
gem.settings.onChange(({ id, value }) => {
|
|
9806
|
+
if (id === 'music') setMusic(value === true); // even while paused
|
|
9807
|
+
});
|
|
9808
|
+
```
|
|
9809
|
+
|
|
9810
|
+
**A mirror, never a replacement: your game still draws its own settings
|
|
9811
|
+
button and screen**, and every setting you declare is on that screen too.
|
|
9812
|
+
Declare again whenever your screen changes a value. Never declare the
|
|
9813
|
+
Arcade's own settings — master volume or mute, vibration, graphics,
|
|
9814
|
+
controls; they reach you as `gem.prefs`.
|
|
9815
|
+
|
|
9816
|
+
See the guide's "Game settings" section.
|
|
9817
|
+
|
|
9300
9818
|
<a id="gem-analytics"></a>
|
|
9301
9819
|
|
|
9302
9820
|
## Gem.analytics
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# The server surface — API reference
|
|
2
2
|
|
|
3
|
-
Generated from `@indiegems/gem-web-sdk/sdk`
|
|
3
|
+
Generated from `@indiegems/gem-web-sdk/sdk` v14.0.0, the version of the package this file ships in. Every symbol below carries an explicit anchor, its `anchor` in `reference.json` beside this file.
|
|
4
4
|
|
|
5
5
|
`@indiegems/gem-web-sdk/sdk` is the one import a game writes, wherever its code runs. `@indiegems/gem-web-sdk/server` exports exactly the symbols on this page and nothing else, for a build that wants only this half.
|
|
6
6
|
|