@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.
Files changed (276) hide show
  1. package/dist/browser/index.global.js +617 -0
  2. package/dist/browser/index.global.js.map +1 -0
  3. package/dist/cjs/index.cjs +17604 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/esm/index.js +17373 -0
  6. package/dist/esm/index.js.map +1 -0
  7. package/dist/tsconfig.tsbuildinfo +1 -0
  8. package/dist/types/assets/animation.d.ts +33 -0
  9. package/dist/types/assets/animation.d.ts.map +1 -0
  10. package/dist/types/assets/audio.d.ts +27 -0
  11. package/dist/types/assets/audio.d.ts.map +1 -0
  12. package/dist/types/assets/audio.worker.d.ts +2 -0
  13. package/dist/types/assets/audio.worker.d.ts.map +1 -0
  14. package/dist/types/assets/browserIngestion.d.ts +7 -0
  15. package/dist/types/assets/browserIngestion.d.ts.map +1 -0
  16. package/dist/types/assets/bsp.d.ts +197 -0
  17. package/dist/types/assets/bsp.d.ts.map +1 -0
  18. package/dist/types/assets/bsp.worker.d.ts +2 -0
  19. package/dist/types/assets/bsp.worker.d.ts.map +1 -0
  20. package/dist/types/assets/cache.d.ts +26 -0
  21. package/dist/types/assets/cache.d.ts.map +1 -0
  22. package/dist/types/assets/crossReference.d.ts +35 -0
  23. package/dist/types/assets/crossReference.d.ts.map +1 -0
  24. package/dist/types/assets/ent.d.ts +31 -0
  25. package/dist/types/assets/ent.d.ts.map +1 -0
  26. package/dist/types/assets/fileType.d.ts +18 -0
  27. package/dist/types/assets/fileType.d.ts.map +1 -0
  28. package/dist/types/assets/headlessLoader.d.ts +11 -0
  29. package/dist/types/assets/headlessLoader.d.ts.map +1 -0
  30. package/dist/types/assets/index.d.ts +30 -0
  31. package/dist/types/assets/index.d.ts.map +1 -0
  32. package/dist/types/assets/ingestion.d.ts +62 -0
  33. package/dist/types/assets/ingestion.d.ts.map +1 -0
  34. package/dist/types/assets/interactionGraph.d.ts +21 -0
  35. package/dist/types/assets/interactionGraph.d.ts.map +1 -0
  36. package/dist/types/assets/manager.d.ts +97 -0
  37. package/dist/types/assets/manager.d.ts.map +1 -0
  38. package/dist/types/assets/mapStatistics.d.ts +20 -0
  39. package/dist/types/assets/mapStatistics.d.ts.map +1 -0
  40. package/dist/types/assets/md2.d.ts +82 -0
  41. package/dist/types/assets/md2.d.ts.map +1 -0
  42. package/dist/types/assets/md3.d.ts +72 -0
  43. package/dist/types/assets/md3.d.ts.map +1 -0
  44. package/dist/types/assets/ogg.d.ts +12 -0
  45. package/dist/types/assets/ogg.d.ts.map +1 -0
  46. package/dist/types/assets/pak.d.ts +32 -0
  47. package/dist/types/assets/pak.d.ts.map +1 -0
  48. package/dist/types/assets/pakIndexStore.d.ts +19 -0
  49. package/dist/types/assets/pakIndexStore.d.ts.map +1 -0
  50. package/dist/types/assets/pakValidation.d.ts +28 -0
  51. package/dist/types/assets/pakValidation.d.ts.map +1 -0
  52. package/dist/types/assets/pakWriter.d.ts +27 -0
  53. package/dist/types/assets/pakWriter.d.ts.map +1 -0
  54. package/dist/types/assets/pcx.d.ts +13 -0
  55. package/dist/types/assets/pcx.d.ts.map +1 -0
  56. package/dist/types/assets/preview.d.ts +15 -0
  57. package/dist/types/assets/preview.d.ts.map +1 -0
  58. package/dist/types/assets/resourceTracker.d.ts +33 -0
  59. package/dist/types/assets/resourceTracker.d.ts.map +1 -0
  60. package/dist/types/assets/sprite.d.ts +23 -0
  61. package/dist/types/assets/sprite.d.ts.map +1 -0
  62. package/dist/types/assets/streamer.d.ts +17 -0
  63. package/dist/types/assets/streamer.d.ts.map +1 -0
  64. package/dist/types/assets/streamingPak.d.ts +28 -0
  65. package/dist/types/assets/streamingPak.d.ts.map +1 -0
  66. package/dist/types/assets/texture.d.ts +37 -0
  67. package/dist/types/assets/texture.d.ts.map +1 -0
  68. package/dist/types/assets/tga.d.ts +15 -0
  69. package/dist/types/assets/tga.d.ts.map +1 -0
  70. package/dist/types/assets/vfs.d.ts +57 -0
  71. package/dist/types/assets/vfs.d.ts.map +1 -0
  72. package/dist/types/assets/visibilityAnalyzer.d.ts +28 -0
  73. package/dist/types/assets/visibilityAnalyzer.d.ts.map +1 -0
  74. package/dist/types/assets/wal.d.ts +21 -0
  75. package/dist/types/assets/wal.d.ts.map +1 -0
  76. package/dist/types/assets/wav.d.ts +11 -0
  77. package/dist/types/assets/wav.d.ts.map +1 -0
  78. package/dist/types/audio/ambient.d.ts +22 -0
  79. package/dist/types/audio/ambient.d.ts.map +1 -0
  80. package/dist/types/audio/api.d.ts +37 -0
  81. package/dist/types/audio/api.d.ts.map +1 -0
  82. package/dist/types/audio/channels.d.ts +15 -0
  83. package/dist/types/audio/channels.d.ts.map +1 -0
  84. package/dist/types/audio/constants.d.ts +2 -0
  85. package/dist/types/audio/constants.d.ts.map +1 -0
  86. package/dist/types/audio/context.d.ts +79 -0
  87. package/dist/types/audio/context.d.ts.map +1 -0
  88. package/dist/types/audio/music.d.ts +49 -0
  89. package/dist/types/audio/music.d.ts.map +1 -0
  90. package/dist/types/audio/occlusion.d.ts +15 -0
  91. package/dist/types/audio/occlusion.d.ts.map +1 -0
  92. package/dist/types/audio/precache.d.ts +28 -0
  93. package/dist/types/audio/precache.d.ts.map +1 -0
  94. package/dist/types/audio/registry.d.ts +14 -0
  95. package/dist/types/audio/registry.d.ts.map +1 -0
  96. package/dist/types/audio/reverb.d.ts +17 -0
  97. package/dist/types/audio/reverb.d.ts.map +1 -0
  98. package/dist/types/audio/room.d.ts +5 -0
  99. package/dist/types/audio/room.d.ts.map +1 -0
  100. package/dist/types/audio/system.d.ts +112 -0
  101. package/dist/types/audio/system.d.ts.map +1 -0
  102. package/dist/types/cli/demoOptimizer.d.ts +10 -0
  103. package/dist/types/cli/demoOptimizer.d.ts.map +1 -0
  104. package/dist/types/commands.d.ts +27 -0
  105. package/dist/types/commands.d.ts.map +1 -0
  106. package/dist/types/configstrings.d.ts +36 -0
  107. package/dist/types/configstrings.d.ts.map +1 -0
  108. package/dist/types/cvars.d.ts +58 -0
  109. package/dist/types/cvars.d.ts.map +1 -0
  110. package/dist/types/demo/analysis.d.ts +83 -0
  111. package/dist/types/demo/analysis.d.ts.map +1 -0
  112. package/dist/types/demo/analyzer.d.ts +33 -0
  113. package/dist/types/demo/analyzer.d.ts.map +1 -0
  114. package/dist/types/demo/api.d.ts +40 -0
  115. package/dist/types/demo/api.d.ts.map +1 -0
  116. package/dist/types/demo/asyncParser.d.ts +15 -0
  117. package/dist/types/demo/asyncParser.d.ts.map +1 -0
  118. package/dist/types/demo/camera.d.ts +17 -0
  119. package/dist/types/demo/camera.d.ts.map +1 -0
  120. package/dist/types/demo/clipper.d.ts +34 -0
  121. package/dist/types/demo/clipper.d.ts.map +1 -0
  122. package/dist/types/demo/delta.d.ts +3 -0
  123. package/dist/types/demo/delta.d.ts.map +1 -0
  124. package/dist/types/demo/demo.worker.d.ts +126 -0
  125. package/dist/types/demo/demo.worker.d.ts.map +1 -0
  126. package/dist/types/demo/demoReader.d.ts +62 -0
  127. package/dist/types/demo/demoReader.d.ts.map +1 -0
  128. package/dist/types/demo/demoRecorder.d.ts +15 -0
  129. package/dist/types/demo/demoRecorder.d.ts.map +1 -0
  130. package/dist/types/demo/demoStream.d.ts +39 -0
  131. package/dist/types/demo/demoStream.d.ts.map +1 -0
  132. package/dist/types/demo/demoWriter.d.ts +8 -0
  133. package/dist/types/demo/demoWriter.d.ts.map +1 -0
  134. package/dist/types/demo/index.d.ts +6 -0
  135. package/dist/types/demo/index.d.ts.map +1 -0
  136. package/dist/types/demo/message.d.ts +178 -0
  137. package/dist/types/demo/message.d.ts.map +1 -0
  138. package/dist/types/demo/optimalClipFinder.d.ts +35 -0
  139. package/dist/types/demo/optimalClipFinder.d.ts.map +1 -0
  140. package/dist/types/demo/packager.d.ts +46 -0
  141. package/dist/types/demo/packager.d.ts.map +1 -0
  142. package/dist/types/demo/parser.d.ts +222 -0
  143. package/dist/types/demo/parser.d.ts.map +1 -0
  144. package/dist/types/demo/playback.d.ts +135 -0
  145. package/dist/types/demo/playback.d.ts.map +1 -0
  146. package/dist/types/demo/reader.d.ts +15 -0
  147. package/dist/types/demo/reader.d.ts.map +1 -0
  148. package/dist/types/demo/recorder.d.ts +14 -0
  149. package/dist/types/demo/recorder.d.ts.map +1 -0
  150. package/dist/types/demo/types.d.ts +37 -0
  151. package/dist/types/demo/types.d.ts.map +1 -0
  152. package/dist/types/demo/validator.d.ts +13 -0
  153. package/dist/types/demo/validator.d.ts.map +1 -0
  154. package/dist/types/demo/worldStateOptimizer.d.ts +13 -0
  155. package/dist/types/demo/worldStateOptimizer.d.ts.map +1 -0
  156. package/dist/types/demo/writer.d.ts +28 -0
  157. package/dist/types/demo/writer.d.ts.map +1 -0
  158. package/dist/types/editor/bsp-inspector.d.ts +39 -0
  159. package/dist/types/editor/bsp-inspector.d.ts.map +1 -0
  160. package/dist/types/editor/ent.d.ts +21 -0
  161. package/dist/types/editor/ent.d.ts.map +1 -0
  162. package/dist/types/host.d.ts +52 -0
  163. package/dist/types/host.d.ts.map +1 -0
  164. package/dist/types/index.d.ts +104 -0
  165. package/dist/types/index.d.ts.map +1 -0
  166. package/dist/types/loop.d.ts +40 -0
  167. package/dist/types/loop.d.ts.map +1 -0
  168. package/dist/types/network/clientConnection.d.ts +139 -0
  169. package/dist/types/network/clientConnection.d.ts.map +1 -0
  170. package/dist/types/render/__mocks__/frame.d.ts +31 -0
  171. package/dist/types/render/__mocks__/frame.d.ts.map +1 -0
  172. package/dist/types/render/bloom.d.ts +19 -0
  173. package/dist/types/render/bloom.d.ts.map +1 -0
  174. package/dist/types/render/bsp/generator.d.ts +25 -0
  175. package/dist/types/render/bsp/generator.d.ts.map +1 -0
  176. package/dist/types/render/bsp/geometry.d.ts +37 -0
  177. package/dist/types/render/bsp/geometry.d.ts.map +1 -0
  178. package/dist/types/render/bsp/renderer.d.ts +12 -0
  179. package/dist/types/render/bsp/renderer.d.ts.map +1 -0
  180. package/dist/types/render/bsp/surface.d.ts +4 -0
  181. package/dist/types/render/bsp/surface.d.ts.map +1 -0
  182. package/dist/types/render/bsp.d.ts +66 -0
  183. package/dist/types/render/bsp.d.ts.map +1 -0
  184. package/dist/types/render/bspPipeline.d.ts +78 -0
  185. package/dist/types/render/bspPipeline.d.ts.map +1 -0
  186. package/dist/types/render/bspTraversal.d.ts +13 -0
  187. package/dist/types/render/bspTraversal.d.ts.map +1 -0
  188. package/dist/types/render/camera.d.ts +54 -0
  189. package/dist/types/render/camera.d.ts.map +1 -0
  190. package/dist/types/render/cameraController.d.ts +28 -0
  191. package/dist/types/render/cameraController.d.ts.map +1 -0
  192. package/dist/types/render/collisionVis.d.ts +54 -0
  193. package/dist/types/render/collisionVis.d.ts.map +1 -0
  194. package/dist/types/render/colors.d.ts +6 -0
  195. package/dist/types/render/colors.d.ts.map +1 -0
  196. package/dist/types/render/context.d.ts +36 -0
  197. package/dist/types/render/context.d.ts.map +1 -0
  198. package/dist/types/render/culling.d.ts +12 -0
  199. package/dist/types/render/culling.d.ts.map +1 -0
  200. package/dist/types/render/debug.d.ts +36 -0
  201. package/dist/types/render/debug.d.ts.map +1 -0
  202. package/dist/types/render/debugMode.d.ts +10 -0
  203. package/dist/types/render/debugMode.d.ts.map +1 -0
  204. package/dist/types/render/dlight.d.ts +43 -0
  205. package/dist/types/render/dlight.d.ts.map +1 -0
  206. package/dist/types/render/frame.d.ts +78 -0
  207. package/dist/types/render/frame.d.ts.map +1 -0
  208. package/dist/types/render/geometry.d.ts +2 -0
  209. package/dist/types/render/geometry.d.ts.map +1 -0
  210. package/dist/types/render/gizmo.d.ts +32 -0
  211. package/dist/types/render/gizmo.d.ts.map +1 -0
  212. package/dist/types/render/gpuProfiler.d.ts +59 -0
  213. package/dist/types/render/gpuProfiler.d.ts.map +1 -0
  214. package/dist/types/render/instancing.d.ts +12 -0
  215. package/dist/types/render/instancing.d.ts.map +1 -0
  216. package/dist/types/render/interface.d.ts +50 -0
  217. package/dist/types/render/interface.d.ts.map +1 -0
  218. package/dist/types/render/light.d.ts +10 -0
  219. package/dist/types/render/light.d.ts.map +1 -0
  220. package/dist/types/render/lightCulling.d.ts +17 -0
  221. package/dist/types/render/lightCulling.d.ts.map +1 -0
  222. package/dist/types/render/lightStyles.d.ts +10 -0
  223. package/dist/types/render/lightStyles.d.ts.map +1 -0
  224. package/dist/types/render/materialLoader.d.ts +5 -0
  225. package/dist/types/render/materialLoader.d.ts.map +1 -0
  226. package/dist/types/render/materials.d.ts +39 -0
  227. package/dist/types/render/materials.d.ts.map +1 -0
  228. package/dist/types/render/md2Pipeline.d.ts +74 -0
  229. package/dist/types/render/md2Pipeline.d.ts.map +1 -0
  230. package/dist/types/render/md3Pipeline.d.ts +94 -0
  231. package/dist/types/render/md3Pipeline.d.ts.map +1 -0
  232. package/dist/types/render/options.d.ts +9 -0
  233. package/dist/types/render/options.d.ts.map +1 -0
  234. package/dist/types/render/particleSystem.d.ts +125 -0
  235. package/dist/types/render/particleSystem.d.ts.map +1 -0
  236. package/dist/types/render/postprocessing/pipeline.d.ts +13 -0
  237. package/dist/types/render/postprocessing/pipeline.d.ts.map +1 -0
  238. package/dist/types/render/renderer.d.ts +8 -0
  239. package/dist/types/render/renderer.d.ts.map +1 -0
  240. package/dist/types/render/resources.d.ts +69 -0
  241. package/dist/types/render/resources.d.ts.map +1 -0
  242. package/dist/types/render/scene.d.ts +31 -0
  243. package/dist/types/render/scene.d.ts.map +1 -0
  244. package/dist/types/render/shaderProgram.d.ts +19 -0
  245. package/dist/types/render/shaderProgram.d.ts.map +1 -0
  246. package/dist/types/render/skybox.d.ts +28 -0
  247. package/dist/types/render/skybox.d.ts.map +1 -0
  248. package/dist/types/render/sprite.d.ts +21 -0
  249. package/dist/types/render/sprite.d.ts.map +1 -0
  250. package/dist/types/render/types.d.ts +29 -0
  251. package/dist/types/render/types.d.ts.map +1 -0
  252. package/dist/types/render/webgpu/constants.d.ts +29 -0
  253. package/dist/types/render/webgpu/constants.d.ts.map +1 -0
  254. package/dist/types/render/webgpu/context.d.ts +41 -0
  255. package/dist/types/render/webgpu/context.d.ts.map +1 -0
  256. package/dist/types/render/webgpu/frame.d.ts +58 -0
  257. package/dist/types/render/webgpu/frame.d.ts.map +1 -0
  258. package/dist/types/render/webgpu/headless.d.ts +9 -0
  259. package/dist/types/render/webgpu/headless.d.ts.map +1 -0
  260. package/dist/types/render/webgpu/pipelines/sprite.d.ts +31 -0
  261. package/dist/types/render/webgpu/pipelines/sprite.d.ts.map +1 -0
  262. package/dist/types/render/webgpu/renderer.d.ts +30 -0
  263. package/dist/types/render/webgpu/renderer.d.ts.map +1 -0
  264. package/dist/types/render/webgpu/resources.d.ts +240 -0
  265. package/dist/types/render/webgpu/resources.d.ts.map +1 -0
  266. package/dist/types/render/webgpu/shaders/mipmapShader.d.ts +2 -0
  267. package/dist/types/render/webgpu/shaders/mipmapShader.d.ts.map +1 -0
  268. package/dist/types/render/webgpu/shaders/spriteShader.d.ts +2 -0
  269. package/dist/types/render/webgpu/shaders/spriteShader.d.ts.map +1 -0
  270. package/dist/types/runtime.d.ts +19 -0
  271. package/dist/types/runtime.d.ts.map +1 -0
  272. package/dist/types/stream/streamingBuffer.d.ts +102 -0
  273. package/dist/types/stream/streamingBuffer.d.ts.map +1 -0
  274. package/dist/types/tools/lightmapExport.d.ts +17 -0
  275. package/dist/types/tools/lightmapExport.d.ts.map +1 -0
  276. 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,2 @@
1
+ export { MAX_SOUND_CHANNELS, SoundChannel, ATTN_LOOP_NONE, ATTN_NONE, ATTN_NORM, ATTN_IDLE, ATTN_STATIC, SOUND_FULLVOLUME, SOUND_LOOP_ATTENUATE, attenuationToDistanceMultiplier, calculateMaxAudibleDistance } from '@quake2ts/shared';
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -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"}