@vgai/engine 0.5.53 → 0.5.56
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/adapter/adapter-module.d.ts +12 -1
- package/dist/adapter/adapter-module.d.ts.map +1 -1
- package/dist/adapter/adapter-module.js +6 -1
- package/dist/adapter/audio-meter.d.ts +14 -0
- package/dist/adapter/audio-meter.d.ts.map +1 -0
- package/dist/adapter/audio-meter.js +20 -0
- package/dist/runtime/game.d.ts.map +1 -1
- package/dist/runtime/game.js +10 -1
- package/package.json +1 -1
- package/src/adapter/adapter-module.ts +18 -1
- package/src/adapter/audio-meter.ts +21 -0
- package/src/runtime/game.ts +10 -2
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
* "Unknown input must REJECT LOUDLY").
|
|
20
20
|
* - individual FIELDS may be closures, evaluated lazily against the mounted
|
|
21
21
|
* game (`ObservationDeclaration.answer`). A closure is never required to
|
|
22
|
-
* read the table.
|
|
22
|
+
* read the table. `editor.Layout` is an imported React component: the
|
|
23
|
+
* editor invokes it to compose surfaces and edit/play behavior. It is a
|
|
24
|
+
* runtime value, never a serialized manifest setting or a registry key.
|
|
23
25
|
*
|
|
24
26
|
* **Zero inference.** A binding is a DECLARATION or a finder SELECTION the
|
|
25
27
|
* adapter makes — never something the host sniffs out. Finder algorithms
|
|
@@ -40,6 +42,7 @@
|
|
|
40
42
|
* — identity, roots, boot mode, `server.room`. Everything that binds behavior
|
|
41
43
|
* is the adapter's. This wave adds NO manifest field.
|
|
42
44
|
*/
|
|
45
|
+
import type { ComponentType } from 'react';
|
|
43
46
|
import { z } from 'zod';
|
|
44
47
|
import type { ResolvedAdapterRoot } from '../manifest/load';
|
|
45
48
|
import type { AdapterSurface } from './adapter-surface';
|
|
@@ -474,7 +477,14 @@ export interface AdapterInputBinding {
|
|
|
474
477
|
readonly clear: (game: unknown) => void;
|
|
475
478
|
}
|
|
476
479
|
/** Project-owned editor defaults. User layout choices remain session state. */
|
|
480
|
+
export interface AdapterEditorLayoutProps {
|
|
481
|
+
readonly playing: boolean;
|
|
482
|
+
readonly paused: boolean;
|
|
483
|
+
readonly onReturnToProjectScreen?: (() => void) | undefined;
|
|
484
|
+
}
|
|
477
485
|
export interface AdapterEditorConfiguration {
|
|
486
|
+
/** Imported React implementation; owns both composition and edit/play presentation. */
|
|
487
|
+
readonly Layout?: ComponentType<AdapterEditorLayoutProps>;
|
|
478
488
|
/** Registered workspace to open when this checkout has no saved workspace. */
|
|
479
489
|
readonly workspace?: string;
|
|
480
490
|
/** Inspector layout beneath the active workspace and the user's override. */
|
|
@@ -510,6 +520,7 @@ export interface AdapterDefinitionInput {
|
|
|
510
520
|
}
|
|
511
521
|
export declare const AdapterDefinitionSchema: z.ZodObject<{
|
|
512
522
|
editor: z.ZodOptional<z.ZodObject<{
|
|
523
|
+
Layout: z.ZodOptional<z.ZodCustom<ComponentType<AdapterEditorLayoutProps>, ComponentType<AdapterEditorLayoutProps>>>;
|
|
513
524
|
workspace: z.ZodOptional<z.ZodString>;
|
|
514
525
|
inspector: z.ZodOptional<z.ZodEnum<{
|
|
515
526
|
properties: "properties";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-module.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter-module.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"adapter-module.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
* "Unknown input must REJECT LOUDLY").
|
|
20
20
|
* - individual FIELDS may be closures, evaluated lazily against the mounted
|
|
21
21
|
* game (`ObservationDeclaration.answer`). A closure is never required to
|
|
22
|
-
* read the table.
|
|
22
|
+
* read the table. `editor.Layout` is an imported React component: the
|
|
23
|
+
* editor invokes it to compose surfaces and edit/play behavior. It is a
|
|
24
|
+
* runtime value, never a serialized manifest setting or a registry key.
|
|
23
25
|
*
|
|
24
26
|
* **Zero inference.** A binding is a DECLARATION or a finder SELECTION the
|
|
25
27
|
* adapter makes — never something the host sniffs out. Finder algorithms
|
|
@@ -372,6 +374,9 @@ const AdapterInputBindingSchema = z
|
|
|
372
374
|
.strict();
|
|
373
375
|
const AdapterEditorConfigurationSchema = z
|
|
374
376
|
.object({
|
|
377
|
+
Layout: z
|
|
378
|
+
.custom((value) => typeof value === 'function', 'Layout must be an imported React component')
|
|
379
|
+
.optional(),
|
|
375
380
|
workspace: z.string().min(1).optional(),
|
|
376
381
|
inspector: z.enum(['column', 'properties', 'card']).optional(),
|
|
377
382
|
playUtilities: z.array(z.string().min(1)).optional(),
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meter arithmetic over an `AudioAdapter`'s `AudioMeterFrame.level` — the one
|
|
3
|
+
* place a linear RMS level becomes dBFS and a bar fill. Lives beside the
|
|
4
|
+
* adapter because both readers of a level (the editor's header meter and the
|
|
5
|
+
* `@vgai/game` audio debugger) are consumers of the adapter, and neither may
|
|
6
|
+
* import the other.
|
|
7
|
+
*/
|
|
8
|
+
/** Linear RMS level → dBFS. Silence clamps to `floorDb` (log of 0 is -∞). */
|
|
9
|
+
export declare function levelToDb(level: number, floorDb?: number): number;
|
|
10
|
+
/** Meter-bar fill percentage: dB-scaled from a -60 dBFS floor (a linear
|
|
11
|
+
* scale would pin every real-world level into the bottom pixels). 0 for
|
|
12
|
+
* silence, 100 at/above full scale. */
|
|
13
|
+
export declare function meterPercent(level: number, floorDb?: number): number;
|
|
14
|
+
//# sourceMappingURL=audio-meter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-meter.d.ts","sourceRoot":"","sources":["../../src/adapter/audio-meter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,MAAM,CAG9D;AAED;;wCAEwC;AACxC,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,MAAM,CAGjE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meter arithmetic over an `AudioAdapter`'s `AudioMeterFrame.level` — the one
|
|
3
|
+
* place a linear RMS level becomes dBFS and a bar fill. Lives beside the
|
|
4
|
+
* adapter because both readers of a level (the editor's header meter and the
|
|
5
|
+
* `@vgai/game` audio debugger) are consumers of the adapter, and neither may
|
|
6
|
+
* import the other.
|
|
7
|
+
*/
|
|
8
|
+
/** Linear RMS level → dBFS. Silence clamps to `floorDb` (log of 0 is -∞). */
|
|
9
|
+
export function levelToDb(level, floorDb = -60) {
|
|
10
|
+
if (!(level > 0))
|
|
11
|
+
return floorDb;
|
|
12
|
+
return Math.max(floorDb, 20 * Math.log10(level));
|
|
13
|
+
}
|
|
14
|
+
/** Meter-bar fill percentage: dB-scaled from a -60 dBFS floor (a linear
|
|
15
|
+
* scale would pin every real-world level into the bottom pixels). 0 for
|
|
16
|
+
* silence, 100 at/above full scale. */
|
|
17
|
+
export function meterPercent(level, floorDb = -60) {
|
|
18
|
+
const db = levelToDb(level, floorDb);
|
|
19
|
+
return Math.round(((db - floorDb) / -floorDb) * 100);
|
|
20
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/runtime/game.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/runtime/game.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/game.js
CHANGED
|
@@ -411,6 +411,7 @@ export function createGame(opts) {
|
|
|
411
411
|
// biome-ignore lint/suspicious/noConsole: see comment above
|
|
412
412
|
console.warn(message);
|
|
413
413
|
}
|
|
414
|
+
const audioMuteBeforePause = new WeakMap();
|
|
414
415
|
/** Fan out a loop-gate (self-driven roots) + audio-gate call over every
|
|
415
416
|
* `pausable` world, reporting honestly (once) wherever the capability is
|
|
416
417
|
* absent — shared by `pause()`/`resume()` below (same fan-out, opposite
|
|
@@ -443,7 +444,15 @@ export function createGame(opts) {
|
|
|
443
444
|
// the editor yet paradoxically reported as ungateable here.
|
|
444
445
|
const audio = declaredSystemAdapters.get(world.id)?.audio ?? world.mounted.systems?.audio;
|
|
445
446
|
if (audio) {
|
|
446
|
-
|
|
447
|
+
if (next) {
|
|
448
|
+
if (!audioMuteBeforePause.has(audio))
|
|
449
|
+
audioMuteBeforePause.set(audio, audio.isMuted());
|
|
450
|
+
audio.setMuted(true);
|
|
451
|
+
}
|
|
452
|
+
else if (audioMuteBeforePause.has(audio)) {
|
|
453
|
+
audio.setMuted(audioMuteBeforePause.get(audio));
|
|
454
|
+
audioMuteBeforePause.delete(audio);
|
|
455
|
+
}
|
|
447
456
|
}
|
|
448
457
|
else if (next &&
|
|
449
458
|
!declaredAbsences.get(world.id)?.some((absence) => absence.slot === 'audio')) {
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@vgai/engine",
|
|
3
3
|
"author": "Volter AI, Inc.",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
|
-
"version": "0.5.
|
|
5
|
+
"version": "0.5.56",
|
|
6
6
|
"description": "Readable TypeScript game engine and universal host for Three.js, PixiJS, and React games.",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"game-engine",
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
* "Unknown input must REJECT LOUDLY").
|
|
20
20
|
* - individual FIELDS may be closures, evaluated lazily against the mounted
|
|
21
21
|
* game (`ObservationDeclaration.answer`). A closure is never required to
|
|
22
|
-
* read the table.
|
|
22
|
+
* read the table. `editor.Layout` is an imported React component: the
|
|
23
|
+
* editor invokes it to compose surfaces and edit/play behavior. It is a
|
|
24
|
+
* runtime value, never a serialized manifest setting or a registry key.
|
|
23
25
|
*
|
|
24
26
|
* **Zero inference.** A binding is a DECLARATION or a finder SELECTION the
|
|
25
27
|
* adapter makes — never something the host sniffs out. Finder algorithms
|
|
@@ -41,6 +43,7 @@
|
|
|
41
43
|
* is the adapter's. This wave adds NO manifest field.
|
|
42
44
|
*/
|
|
43
45
|
|
|
46
|
+
import type { ComponentType } from 'react';
|
|
44
47
|
import { z } from 'zod';
|
|
45
48
|
import type { ResolvedAdapterRoot } from '../manifest/load';
|
|
46
49
|
import type { AdapterSurface } from './adapter-surface';
|
|
@@ -788,7 +791,15 @@ const AdapterInputBindingSchema = z
|
|
|
788
791
|
// ---------------------------------------------------------------------------
|
|
789
792
|
|
|
790
793
|
/** Project-owned editor defaults. User layout choices remain session state. */
|
|
794
|
+
export interface AdapterEditorLayoutProps {
|
|
795
|
+
readonly playing: boolean;
|
|
796
|
+
readonly paused: boolean;
|
|
797
|
+
readonly onReturnToProjectScreen?: (() => void) | undefined;
|
|
798
|
+
}
|
|
791
799
|
export interface AdapterEditorConfiguration {
|
|
800
|
+
/** Imported React implementation; owns both composition and edit/play presentation. */
|
|
801
|
+
readonly Layout?: ComponentType<AdapterEditorLayoutProps>;
|
|
802
|
+
|
|
792
803
|
/** Registered workspace to open when this checkout has no saved workspace. */
|
|
793
804
|
readonly workspace?: string;
|
|
794
805
|
/** Inspector layout beneath the active workspace and the user's override. */
|
|
@@ -799,6 +810,12 @@ export interface AdapterEditorConfiguration {
|
|
|
799
810
|
|
|
800
811
|
const AdapterEditorConfigurationSchema = z
|
|
801
812
|
.object({
|
|
813
|
+
Layout: z
|
|
814
|
+
.custom<ComponentType<AdapterEditorLayoutProps>>(
|
|
815
|
+
(value) => typeof value === 'function',
|
|
816
|
+
'Layout must be an imported React component',
|
|
817
|
+
)
|
|
818
|
+
.optional(),
|
|
802
819
|
workspace: z.string().min(1).optional(),
|
|
803
820
|
inspector: z.enum(['column', 'properties', 'card']).optional(),
|
|
804
821
|
playUtilities: z.array(z.string().min(1)).optional(),
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meter arithmetic over an `AudioAdapter`'s `AudioMeterFrame.level` — the one
|
|
3
|
+
* place a linear RMS level becomes dBFS and a bar fill. Lives beside the
|
|
4
|
+
* adapter because both readers of a level (the editor's header meter and the
|
|
5
|
+
* `@vgai/game` audio debugger) are consumers of the adapter, and neither may
|
|
6
|
+
* import the other.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Linear RMS level → dBFS. Silence clamps to `floorDb` (log of 0 is -∞). */
|
|
10
|
+
export function levelToDb(level: number, floorDb = -60): number {
|
|
11
|
+
if (!(level > 0)) return floorDb;
|
|
12
|
+
return Math.max(floorDb, 20 * Math.log10(level));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Meter-bar fill percentage: dB-scaled from a -60 dBFS floor (a linear
|
|
16
|
+
* scale would pin every real-world level into the bottom pixels). 0 for
|
|
17
|
+
* silence, 100 at/above full scale. */
|
|
18
|
+
export function meterPercent(level: number, floorDb = -60): number {
|
|
19
|
+
const db = levelToDb(level, floorDb);
|
|
20
|
+
return Math.round(((db - floorDb) / -floorDb) * 100);
|
|
21
|
+
}
|
package/src/runtime/game.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { AdapterSurface as AdapterSurfaceLeaf } from '../adapter/adapter-su
|
|
|
10
10
|
import type { RootBinding } from '../adapter/binding';
|
|
11
11
|
import { formatAudioGateMessage, formatLoopGateMessage } from '../adapter/loop-gate-report';
|
|
12
12
|
import type { MountedRoot } from '../adapter/root-adapter';
|
|
13
|
-
import type { SystemAdapters } from '../adapter/system-adapter';
|
|
13
|
+
import type { AudioAdapter, SystemAdapters } from '../adapter/system-adapter';
|
|
14
14
|
import type { AssetCache } from '../assets';
|
|
15
15
|
import type { createGameLoop } from '../core/game-loop';
|
|
16
16
|
import {
|
|
@@ -1062,6 +1062,8 @@ export function createGame(opts: {
|
|
|
1062
1062
|
console.warn(message);
|
|
1063
1063
|
}
|
|
1064
1064
|
|
|
1065
|
+
const audioMuteBeforePause = new WeakMap<AudioAdapter, boolean>();
|
|
1066
|
+
|
|
1065
1067
|
/** Fan out a loop-gate (self-driven roots) + audio-gate call over every
|
|
1066
1068
|
* `pausable` world, reporting honestly (once) wherever the capability is
|
|
1067
1069
|
* absent — shared by `pause()`/`resume()` below (same fan-out, opposite
|
|
@@ -1095,7 +1097,13 @@ export function createGame(opts: {
|
|
|
1095
1097
|
// the editor yet paradoxically reported as ungateable here.
|
|
1096
1098
|
const audio = declaredSystemAdapters.get(world.id)?.audio ?? world.mounted.systems?.audio;
|
|
1097
1099
|
if (audio) {
|
|
1098
|
-
|
|
1100
|
+
if (next) {
|
|
1101
|
+
if (!audioMuteBeforePause.has(audio)) audioMuteBeforePause.set(audio, audio.isMuted());
|
|
1102
|
+
audio.setMuted(true);
|
|
1103
|
+
} else if (audioMuteBeforePause.has(audio)) {
|
|
1104
|
+
audio.setMuted(audioMuteBeforePause.get(audio)!);
|
|
1105
|
+
audioMuteBeforePause.delete(audio);
|
|
1106
|
+
}
|
|
1099
1107
|
} else if (
|
|
1100
1108
|
next &&
|
|
1101
1109
|
!declaredAbsences.get(world.id)?.some((absence) => absence.slot === 'audio')
|