@quake2ts/engine 0.0.1
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/browser/index.global.js +617 -0
- package/dist/browser/index.global.js.map +1 -0
- package/dist/cjs/index.cjs +17604 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/esm/index.js +17373 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/assets/animation.d.ts +33 -0
- package/dist/types/assets/animation.d.ts.map +1 -0
- package/dist/types/assets/audio.d.ts +27 -0
- package/dist/types/assets/audio.d.ts.map +1 -0
- package/dist/types/assets/audio.worker.d.ts +2 -0
- package/dist/types/assets/audio.worker.d.ts.map +1 -0
- package/dist/types/assets/browserIngestion.d.ts +7 -0
- package/dist/types/assets/browserIngestion.d.ts.map +1 -0
- package/dist/types/assets/bsp.d.ts +197 -0
- package/dist/types/assets/bsp.d.ts.map +1 -0
- package/dist/types/assets/bsp.worker.d.ts +2 -0
- package/dist/types/assets/bsp.worker.d.ts.map +1 -0
- package/dist/types/assets/cache.d.ts +26 -0
- package/dist/types/assets/cache.d.ts.map +1 -0
- package/dist/types/assets/crossReference.d.ts +35 -0
- package/dist/types/assets/crossReference.d.ts.map +1 -0
- package/dist/types/assets/ent.d.ts +31 -0
- package/dist/types/assets/ent.d.ts.map +1 -0
- package/dist/types/assets/fileType.d.ts +18 -0
- package/dist/types/assets/fileType.d.ts.map +1 -0
- package/dist/types/assets/headlessLoader.d.ts +11 -0
- package/dist/types/assets/headlessLoader.d.ts.map +1 -0
- package/dist/types/assets/index.d.ts +30 -0
- package/dist/types/assets/index.d.ts.map +1 -0
- package/dist/types/assets/ingestion.d.ts +62 -0
- package/dist/types/assets/ingestion.d.ts.map +1 -0
- package/dist/types/assets/interactionGraph.d.ts +21 -0
- package/dist/types/assets/interactionGraph.d.ts.map +1 -0
- package/dist/types/assets/manager.d.ts +97 -0
- package/dist/types/assets/manager.d.ts.map +1 -0
- package/dist/types/assets/mapStatistics.d.ts +20 -0
- package/dist/types/assets/mapStatistics.d.ts.map +1 -0
- package/dist/types/assets/md2.d.ts +82 -0
- package/dist/types/assets/md2.d.ts.map +1 -0
- package/dist/types/assets/md3.d.ts +72 -0
- package/dist/types/assets/md3.d.ts.map +1 -0
- package/dist/types/assets/ogg.d.ts +12 -0
- package/dist/types/assets/ogg.d.ts.map +1 -0
- package/dist/types/assets/pak.d.ts +32 -0
- package/dist/types/assets/pak.d.ts.map +1 -0
- package/dist/types/assets/pakIndexStore.d.ts +19 -0
- package/dist/types/assets/pakIndexStore.d.ts.map +1 -0
- package/dist/types/assets/pakValidation.d.ts +28 -0
- package/dist/types/assets/pakValidation.d.ts.map +1 -0
- package/dist/types/assets/pakWriter.d.ts +27 -0
- package/dist/types/assets/pakWriter.d.ts.map +1 -0
- package/dist/types/assets/pcx.d.ts +13 -0
- package/dist/types/assets/pcx.d.ts.map +1 -0
- package/dist/types/assets/preview.d.ts +15 -0
- package/dist/types/assets/preview.d.ts.map +1 -0
- package/dist/types/assets/resourceTracker.d.ts +33 -0
- package/dist/types/assets/resourceTracker.d.ts.map +1 -0
- package/dist/types/assets/sprite.d.ts +23 -0
- package/dist/types/assets/sprite.d.ts.map +1 -0
- package/dist/types/assets/streamer.d.ts +17 -0
- package/dist/types/assets/streamer.d.ts.map +1 -0
- package/dist/types/assets/streamingPak.d.ts +28 -0
- package/dist/types/assets/streamingPak.d.ts.map +1 -0
- package/dist/types/assets/texture.d.ts +37 -0
- package/dist/types/assets/texture.d.ts.map +1 -0
- package/dist/types/assets/tga.d.ts +15 -0
- package/dist/types/assets/tga.d.ts.map +1 -0
- package/dist/types/assets/vfs.d.ts +57 -0
- package/dist/types/assets/vfs.d.ts.map +1 -0
- package/dist/types/assets/visibilityAnalyzer.d.ts +28 -0
- package/dist/types/assets/visibilityAnalyzer.d.ts.map +1 -0
- package/dist/types/assets/wal.d.ts +21 -0
- package/dist/types/assets/wal.d.ts.map +1 -0
- package/dist/types/assets/wav.d.ts +11 -0
- package/dist/types/assets/wav.d.ts.map +1 -0
- package/dist/types/audio/ambient.d.ts +22 -0
- package/dist/types/audio/ambient.d.ts.map +1 -0
- package/dist/types/audio/api.d.ts +37 -0
- package/dist/types/audio/api.d.ts.map +1 -0
- package/dist/types/audio/channels.d.ts +15 -0
- package/dist/types/audio/channels.d.ts.map +1 -0
- package/dist/types/audio/constants.d.ts +2 -0
- package/dist/types/audio/constants.d.ts.map +1 -0
- package/dist/types/audio/context.d.ts +79 -0
- package/dist/types/audio/context.d.ts.map +1 -0
- package/dist/types/audio/music.d.ts +49 -0
- package/dist/types/audio/music.d.ts.map +1 -0
- package/dist/types/audio/occlusion.d.ts +15 -0
- package/dist/types/audio/occlusion.d.ts.map +1 -0
- package/dist/types/audio/precache.d.ts +28 -0
- package/dist/types/audio/precache.d.ts.map +1 -0
- package/dist/types/audio/registry.d.ts +14 -0
- package/dist/types/audio/registry.d.ts.map +1 -0
- package/dist/types/audio/reverb.d.ts +17 -0
- package/dist/types/audio/reverb.d.ts.map +1 -0
- package/dist/types/audio/room.d.ts +5 -0
- package/dist/types/audio/room.d.ts.map +1 -0
- package/dist/types/audio/system.d.ts +112 -0
- package/dist/types/audio/system.d.ts.map +1 -0
- package/dist/types/cli/demoOptimizer.d.ts +10 -0
- package/dist/types/cli/demoOptimizer.d.ts.map +1 -0
- package/dist/types/commands.d.ts +27 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/configstrings.d.ts +36 -0
- package/dist/types/configstrings.d.ts.map +1 -0
- package/dist/types/cvars.d.ts +58 -0
- package/dist/types/cvars.d.ts.map +1 -0
- package/dist/types/demo/analysis.d.ts +83 -0
- package/dist/types/demo/analysis.d.ts.map +1 -0
- package/dist/types/demo/analyzer.d.ts +33 -0
- package/dist/types/demo/analyzer.d.ts.map +1 -0
- package/dist/types/demo/api.d.ts +40 -0
- package/dist/types/demo/api.d.ts.map +1 -0
- package/dist/types/demo/asyncParser.d.ts +15 -0
- package/dist/types/demo/asyncParser.d.ts.map +1 -0
- package/dist/types/demo/camera.d.ts +17 -0
- package/dist/types/demo/camera.d.ts.map +1 -0
- package/dist/types/demo/clipper.d.ts +34 -0
- package/dist/types/demo/clipper.d.ts.map +1 -0
- package/dist/types/demo/delta.d.ts +3 -0
- package/dist/types/demo/delta.d.ts.map +1 -0
- package/dist/types/demo/demo.worker.d.ts +126 -0
- package/dist/types/demo/demo.worker.d.ts.map +1 -0
- package/dist/types/demo/demoReader.d.ts +62 -0
- package/dist/types/demo/demoReader.d.ts.map +1 -0
- package/dist/types/demo/demoRecorder.d.ts +15 -0
- package/dist/types/demo/demoRecorder.d.ts.map +1 -0
- package/dist/types/demo/demoStream.d.ts +39 -0
- package/dist/types/demo/demoStream.d.ts.map +1 -0
- package/dist/types/demo/demoWriter.d.ts +8 -0
- package/dist/types/demo/demoWriter.d.ts.map +1 -0
- package/dist/types/demo/index.d.ts +6 -0
- package/dist/types/demo/index.d.ts.map +1 -0
- package/dist/types/demo/message.d.ts +178 -0
- package/dist/types/demo/message.d.ts.map +1 -0
- package/dist/types/demo/optimalClipFinder.d.ts +35 -0
- package/dist/types/demo/optimalClipFinder.d.ts.map +1 -0
- package/dist/types/demo/packager.d.ts +46 -0
- package/dist/types/demo/packager.d.ts.map +1 -0
- package/dist/types/demo/parser.d.ts +222 -0
- package/dist/types/demo/parser.d.ts.map +1 -0
- package/dist/types/demo/playback.d.ts +135 -0
- package/dist/types/demo/playback.d.ts.map +1 -0
- package/dist/types/demo/reader.d.ts +15 -0
- package/dist/types/demo/reader.d.ts.map +1 -0
- package/dist/types/demo/recorder.d.ts +14 -0
- package/dist/types/demo/recorder.d.ts.map +1 -0
- package/dist/types/demo/types.d.ts +37 -0
- package/dist/types/demo/types.d.ts.map +1 -0
- package/dist/types/demo/validator.d.ts +13 -0
- package/dist/types/demo/validator.d.ts.map +1 -0
- package/dist/types/demo/worldStateOptimizer.d.ts +13 -0
- package/dist/types/demo/worldStateOptimizer.d.ts.map +1 -0
- package/dist/types/demo/writer.d.ts +28 -0
- package/dist/types/demo/writer.d.ts.map +1 -0
- package/dist/types/editor/bsp-inspector.d.ts +39 -0
- package/dist/types/editor/bsp-inspector.d.ts.map +1 -0
- package/dist/types/editor/ent.d.ts +21 -0
- package/dist/types/editor/ent.d.ts.map +1 -0
- package/dist/types/host.d.ts +52 -0
- package/dist/types/host.d.ts.map +1 -0
- package/dist/types/index.d.ts +104 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/loop.d.ts +40 -0
- package/dist/types/loop.d.ts.map +1 -0
- package/dist/types/network/clientConnection.d.ts +139 -0
- package/dist/types/network/clientConnection.d.ts.map +1 -0
- package/dist/types/render/__mocks__/frame.d.ts +31 -0
- package/dist/types/render/__mocks__/frame.d.ts.map +1 -0
- package/dist/types/render/bloom.d.ts +19 -0
- package/dist/types/render/bloom.d.ts.map +1 -0
- package/dist/types/render/bsp/generator.d.ts +25 -0
- package/dist/types/render/bsp/generator.d.ts.map +1 -0
- package/dist/types/render/bsp/geometry.d.ts +37 -0
- package/dist/types/render/bsp/geometry.d.ts.map +1 -0
- package/dist/types/render/bsp/renderer.d.ts +12 -0
- package/dist/types/render/bsp/renderer.d.ts.map +1 -0
- package/dist/types/render/bsp/surface.d.ts +4 -0
- package/dist/types/render/bsp/surface.d.ts.map +1 -0
- package/dist/types/render/bsp.d.ts +66 -0
- package/dist/types/render/bsp.d.ts.map +1 -0
- package/dist/types/render/bspPipeline.d.ts +78 -0
- package/dist/types/render/bspPipeline.d.ts.map +1 -0
- package/dist/types/render/bspTraversal.d.ts +13 -0
- package/dist/types/render/bspTraversal.d.ts.map +1 -0
- package/dist/types/render/camera.d.ts +54 -0
- package/dist/types/render/camera.d.ts.map +1 -0
- package/dist/types/render/cameraController.d.ts +28 -0
- package/dist/types/render/cameraController.d.ts.map +1 -0
- package/dist/types/render/collisionVis.d.ts +54 -0
- package/dist/types/render/collisionVis.d.ts.map +1 -0
- package/dist/types/render/colors.d.ts +6 -0
- package/dist/types/render/colors.d.ts.map +1 -0
- package/dist/types/render/context.d.ts +36 -0
- package/dist/types/render/context.d.ts.map +1 -0
- package/dist/types/render/culling.d.ts +12 -0
- package/dist/types/render/culling.d.ts.map +1 -0
- package/dist/types/render/debug.d.ts +36 -0
- package/dist/types/render/debug.d.ts.map +1 -0
- package/dist/types/render/debugMode.d.ts +10 -0
- package/dist/types/render/debugMode.d.ts.map +1 -0
- package/dist/types/render/dlight.d.ts +43 -0
- package/dist/types/render/dlight.d.ts.map +1 -0
- package/dist/types/render/frame.d.ts +78 -0
- package/dist/types/render/frame.d.ts.map +1 -0
- package/dist/types/render/geometry.d.ts +2 -0
- package/dist/types/render/geometry.d.ts.map +1 -0
- package/dist/types/render/gizmo.d.ts +32 -0
- package/dist/types/render/gizmo.d.ts.map +1 -0
- package/dist/types/render/gpuProfiler.d.ts +59 -0
- package/dist/types/render/gpuProfiler.d.ts.map +1 -0
- package/dist/types/render/instancing.d.ts +12 -0
- package/dist/types/render/instancing.d.ts.map +1 -0
- package/dist/types/render/interface.d.ts +50 -0
- package/dist/types/render/interface.d.ts.map +1 -0
- package/dist/types/render/light.d.ts +10 -0
- package/dist/types/render/light.d.ts.map +1 -0
- package/dist/types/render/lightCulling.d.ts +17 -0
- package/dist/types/render/lightCulling.d.ts.map +1 -0
- package/dist/types/render/lightStyles.d.ts +10 -0
- package/dist/types/render/lightStyles.d.ts.map +1 -0
- package/dist/types/render/materialLoader.d.ts +5 -0
- package/dist/types/render/materialLoader.d.ts.map +1 -0
- package/dist/types/render/materials.d.ts +39 -0
- package/dist/types/render/materials.d.ts.map +1 -0
- package/dist/types/render/md2Pipeline.d.ts +74 -0
- package/dist/types/render/md2Pipeline.d.ts.map +1 -0
- package/dist/types/render/md3Pipeline.d.ts +94 -0
- package/dist/types/render/md3Pipeline.d.ts.map +1 -0
- package/dist/types/render/options.d.ts +9 -0
- package/dist/types/render/options.d.ts.map +1 -0
- package/dist/types/render/particleSystem.d.ts +125 -0
- package/dist/types/render/particleSystem.d.ts.map +1 -0
- package/dist/types/render/postprocessing/pipeline.d.ts +13 -0
- package/dist/types/render/postprocessing/pipeline.d.ts.map +1 -0
- package/dist/types/render/renderer.d.ts +8 -0
- package/dist/types/render/renderer.d.ts.map +1 -0
- package/dist/types/render/resources.d.ts +69 -0
- package/dist/types/render/resources.d.ts.map +1 -0
- package/dist/types/render/scene.d.ts +31 -0
- package/dist/types/render/scene.d.ts.map +1 -0
- package/dist/types/render/shaderProgram.d.ts +19 -0
- package/dist/types/render/shaderProgram.d.ts.map +1 -0
- package/dist/types/render/skybox.d.ts +28 -0
- package/dist/types/render/skybox.d.ts.map +1 -0
- package/dist/types/render/sprite.d.ts +21 -0
- package/dist/types/render/sprite.d.ts.map +1 -0
- package/dist/types/render/types.d.ts +29 -0
- package/dist/types/render/types.d.ts.map +1 -0
- package/dist/types/render/webgpu/constants.d.ts +29 -0
- package/dist/types/render/webgpu/constants.d.ts.map +1 -0
- package/dist/types/render/webgpu/context.d.ts +41 -0
- package/dist/types/render/webgpu/context.d.ts.map +1 -0
- package/dist/types/render/webgpu/frame.d.ts +58 -0
- package/dist/types/render/webgpu/frame.d.ts.map +1 -0
- package/dist/types/render/webgpu/headless.d.ts +9 -0
- package/dist/types/render/webgpu/headless.d.ts.map +1 -0
- package/dist/types/render/webgpu/pipelines/sprite.d.ts +31 -0
- package/dist/types/render/webgpu/pipelines/sprite.d.ts.map +1 -0
- package/dist/types/render/webgpu/renderer.d.ts +30 -0
- package/dist/types/render/webgpu/renderer.d.ts.map +1 -0
- package/dist/types/render/webgpu/resources.d.ts +240 -0
- package/dist/types/render/webgpu/resources.d.ts.map +1 -0
- package/dist/types/render/webgpu/shaders/mipmapShader.d.ts +2 -0
- package/dist/types/render/webgpu/shaders/mipmapShader.d.ts.map +1 -0
- package/dist/types/render/webgpu/shaders/spriteShader.d.ts +2 -0
- package/dist/types/render/webgpu/shaders/spriteShader.d.ts.map +1 -0
- package/dist/types/runtime.d.ts +19 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/stream/streamingBuffer.d.ts +102 -0
- package/dist/types/stream/streamingBuffer.d.ts.map +1 -0
- package/dist/types/tools/lightmapExport.d.ts +17 -0
- package/dist/types/tools/lightmapExport.d.ts.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface WalTexture {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly width: number;
|
|
4
|
+
readonly height: number;
|
|
5
|
+
readonly mipmaps: readonly WalMipmap[];
|
|
6
|
+
readonly animName: string;
|
|
7
|
+
readonly flags: number;
|
|
8
|
+
readonly contents: number;
|
|
9
|
+
readonly value: number;
|
|
10
|
+
}
|
|
11
|
+
export interface WalMipmap {
|
|
12
|
+
readonly level: number;
|
|
13
|
+
readonly width: number;
|
|
14
|
+
readonly height: number;
|
|
15
|
+
readonly data: Uint8Array;
|
|
16
|
+
}
|
|
17
|
+
export declare class WalParseError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
export declare function parseWal(buffer: ArrayBuffer): WalTexture;
|
|
21
|
+
//# sourceMappingURL=wal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wal.d.ts","sourceRoot":"","sources":["../../../src/assets/wal.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAsCxD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface WavData {
|
|
2
|
+
readonly sampleRate: number;
|
|
3
|
+
readonly channels: number;
|
|
4
|
+
readonly bitsPerSample: number;
|
|
5
|
+
readonly samples: Float32Array;
|
|
6
|
+
}
|
|
7
|
+
export declare class WavParseError extends Error {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare function parseWav(buffer: ArrayBuffer): WavData;
|
|
11
|
+
//# sourceMappingURL=wav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wav.d.ts","sourceRoot":"","sources":["../../../src/assets/wav.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAMD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAyErD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Vec3 } from '@quake2ts/shared';
|
|
2
|
+
import type { AudioSystem, ActiveSound } from './system.js';
|
|
3
|
+
export interface AmbientSound {
|
|
4
|
+
origin: Vec3;
|
|
5
|
+
soundIndex: number;
|
|
6
|
+
volume: number;
|
|
7
|
+
attenuation: number;
|
|
8
|
+
activeSound?: ActiveSound;
|
|
9
|
+
}
|
|
10
|
+
export declare class AmbientSoundSystem {
|
|
11
|
+
private readonly sounds;
|
|
12
|
+
private nextId;
|
|
13
|
+
private readonly audioSystem;
|
|
14
|
+
constructor(audioSystem: AudioSystem);
|
|
15
|
+
addSound(origin: Vec3, soundIndex: number, volume: number, attenuation: number): number;
|
|
16
|
+
removeSound(id: number): void;
|
|
17
|
+
clear(): void;
|
|
18
|
+
update(): void;
|
|
19
|
+
private startSound;
|
|
20
|
+
private stopSound;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ambient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ambient.d.ts","sourceRoot":"","sources":["../../../src/audio/ambient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG5D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,IAAI,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,WAAW,EAAE,WAAW;IAIpC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAiBvF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ7B,KAAK,IAAI,IAAI;IAOb,MAAM,IAAI,IAAI;IASd,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
2
|
+
import { MusicSystem } from './music.js';
|
|
3
|
+
import { SoundRegistry } from './registry.js';
|
|
4
|
+
import { AudioSystem, type SoundRequest, type ActiveSound } from './system.js';
|
|
5
|
+
export interface SubtitleClient {
|
|
6
|
+
showSubtitle(text: string, soundName: string): void;
|
|
7
|
+
}
|
|
8
|
+
export interface AudioApiOptions {
|
|
9
|
+
registry: SoundRegistry;
|
|
10
|
+
system: AudioSystem;
|
|
11
|
+
music?: MusicSystem;
|
|
12
|
+
client?: SubtitleClient;
|
|
13
|
+
}
|
|
14
|
+
export declare class AudioApi {
|
|
15
|
+
private readonly registry;
|
|
16
|
+
private readonly system;
|
|
17
|
+
private readonly music?;
|
|
18
|
+
private readonly client?;
|
|
19
|
+
constructor(options: AudioApiOptions);
|
|
20
|
+
soundindex(name: string): number;
|
|
21
|
+
sound(entity: number, channel: number, soundindex: number, volume: number, attenuation: number, timeofs: number): void;
|
|
22
|
+
positioned_sound(origin: Vec3, soundindex: number, volume: number, attenuation: number): void;
|
|
23
|
+
loop_sound(entity: number, channel: number, soundindex: number, volume: number, attenuation: number): ActiveSound | undefined;
|
|
24
|
+
stop_entity_sounds(entnum: number): void;
|
|
25
|
+
setPlaybackRate(rate: number): void;
|
|
26
|
+
set_listener(listener: Parameters<AudioSystem['setListener']>[0]): void;
|
|
27
|
+
play_music(track: string, loop?: boolean): Promise<void>;
|
|
28
|
+
play_track(trackNum: number, loop?: boolean): Promise<void>;
|
|
29
|
+
pause_music(): void;
|
|
30
|
+
resume_music(): Promise<void>;
|
|
31
|
+
stop_music(): void;
|
|
32
|
+
set_music_volume(volume: number): void;
|
|
33
|
+
play_ambient(origin: Vec3, soundindex: number, volume: number): void;
|
|
34
|
+
play_channel(request: Omit<SoundRequest, 'looping'>): void;
|
|
35
|
+
private triggerSubtitle;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/audio/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAiB;gBAE7B,OAAO,EAAE,eAAe;IAOpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAYtH,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAa7H,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,WAAW,IAAI,IAAI;IAInB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,UAAU,IAAI,IAAI;IAIlB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKpE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI;IAK1D,OAAO,CAAC,eAAe;CAaxB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const baseChannel: (entchannel: number) => number;
|
|
2
|
+
export interface ChannelState {
|
|
3
|
+
entnum: number;
|
|
4
|
+
entchannel: number;
|
|
5
|
+
endTimeMs: number;
|
|
6
|
+
isPlayer: boolean;
|
|
7
|
+
active: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ChannelPickContext {
|
|
10
|
+
readonly nowMs: number;
|
|
11
|
+
readonly playerEntity?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function createInitialChannels(playerEntity?: number): ChannelState[];
|
|
14
|
+
export declare function pickChannel(channels: ChannelState[], entnum: number, entchannel: number, context: ChannelPickContext): number | undefined;
|
|
15
|
+
//# sourceMappingURL=channels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/audio/channels.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,MAAmC,CAAC;AAErF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,qBAAqB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAQ3E;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,GAC1B,MAAM,GAAG,SAAS,CAkCpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/audio/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,+BAA+B,EAC/B,2BAA2B,EAC5B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export interface AudioParamLike {
|
|
2
|
+
value: number;
|
|
3
|
+
}
|
|
4
|
+
export interface AudioNodeLike {
|
|
5
|
+
connect(destination: AudioNodeLike): void;
|
|
6
|
+
}
|
|
7
|
+
export interface BiquadFilterNodeLike extends AudioNodeLike {
|
|
8
|
+
frequency: AudioParamLike;
|
|
9
|
+
Q: AudioParamLike;
|
|
10
|
+
type: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GainNodeLike extends AudioNodeLike {
|
|
13
|
+
gain: AudioParamLike;
|
|
14
|
+
}
|
|
15
|
+
export interface DynamicsCompressorNodeLike extends AudioNodeLike {
|
|
16
|
+
}
|
|
17
|
+
export interface ConvolverNodeLike extends AudioNodeLike {
|
|
18
|
+
buffer: AudioBufferLike | null;
|
|
19
|
+
normalize: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface AudioBufferLike {
|
|
22
|
+
readonly duration: number;
|
|
23
|
+
}
|
|
24
|
+
export interface AudioBufferSourceNodeLike extends AudioNodeLike {
|
|
25
|
+
buffer: AudioBufferLike | null;
|
|
26
|
+
loop: boolean;
|
|
27
|
+
playbackRate: AudioParamLike;
|
|
28
|
+
onended: (() => void) | null;
|
|
29
|
+
start(when?: number, offset?: number, duration?: number): void;
|
|
30
|
+
stop(when?: number): void;
|
|
31
|
+
}
|
|
32
|
+
export interface PannerNodeLike extends AudioNodeLike {
|
|
33
|
+
positionX: AudioParamLike;
|
|
34
|
+
positionY: AudioParamLike;
|
|
35
|
+
positionZ: AudioParamLike;
|
|
36
|
+
refDistance?: number;
|
|
37
|
+
maxDistance?: number;
|
|
38
|
+
rolloffFactor?: number;
|
|
39
|
+
distanceModel?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface AudioDestinationNodeLike extends AudioNodeLike {
|
|
42
|
+
}
|
|
43
|
+
export interface AudioContextLike {
|
|
44
|
+
readonly destination: AudioDestinationNodeLike;
|
|
45
|
+
readonly currentTime: number;
|
|
46
|
+
state: 'suspended' | 'running' | 'closed';
|
|
47
|
+
resume(): Promise<void>;
|
|
48
|
+
suspend(): Promise<void>;
|
|
49
|
+
createGain(): GainNodeLike;
|
|
50
|
+
createDynamicsCompressor(): DynamicsCompressorNodeLike;
|
|
51
|
+
createBufferSource(): AudioBufferSourceNodeLike;
|
|
52
|
+
createPanner?(): PannerNodeLike;
|
|
53
|
+
createBiquadFilter?(): BiquadFilterNodeLike;
|
|
54
|
+
createConvolver?(): ConvolverNodeLike;
|
|
55
|
+
decodeAudioData?(data: ArrayBuffer): Promise<AudioBufferLike>;
|
|
56
|
+
}
|
|
57
|
+
export type AudioContextFactory = () => AudioContextLike;
|
|
58
|
+
export interface AudioGraph {
|
|
59
|
+
context: AudioContextLike;
|
|
60
|
+
master: GainNodeLike;
|
|
61
|
+
compressor: DynamicsCompressorNodeLike;
|
|
62
|
+
filter?: BiquadFilterNodeLike;
|
|
63
|
+
reverb?: ReverbNode;
|
|
64
|
+
}
|
|
65
|
+
export interface ReverbNode {
|
|
66
|
+
convolver: ConvolverNodeLike;
|
|
67
|
+
input: GainNodeLike;
|
|
68
|
+
output: GainNodeLike;
|
|
69
|
+
}
|
|
70
|
+
export declare class AudioContextController {
|
|
71
|
+
private readonly factory;
|
|
72
|
+
private context?;
|
|
73
|
+
constructor(factory: AudioContextFactory);
|
|
74
|
+
getContext(): AudioContextLike;
|
|
75
|
+
resume(): Promise<void>;
|
|
76
|
+
getState(): AudioContextLike['state'];
|
|
77
|
+
}
|
|
78
|
+
export declare function createAudioGraph(controller: AudioContextController): AudioGraph;
|
|
79
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/audio/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface AudioElementLike {
|
|
2
|
+
src: string;
|
|
3
|
+
loop: boolean;
|
|
4
|
+
volume: number;
|
|
5
|
+
currentTime: number;
|
|
6
|
+
paused: boolean;
|
|
7
|
+
ended: boolean;
|
|
8
|
+
play(): Promise<void>;
|
|
9
|
+
pause(): void;
|
|
10
|
+
load(): void;
|
|
11
|
+
}
|
|
12
|
+
export type AudioElementFactory = () => AudioElementLike;
|
|
13
|
+
export type MusicSourceResolver = (path: string) => Promise<string>;
|
|
14
|
+
export interface MusicSystemOptions {
|
|
15
|
+
createElement: AudioElementFactory;
|
|
16
|
+
resolveSource?: MusicSourceResolver;
|
|
17
|
+
volume?: number;
|
|
18
|
+
crossfadeDuration?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface MusicState {
|
|
21
|
+
readonly track?: string;
|
|
22
|
+
readonly paused: boolean;
|
|
23
|
+
readonly playing: boolean;
|
|
24
|
+
readonly volume: number;
|
|
25
|
+
}
|
|
26
|
+
export declare class MusicSystem {
|
|
27
|
+
private readonly createElement;
|
|
28
|
+
private readonly resolveSource;
|
|
29
|
+
private readonly crossfadeDuration;
|
|
30
|
+
private currentElement?;
|
|
31
|
+
private fadingElement?;
|
|
32
|
+
private track?;
|
|
33
|
+
private volume;
|
|
34
|
+
private fadeInterval?;
|
|
35
|
+
constructor(options: MusicSystemOptions);
|
|
36
|
+
playTrack(trackNum: number): Promise<void>;
|
|
37
|
+
play(track: string, { loop, restart }?: {
|
|
38
|
+
loop?: boolean;
|
|
39
|
+
restart?: boolean;
|
|
40
|
+
}): Promise<void>;
|
|
41
|
+
pause(): void;
|
|
42
|
+
resume(): Promise<void>;
|
|
43
|
+
stop(): void;
|
|
44
|
+
setVolume(volume: number): void;
|
|
45
|
+
getState(): MusicState;
|
|
46
|
+
private startCrossfade;
|
|
47
|
+
private cancelFade;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=music.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"music.d.ts","sourceRoot":"","sources":["../../../src/audio/music.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,gBAAgB,CAAC;AACzD,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C,OAAO,CAAC,cAAc,CAAC,CAAmB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAmB;IAEzC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,YAAY,CAAC,CAAM;gBAEf,OAAO,EAAE,kBAAkB;IAOjC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAW,EAAE,OAAe,EAAE,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoEtH,KAAK,IAAI,IAAI;IAWP,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,IAAI,IAAI,IAAI;IAcZ,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO/B,QAAQ,IAAI,UAAU;IAMtB,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,UAAU;CAMnB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OcclusionResolver } from './system.js';
|
|
2
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
3
|
+
export type TraceFn = (start: Vec3, end: Vec3, mins: Vec3 | undefined, maxs: Vec3 | undefined) => {
|
|
4
|
+
fraction: number;
|
|
5
|
+
allsolid?: boolean;
|
|
6
|
+
startsolid?: boolean;
|
|
7
|
+
contents?: number;
|
|
8
|
+
};
|
|
9
|
+
export declare class AudioOcclusion {
|
|
10
|
+
private readonly trace;
|
|
11
|
+
constructor(trace: TraceFn);
|
|
12
|
+
resolve: OcclusionResolver;
|
|
13
|
+
}
|
|
14
|
+
export declare function createOcclusionResolver(trace: TraceFn): OcclusionResolver;
|
|
15
|
+
//# sourceMappingURL=occlusion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"occlusion.d.ts","sourceRoot":"","sources":["../../../src/audio/occlusion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAkC,MAAM,aAAa,CAAC;AACrF,OAAO,EAA4B,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAIvE,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,KAAK;IAC9F,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,cAAc;IACX,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,OAAO;IAE3C,OAAO,EAAE,iBAAiB,CAyCxB;CACL;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAGzE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { VirtualFileSystem } from '../assets/vfs.js';
|
|
2
|
+
import type { AudioBufferLike, AudioContextLike } from './context.js';
|
|
3
|
+
import { AudioContextController } from './context.js';
|
|
4
|
+
import { SoundRegistry } from './registry.js';
|
|
5
|
+
export interface SoundPrecacheOptions {
|
|
6
|
+
vfs: Pick<VirtualFileSystem, 'readFile' | 'stat'>;
|
|
7
|
+
registry: SoundRegistry;
|
|
8
|
+
context: AudioContextController;
|
|
9
|
+
decodeAudio?: (context: AudioContextLike, data: ArrayBuffer) => Promise<AudioBufferLike>;
|
|
10
|
+
soundRoot?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SoundPrecacheReport {
|
|
13
|
+
loaded: string[];
|
|
14
|
+
skipped: string[];
|
|
15
|
+
missing: string[];
|
|
16
|
+
errors: Record<string, Error>;
|
|
17
|
+
}
|
|
18
|
+
export declare class SoundPrecache {
|
|
19
|
+
private readonly vfs;
|
|
20
|
+
private readonly registry;
|
|
21
|
+
private readonly contextController;
|
|
22
|
+
private readonly decodeAudio;
|
|
23
|
+
private readonly soundRoot;
|
|
24
|
+
constructor(options: SoundPrecacheOptions);
|
|
25
|
+
precache(paths: string[]): Promise<SoundPrecacheReport>;
|
|
26
|
+
private normalize;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=precache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"precache.d.ts","sourceRoot":"","sources":["../../../src/audio/precache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;IAClD,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,sBAAsB,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;IAC/E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,oBAAoB;IAenC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiC7D,OAAO,CAAC,SAAS;CAOlB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ConfigStringRegistry } from '../configstrings.js';
|
|
2
|
+
import type { AudioBufferLike } from './context.js';
|
|
3
|
+
export declare class SoundRegistry {
|
|
4
|
+
private readonly configStrings;
|
|
5
|
+
private readonly buffers;
|
|
6
|
+
constructor(configStrings?: ConfigStringRegistry);
|
|
7
|
+
registerName(name: string): number;
|
|
8
|
+
register(name: string, buffer: AudioBufferLike): number;
|
|
9
|
+
find(name: string): number | undefined;
|
|
10
|
+
get(index: number): AudioBufferLike | undefined;
|
|
11
|
+
has(index: number): boolean;
|
|
12
|
+
getName(index: number): string | undefined;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/audio/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,qBAAa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAEjC,aAAa,uBAA6B;IAEvE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIlC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM;IAMvD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI/C,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG3C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AudioBufferLike, ReverbNode } from './context.js';
|
|
2
|
+
export interface ReverbPreset {
|
|
3
|
+
name: string;
|
|
4
|
+
buffer: AudioBufferLike;
|
|
5
|
+
gain?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class ReverbSystem {
|
|
8
|
+
private activePreset;
|
|
9
|
+
private readonly node;
|
|
10
|
+
private enabled;
|
|
11
|
+
constructor(node: ReverbNode);
|
|
12
|
+
setPreset(preset: ReverbPreset | null): void;
|
|
13
|
+
setEnabled(enabled: boolean): void;
|
|
14
|
+
getOutputNode(): import("./context.js").GainNodeLike;
|
|
15
|
+
getInputNode(): import("./context.js").GainNodeLike;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=reverb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reverb.d.ts","sourceRoot":"","sources":["../../../src/audio/reverb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,OAAO,CAAQ;gBAEX,IAAI,EAAE,UAAU;IAO5B,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAcrC,UAAU,CAAC,OAAO,EAAE,OAAO;IAS3B,aAAa;IAIb,YAAY;CAGb"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BspMap, BspLeaf, Vec3 } from '../assets/bsp.js';
|
|
2
|
+
export declare function findLeafForPoint(map: BspMap, point: Vec3): BspLeaf | undefined;
|
|
3
|
+
export declare function estimateRoomSize(map: BspMap, point: Vec3): number;
|
|
4
|
+
export declare function getReverbPresetForVolume(volume: number): string;
|
|
5
|
+
//# sourceMappingURL=room.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room.d.ts","sourceRoot":"","sources":["../../../src/audio/room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS,CAuC9E;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAoDjE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAc/D"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { type Vec3 } from '@quake2ts/shared';
|
|
2
|
+
import { AudioContextController, type AudioBufferSourceNodeLike, type BiquadFilterNodeLike, type GainNodeLike, type PannerNodeLike } from './context.js';
|
|
3
|
+
import { SoundRegistry } from './registry.js';
|
|
4
|
+
import { type ChannelState } from './channels.js';
|
|
5
|
+
import { ReverbSystem, type ReverbPreset } from './reverb.js';
|
|
6
|
+
export interface SoundRequest {
|
|
7
|
+
entity: number;
|
|
8
|
+
channel: number;
|
|
9
|
+
soundIndex: number;
|
|
10
|
+
volume: number;
|
|
11
|
+
attenuation: number;
|
|
12
|
+
origin?: Vec3;
|
|
13
|
+
timeOffsetMs?: number;
|
|
14
|
+
looping?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface AudioSystemOptions {
|
|
17
|
+
context: AudioContextController;
|
|
18
|
+
registry: SoundRegistry;
|
|
19
|
+
playerEntity?: number;
|
|
20
|
+
listener?: ListenerState;
|
|
21
|
+
sfxVolume?: number;
|
|
22
|
+
masterVolume?: number;
|
|
23
|
+
resolveOcclusion?: OcclusionResolver;
|
|
24
|
+
}
|
|
25
|
+
export interface ActiveSound {
|
|
26
|
+
channelIndex: number;
|
|
27
|
+
entnum: number;
|
|
28
|
+
entchannel: number;
|
|
29
|
+
endTimeMs: number;
|
|
30
|
+
source: AudioBufferSourceNodeLike;
|
|
31
|
+
panner: PannerNodeLike;
|
|
32
|
+
gain: GainNodeLike;
|
|
33
|
+
baseGain: number;
|
|
34
|
+
origin: Vec3;
|
|
35
|
+
attenuation: number;
|
|
36
|
+
occlusion?: OcclusionState;
|
|
37
|
+
}
|
|
38
|
+
interface OcclusionState {
|
|
39
|
+
scale: number;
|
|
40
|
+
lowpassHz?: number;
|
|
41
|
+
filter?: BiquadFilterNodeLike;
|
|
42
|
+
}
|
|
43
|
+
export interface OcclusionResult {
|
|
44
|
+
gainScale?: number;
|
|
45
|
+
lowpassHz?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface ListenerState {
|
|
48
|
+
origin: Vec3;
|
|
49
|
+
right: Vec3;
|
|
50
|
+
mono?: boolean;
|
|
51
|
+
playerEntity?: number;
|
|
52
|
+
}
|
|
53
|
+
export type OcclusionResolver = (listener: ListenerState, source: Vec3, attenuation: number) => OcclusionResult | undefined;
|
|
54
|
+
export interface AudioDiagnostics {
|
|
55
|
+
activeChannels: number;
|
|
56
|
+
masterVolume: number;
|
|
57
|
+
sfxVolume: number;
|
|
58
|
+
channels: ChannelState[];
|
|
59
|
+
activeSounds: Array<{
|
|
60
|
+
entnum: number;
|
|
61
|
+
entchannel: number;
|
|
62
|
+
channelIndex: number;
|
|
63
|
+
origin: Vec3;
|
|
64
|
+
gain: number;
|
|
65
|
+
baseGain: number;
|
|
66
|
+
attenuation: number;
|
|
67
|
+
maxDistance?: number;
|
|
68
|
+
distanceModel?: string;
|
|
69
|
+
occlusion?: {
|
|
70
|
+
scale: number;
|
|
71
|
+
lowpassHz?: number;
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
75
|
+
export declare class AudioSystem {
|
|
76
|
+
private readonly channels;
|
|
77
|
+
private readonly registry;
|
|
78
|
+
private readonly contextController;
|
|
79
|
+
private readonly graph;
|
|
80
|
+
private readonly playerEntity?;
|
|
81
|
+
private readonly activeSources;
|
|
82
|
+
private readonly resolveOcclusion?;
|
|
83
|
+
private listener;
|
|
84
|
+
private sfxVolume;
|
|
85
|
+
private masterVolume;
|
|
86
|
+
private playbackRate;
|
|
87
|
+
readonly reverb: ReverbSystem | undefined;
|
|
88
|
+
constructor(options: AudioSystemOptions);
|
|
89
|
+
setListener(listener: ListenerState): void;
|
|
90
|
+
setMasterVolume(volume: number): void;
|
|
91
|
+
setSfxVolume(volume: number): void;
|
|
92
|
+
setPlaybackRate(rate: number): void;
|
|
93
|
+
ensureRunning(): Promise<void>;
|
|
94
|
+
setReverbPreset(preset: ReverbPreset | null): void;
|
|
95
|
+
play(request: SoundRequest): ActiveSound | undefined;
|
|
96
|
+
stop(channelIndex: number): void;
|
|
97
|
+
stopEntitySounds(entnum: number): void;
|
|
98
|
+
updateEntityPosition(entnum: number, origin: Vec3): void;
|
|
99
|
+
positionedSound(origin: Vec3, soundIndex: number, volume: number, attenuation: number): ActiveSound | undefined;
|
|
100
|
+
ambientSound(origin: Vec3, soundIndex: number, volume: number): ActiveSound | undefined;
|
|
101
|
+
getChannelState(index: number): ChannelState | undefined;
|
|
102
|
+
getDiagnostics(): AudioDiagnostics;
|
|
103
|
+
setUnderwater(enabled: boolean, cutoffHz?: number): void;
|
|
104
|
+
private createPanner;
|
|
105
|
+
private configurePanner;
|
|
106
|
+
private applyOriginToPanner;
|
|
107
|
+
private createOcclusionFilter;
|
|
108
|
+
private updateSourceGain;
|
|
109
|
+
private applyOcclusion;
|
|
110
|
+
}
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/audio/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Basic CLI for Demo Optimizer.
|
|
3
|
+
* Usage:
|
|
4
|
+
* analyze <demo.dm2>
|
|
5
|
+
* extract <demo.dm2> <start> <duration> -o output.dm2
|
|
6
|
+
* optimize <demo.dm2> <pak0.pak> [pak1.pak...] -d <duration> -o <output_dir>
|
|
7
|
+
* find-best <demo.dm2> --duration <duration> --top <N>
|
|
8
|
+
*/
|
|
9
|
+
export declare function runCli(args: string[]): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=demoOptimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demoOptimizer.d.ts","sourceRoot":"","sources":["../../../src/cli/demoOptimizer.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,iBA0B1C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type CommandCallback = (args: string[]) => void;
|
|
2
|
+
export type AutocompleteProvider = () => string[];
|
|
3
|
+
export declare class Command {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly description?: string;
|
|
6
|
+
readonly callback: CommandCallback;
|
|
7
|
+
constructor(name: string, callback: CommandCallback, description?: string);
|
|
8
|
+
execute(args: string[]): void;
|
|
9
|
+
}
|
|
10
|
+
export declare class CommandRegistry {
|
|
11
|
+
private readonly commands;
|
|
12
|
+
private readonly history;
|
|
13
|
+
private readonly historyLimit;
|
|
14
|
+
private readonly autocompleteProviders;
|
|
15
|
+
onConsoleOutput?: (message: string) => void;
|
|
16
|
+
register(name: string, callback: CommandCallback, description?: string): Command;
|
|
17
|
+
registerCommand(name: string, callback: CommandCallback): void;
|
|
18
|
+
registerAutocompleteProvider(provider: AutocompleteProvider): void;
|
|
19
|
+
get(name: string): Command | undefined;
|
|
20
|
+
execute(commandString: string): boolean;
|
|
21
|
+
executeCommand(cmd: string): void;
|
|
22
|
+
getHistory(): string[];
|
|
23
|
+
getSuggestions(prefix: string): string[];
|
|
24
|
+
private tokenize;
|
|
25
|
+
list(): Command[];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,MAAM,MAAM,EAAE,CAAC;AAElD,qBAAa,OAAO;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;gBAEvB,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM;IAMzE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;CAG9B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA8B;IAC7D,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAMhF,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI9D,4BAA4B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIlE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAgCvC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIjC,UAAU,IAAI,MAAM,EAAE;IAItB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAuBxC,OAAO,CAAC,QAAQ;IAyBhB,IAAI,IAAI,OAAO,EAAE;CAGlB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type ConfigStringEntry = Readonly<{
|
|
2
|
+
index: number;
|
|
3
|
+
value: string;
|
|
4
|
+
}>;
|
|
5
|
+
/**
|
|
6
|
+
* Minimal configstring/config index registry that mirrors the rerelease asset
|
|
7
|
+
* indexing routines (`modelindex`, `soundindex`, etc.). The registry maintains
|
|
8
|
+
* deterministic ordering within each configstring range and enforces the same
|
|
9
|
+
* length/slot limits as the C++ helpers.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ConfigStringRegistry {
|
|
12
|
+
private readonly values;
|
|
13
|
+
private modelCursor;
|
|
14
|
+
private soundCursor;
|
|
15
|
+
private imageCursor;
|
|
16
|
+
private lightCursor;
|
|
17
|
+
private shadowLightCursor;
|
|
18
|
+
private itemCursor;
|
|
19
|
+
private playerSkinCursor;
|
|
20
|
+
private generalCursor;
|
|
21
|
+
set(index: number, value: string): number;
|
|
22
|
+
get(index: number): string | undefined;
|
|
23
|
+
getName(index: number): string | undefined;
|
|
24
|
+
getAll(): string[];
|
|
25
|
+
modelIndex(path: string): number;
|
|
26
|
+
soundIndex(path: string): number;
|
|
27
|
+
findSoundIndex(path: string): number | undefined;
|
|
28
|
+
imageIndex(path: string): number;
|
|
29
|
+
lightIndex(definition: string): number;
|
|
30
|
+
shadowLightIndex(definition: string): number;
|
|
31
|
+
itemIndex(name: string): number;
|
|
32
|
+
playerSkinIndex(name: string): number;
|
|
33
|
+
generalIndex(value: string): number;
|
|
34
|
+
private register;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=configstrings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configstrings.d.ts","sourceRoot":"","sources":["../../src/configstrings.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAiB3E;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,aAAa,CAA6B;IAElD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAOzC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1C,MAAM,IAAI,MAAM,EAAE;IAQlB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAShD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAItC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC,OAAO,CAAC,QAAQ;CAgCjB"}
|