@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,58 @@
1
+ import { CvarFlags } from '@quake2ts/shared';
2
+ export type CvarChangeHandler = (cvar: Cvar, previousValue: string) => void;
3
+ export declare class Cvar {
4
+ readonly name: string;
5
+ readonly defaultValue: string;
6
+ readonly description?: string;
7
+ readonly flags: CvarFlags;
8
+ private _value;
9
+ private latched?;
10
+ private onChange?;
11
+ modifiedCount: number;
12
+ constructor({ name, defaultValue, description, flags, onChange, }: {
13
+ name: string;
14
+ defaultValue: string;
15
+ description?: string;
16
+ flags?: CvarFlags;
17
+ onChange?: CvarChangeHandler;
18
+ });
19
+ get string(): string;
20
+ getString(): string;
21
+ get number(): number;
22
+ getFloat(): number;
23
+ get integer(): number;
24
+ getInt(): number;
25
+ get boolean(): boolean;
26
+ getBoolean(): boolean;
27
+ set(value: string): void;
28
+ reset(): void;
29
+ applyLatched(): boolean;
30
+ private apply;
31
+ }
32
+ export interface CvarInfo {
33
+ name: string;
34
+ value: string;
35
+ defaultValue: string;
36
+ flags: CvarFlags;
37
+ description?: string;
38
+ }
39
+ export declare class CvarRegistry {
40
+ private readonly cvars;
41
+ onCvarChange?: (name: string, value: string) => void;
42
+ register(def: {
43
+ name: string;
44
+ defaultValue: string;
45
+ description?: string;
46
+ flags?: CvarFlags;
47
+ onChange?: CvarChangeHandler;
48
+ }): Cvar;
49
+ get(name: string): Cvar | undefined;
50
+ getCvar(name: string): Cvar | undefined;
51
+ setValue(name: string, value: string): Cvar;
52
+ setCvar(name: string, value: string): void;
53
+ resetAll(): void;
54
+ applyLatched(): boolean;
55
+ list(): Cvar[];
56
+ listCvars(): CvarInfo[];
57
+ }
58
+ //# sourceMappingURL=cvars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cvars.d.ts","sourceRoot":"","sources":["../../src/cvars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5E,qBAAa,IAAI;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAoB;IACrC,aAAa,SAAK;gBAEN,EACV,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,KAAsB,EACtB,QAAQ,GACT,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,SAAS,CAAC;QAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;KAC9B;IASD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,SAAS,IAAI,MAAM;IAInB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,QAAQ,IAAI,MAAM;IAIlB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,MAAM,IAAI,MAAM;IAIhB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,UAAU,IAAI,OAAO;IAIrB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoBxB,KAAK,IAAI,IAAI;IAKb,YAAY,IAAI,OAAO;IAcvB,OAAO,CAAC,KAAK;CAUd;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IAC1C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE5D,QAAQ,CAAC,GAAG,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,SAAS,CAAC;QAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;KAC9B,GAAG,IAAI;IAkBR,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIvC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAU3C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1C,QAAQ,IAAI,IAAI;IAMhB,YAAY,IAAI,OAAO;IAQvB,IAAI,IAAI,IAAI,EAAE;IAId,SAAS,IAAI,QAAQ,EAAE;CASxB"}
@@ -0,0 +1,83 @@
1
+ import { Vec3 } from '@quake2ts/shared';
2
+ export interface FrameDiff {
3
+ frameA: number;
4
+ frameB: number;
5
+ playerStateDiff: {
6
+ origin: Vec3 | null;
7
+ viewangles: Vec3 | null;
8
+ health: number | null;
9
+ ammo: number | null;
10
+ };
11
+ entityDiffs: {
12
+ added: number[];
13
+ removed: number[];
14
+ moved: {
15
+ id: number;
16
+ delta: Vec3;
17
+ }[];
18
+ };
19
+ }
20
+ export declare enum DemoEventType {
21
+ WeaponFire = "weapon_fire",
22
+ DamageDealt = "damage_dealt",
23
+ DamageReceived = "damage_received",
24
+ Pickup = "pickup",
25
+ Death = "death",
26
+ Kill = "kill",
27
+ Spawn = "spawn",
28
+ PlayerInfo = "player_info",
29
+ Chat = "chat",
30
+ Objective = "objective"
31
+ }
32
+ export interface DemoEvent {
33
+ type: DemoEventType;
34
+ frame: number;
35
+ time: number;
36
+ entityId?: number;
37
+ targetId?: number;
38
+ value?: number;
39
+ position?: Vec3;
40
+ description?: string;
41
+ data?: any;
42
+ }
43
+ export interface EventSummary {
44
+ totalKills: number;
45
+ totalDeaths: number;
46
+ damageDealt: number;
47
+ damageReceived: number;
48
+ weaponUsage: Map<number, number>;
49
+ }
50
+ export interface DemoHeader {
51
+ protocolVersion: number;
52
+ gameDir: string;
53
+ levelName: string;
54
+ playerNum: number;
55
+ serverCount?: number;
56
+ spawnCount?: number;
57
+ tickRate?: number;
58
+ demoType?: number;
59
+ }
60
+ export interface ServerInfo {
61
+ [key: string]: string;
62
+ }
63
+ export interface DemoStatistics {
64
+ duration: number;
65
+ frameCount: number;
66
+ averageFps: number;
67
+ mapName: string;
68
+ playerCount: number;
69
+ }
70
+ export interface PlayerStatistics {
71
+ kills: number;
72
+ deaths: number;
73
+ damageDealt: number;
74
+ damageReceived: number;
75
+ suicides: number;
76
+ }
77
+ export interface WeaponStatistics {
78
+ weaponId: number;
79
+ shotsFired: number;
80
+ hits: number;
81
+ kills: number;
82
+ }
83
+ //# sourceMappingURL=analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../../src/demo/analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE;QACb,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;QACpB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,WAAW,EAAE;QACT,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,IAAI,CAAA;SAAE,EAAE,CAAC;KACxC,CAAC;CACL;AAED,oBAAY,aAAa;IACrB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,cAAc,oBAAoB;IAClC,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;IACf,UAAU,gBAAgB;IAC1B,IAAI,SAAS;IACb,SAAS,cAAc;CAC1B;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,GAAG,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,33 @@
1
+ import { DemoEvent, EventSummary, DemoHeader, ServerInfo, DemoStatistics, PlayerStatistics, WeaponStatistics } from './analysis.js';
2
+ /**
3
+ * Helper class to scan a demo for events and metadata.
4
+ */
5
+ export declare class DemoAnalyzer {
6
+ private buffer;
7
+ private events;
8
+ private summary;
9
+ private header;
10
+ private configStrings;
11
+ private serverInfo;
12
+ private statistics;
13
+ private playerStats;
14
+ private weaponStats;
15
+ private activeEntities;
16
+ constructor(buffer: ArrayBuffer);
17
+ analyze(): {
18
+ events: DemoEvent[];
19
+ summary: EventSummary;
20
+ header: DemoHeader | null;
21
+ configStrings: Map<number, string>;
22
+ serverInfo: ServerInfo;
23
+ statistics: DemoStatistics | null;
24
+ playerStats: Map<number, PlayerStatistics>;
25
+ weaponStats: Map<number, WeaponStatistics[]>;
26
+ };
27
+ private handleWeaponFire;
28
+ private recordEvent;
29
+ private parseServerInfo;
30
+ private getOrCreatePlayerStats;
31
+ private getOrCreateWeaponStat;
32
+ }
33
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/demo/analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAiB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGnJ;;GAEG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAMb;IAEF,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,WAAW,CAA8C;IAEjE,OAAO,CAAC,cAAc,CAAqB;gBAE/B,MAAM,EAAE,WAAW;IAIxB,OAAO,IAAI;QACd,MAAM,EAAE,SAAS,EAAE,CAAC;QACpB,OAAO,EAAE,YAAY,CAAC;QACtB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;QAC1B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,UAAU,EAAE,UAAU,CAAC;QACvB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;QAClC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC3C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAA;KAC/C;IAoLD,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,qBAAqB;CAahC"}
@@ -0,0 +1,40 @@
1
+ import { DemoPackage } from './packager.js';
2
+ import { OptimalWindow } from './optimalClipFinder.js';
3
+ export interface ClipCriteria {
4
+ duration: number;
5
+ maxResources?: number;
6
+ minAction?: number;
7
+ }
8
+ export interface DemoAnalysisReport {
9
+ summary: {
10
+ duration: number;
11
+ totalResources: number;
12
+ };
13
+ optimalWindows: OptimalWindow[];
14
+ }
15
+ export declare class DemoOptimizerApi {
16
+ private packager;
17
+ private clipFinder;
18
+ private clipper;
19
+ constructor();
20
+ /**
21
+ * Create a raw demo clip from a demo file.
22
+ */
23
+ createDemoClip(demoData: Uint8Array, startTime: number, duration: number): Promise<Uint8Array>;
24
+ /**
25
+ * Create an optimized package (clip + PAK) containing only necessary assets.
26
+ */
27
+ createOptimalDemoPackage(demoData: Uint8Array, pakFiles: {
28
+ name: string;
29
+ data: Uint8Array;
30
+ }[], criteria: ClipCriteria): Promise<DemoPackage>;
31
+ /**
32
+ * Analyze a demo to find resource usage and optimal windows.
33
+ */
34
+ analyzeDemo(demoData: Uint8Array): Promise<DemoAnalysisReport>;
35
+ /**
36
+ * Find best clips based on specific criteria.
37
+ */
38
+ findBestClips(demoData: Uint8Array, criteria: ClipCriteria): Promise<OptimalWindow[]>;
39
+ }
40
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/demo/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAkB,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAqB,aAAa,EAAwB,MAAM,wBAAwB,CAAC;AAQhG,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,cAAc,EAAE,aAAa,EAAE,CAAC;CAEnC;AAED,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,OAAO,CAAc;;IAQ7B;;OAEG;IACU,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAc3G;;OAEG;IACU,wBAAwB,CACjC,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,EAAE,EAC9C,QAAQ,EAAE,YAAY,GACvB,OAAO,CAAC,WAAW,CAAC;IA0BvB;;OAEG;IACU,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwB3E;;OAEG;IACU,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAoBrG"}
@@ -0,0 +1,15 @@
1
+ import { NetworkMessageHandler } from './parser.js';
2
+ export interface AsyncDemoParserOptions {
3
+ onProgress?: (progress: number) => void;
4
+ protocolVersion?: number;
5
+ }
6
+ export declare class AsyncDemoParser {
7
+ private worker;
8
+ private handler;
9
+ constructor(handler: NetworkMessageHandler);
10
+ parse(buffer: ArrayBuffer, options?: AsyncDemoParserOptions): Promise<void>;
11
+ private boundHandleMessage;
12
+ private handleMessage;
13
+ terminate(): void;
14
+ }
15
+ //# sourceMappingURL=asyncParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncParser.d.ts","sourceRoot":"","sources":["../../../src/demo/asyncParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAyE,MAAM,aAAa,CAAC;AAI3H,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,EAAE,qBAAqB;IAQnC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CtF,OAAO,CAAC,kBAAkB,CAAqD;IAE/E,OAAO,CAAC,aAAa;IA0Fd,SAAS,IAAI,IAAI;CAGzB"}
@@ -0,0 +1,17 @@
1
+ import { Vec3 } from '@quake2ts/shared';
2
+ export declare enum DemoCameraMode {
3
+ FirstPerson = 0,
4
+ ThirdPerson = 1,
5
+ Free = 2,
6
+ Follow = 3
7
+ }
8
+ export interface DemoCameraState {
9
+ mode: DemoCameraMode;
10
+ thirdPersonDistance: number;
11
+ thirdPersonOffset: Vec3;
12
+ freeCameraOrigin: Vec3;
13
+ freeCameraAngles: Vec3;
14
+ followEntityId: number;
15
+ currentFollowOrigin?: Vec3;
16
+ }
17
+ //# sourceMappingURL=camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../src/demo/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,oBAAY,cAAc;IACtB,WAAW,IAAA;IACX,WAAW,IAAA;IACX,IAAI,IAAA;IACJ,MAAM,IAAA;CACT;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC;IACxB,gBAAgB,EAAE,IAAI,CAAC;IACvB,gBAAgB,EAAE,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,IAAI,CAAC;CAC9B"}
@@ -0,0 +1,34 @@
1
+ import { ProtocolPlayerState, EntityState } from './parser.js';
2
+ import { PlaybackOffset, DemoPlaybackController } from './playback.js';
3
+ export interface ServerDataMessage {
4
+ protocol: number;
5
+ serverCount: number;
6
+ attractLoop: number;
7
+ gameDir: string;
8
+ playerNum: number;
9
+ levelName: string;
10
+ tickRate?: number;
11
+ demoType?: number;
12
+ }
13
+ export interface WorldState {
14
+ serverData: ServerDataMessage;
15
+ configStrings: Map<number, string>;
16
+ entityBaselines: Map<number, EntityState>;
17
+ playerState: ProtocolPlayerState;
18
+ currentEntities: Map<number, EntityState>;
19
+ currentFrameNumber?: number;
20
+ }
21
+ export declare class DemoClipper {
22
+ /**
23
+ * Extracts a raw clip from a demo between two offsets.
24
+ * Simply copies the message blocks.
25
+ */
26
+ extractClip(demo: Uint8Array, start: PlaybackOffset, end: PlaybackOffset, controller: DemoPlaybackController): Uint8Array;
27
+ extractDemoRange(demo: Uint8Array, startFrame: number, endFrame: number): Uint8Array;
28
+ /**
29
+ * Captures the world state at a specific offset by playing the demo up to that point.
30
+ */
31
+ captureWorldState(demo: Uint8Array, atOffset: PlaybackOffset): Promise<WorldState>;
32
+ extractStandaloneClip(demo: Uint8Array, start: PlaybackOffset, end: PlaybackOffset, worldState: WorldState): Uint8Array;
33
+ }
34
+ //# sourceMappingURL=clipper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipper.d.ts","sourceRoot":"","sources":["../../../src/demo/clipper.ts"],"names":[],"mappings":"AAEA,OAAO,EAA+C,mBAAmB,EAAE,WAAW,EAAgc,MAAM,aAAa,CAAC;AAG1iB,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAiB,MAAM,eAAe,CAAC;AAGtF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,WAAW,EAAE,mBAAmB,CAAC;IAEjC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,WAAW;IAEpB;;;OAGG;IACI,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,sBAAsB,GAAG,UAAU;IAqCzH,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAU3F;;OAEG;IACU,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IA+GxF,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU;CA2JjI"}
@@ -0,0 +1,3 @@
1
+ import { EntityState } from './parser.js';
2
+ export declare function applyEntityDelta(to: EntityState, from: EntityState): void;
3
+ //# sourceMappingURL=delta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../../src/demo/delta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuV,MAAM,aAAa,CAAC;AAE/X,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAgDzE"}
@@ -0,0 +1,126 @@
1
+ import { FrameData, EntityState, DamageIndicator, FogData } from './parser.js';
2
+ import { Vec3 } from '@quake2ts/shared';
3
+ export type DemoWorkerRequest = {
4
+ type: 'parse';
5
+ buffer: ArrayBuffer;
6
+ protocolVersion?: number;
7
+ };
8
+ export type DemoWorkerResponse = {
9
+ type: 'serverData';
10
+ protocol: number;
11
+ serverCount: number;
12
+ attractLoop: number;
13
+ gameDir: string;
14
+ playerNum: number;
15
+ levelName: string;
16
+ tickRate?: number;
17
+ demoType?: number;
18
+ } | {
19
+ type: 'configString';
20
+ index: number;
21
+ str: string;
22
+ } | {
23
+ type: 'spawnBaseline';
24
+ entity: EntityState;
25
+ } | {
26
+ type: 'frame';
27
+ frame: FrameData;
28
+ } | {
29
+ type: 'centerPrint';
30
+ msg: string;
31
+ } | {
32
+ type: 'stuffText';
33
+ msg: string;
34
+ } | {
35
+ type: 'print';
36
+ level: number;
37
+ msg: string;
38
+ } | {
39
+ type: 'sound';
40
+ flags: number;
41
+ soundNum: number;
42
+ volume?: number;
43
+ attenuation?: number;
44
+ offset?: number;
45
+ ent?: number;
46
+ pos?: Vec3;
47
+ } | {
48
+ type: 'tempEntity';
49
+ typeId: number;
50
+ pos: Vec3;
51
+ pos2?: Vec3;
52
+ dir?: Vec3;
53
+ cnt?: number;
54
+ color?: number;
55
+ ent?: number;
56
+ srcEnt?: number;
57
+ destEnt?: number;
58
+ } | {
59
+ type: 'layout';
60
+ layout: string;
61
+ } | {
62
+ type: 'inventory';
63
+ inventory: number[];
64
+ } | {
65
+ type: 'muzzleFlash';
66
+ ent: number;
67
+ weapon: number;
68
+ } | {
69
+ type: 'muzzleFlash2';
70
+ ent: number;
71
+ weapon: number;
72
+ } | {
73
+ type: 'disconnect';
74
+ } | {
75
+ type: 'reconnect';
76
+ } | {
77
+ type: 'download';
78
+ size: number;
79
+ percent: number;
80
+ data?: Uint8Array;
81
+ } | {
82
+ type: 'splitClient';
83
+ clientNum: number;
84
+ } | {
85
+ type: 'levelRestart';
86
+ } | {
87
+ type: 'damage';
88
+ indicators: DamageIndicator[];
89
+ } | {
90
+ type: 'locPrint';
91
+ flags: number;
92
+ base: string;
93
+ args: string[];
94
+ } | {
95
+ type: 'fog';
96
+ data: FogData;
97
+ } | {
98
+ type: 'waitingForPlayers';
99
+ count: number;
100
+ } | {
101
+ type: 'botChat';
102
+ msg: string;
103
+ } | {
104
+ type: 'poi';
105
+ flags: number;
106
+ pos: Vec3;
107
+ } | {
108
+ type: 'helpPath';
109
+ pos: Vec3;
110
+ } | {
111
+ type: 'muzzleFlash3';
112
+ ent: number;
113
+ weapon: number;
114
+ } | {
115
+ type: 'achievement';
116
+ id: string;
117
+ } | {
118
+ type: 'progress';
119
+ percent: number;
120
+ } | {
121
+ type: 'complete';
122
+ } | {
123
+ type: 'error';
124
+ message: string;
125
+ };
126
+ //# sourceMappingURL=demo.worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.worker.d.ts","sourceRoot":"","sources":["../../../src/demo/demo.worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { BinaryStream } from '@quake2ts/shared';
2
+ export interface DemoMessageBlock {
3
+ length: number;
4
+ data: BinaryStream;
5
+ }
6
+ export declare class DemoReader {
7
+ private buffer;
8
+ private view;
9
+ private offset;
10
+ private messageOffsets;
11
+ private currentBlock;
12
+ constructor(buffer: ArrayBuffer);
13
+ /**
14
+ * Scans the buffer to build an index of message offsets.
15
+ */
16
+ private scan;
17
+ /**
18
+ * Checks if there are more blocks to read.
19
+ */
20
+ hasMore(): boolean;
21
+ /**
22
+ * Reads the next message block from the demo file.
23
+ * Format is [Length (4 bytes)] + [Message Block (Length bytes)].
24
+ * Returns null if end of file or incomplete block.
25
+ */
26
+ readNextBlock(): DemoMessageBlock | null;
27
+ /**
28
+ * Advances to the next block and stores it in `currentBlock`.
29
+ * Returns true if a block was read, false otherwise.
30
+ * Compatible with `getBlock()` usage.
31
+ */
32
+ nextBlock(): boolean;
33
+ /**
34
+ * Returns the current block read by `nextBlock()`.
35
+ */
36
+ getBlock(): DemoMessageBlock;
37
+ /**
38
+ * Reads all remaining blocks and concatenates them into a single buffer.
39
+ * Useful for converting discrete blocks into a continuous stream.
40
+ */
41
+ readAllBlocksToBuffer(): ArrayBuffer;
42
+ /**
43
+ * Resets the reader to the beginning.
44
+ */
45
+ reset(): void;
46
+ /**
47
+ * Seeks to a specific message index.
48
+ * Returns true if successful, false if index is out of bounds.
49
+ */
50
+ seekToMessage(index: number): boolean;
51
+ /**
52
+ * Returns the total number of messages in the demo.
53
+ */
54
+ getMessageCount(): number;
55
+ getOffset(): number;
56
+ getProgress(): {
57
+ current: number;
58
+ total: number;
59
+ percent: number;
60
+ };
61
+ }
62
+ //# sourceMappingURL=demoReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demoReader.d.ts","sourceRoot":"","sources":["../../../src/demo/demoReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAiC;gBAEzC,MAAM,EAAE,WAAW;IAO/B;;OAEG;IACH,OAAO,CAAC,IAAI;IA6BZ;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;;;OAIG;IACI,aAAa,IAAI,gBAAgB,GAAG,IAAI;IA4B/C;;;;OAIG;IACI,SAAS,IAAI,OAAO;IAU3B;;OAEG;IACI,QAAQ,IAAI,gBAAgB;IAOnC;;;OAGG;IACI,qBAAqB,IAAI,WAAW;IAoC3C;;OAEG;IACI,KAAK,IAAI,IAAI;IAKpB;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAS5C;;OAEG;IACI,eAAe,IAAI,MAAM;IAIzB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAS1E"}
@@ -0,0 +1,15 @@
1
+ import { DemoWriter } from './demoWriter.js';
2
+ import { RecorderSnapshot } from './types.js';
3
+ export declare class DemoRecorder {
4
+ private demoWriter;
5
+ private frameCount;
6
+ private firstFrame;
7
+ private lastPacketEntities;
8
+ private lastEntityStates;
9
+ private protocolVersion;
10
+ constructor();
11
+ getWriter(): DemoWriter;
12
+ recordServerData(protocolVersion: number, serverCount: number, gameDir: string, playerNum: number, mapName: string, configStrings: string[]): void;
13
+ recordSnapshot(snapshot: RecorderSnapshot, frameNumber: number, timeMs: number): void;
14
+ }
15
+ //# sourceMappingURL=demoRecorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demoRecorder.d.ts","sourceRoot":"","sources":["../../../src/demo/demoRecorder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,YAAY;IACrB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,eAAe,CAAc;;IAM9B,SAAS,IAAI,UAAU;IAIvB,gBAAgB,CACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EAAE,GACxB,IAAI;IAiCA,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAkF/F"}
@@ -0,0 +1,39 @@
1
+ import { DemoReader } from './index.js';
2
+ import { StreamingBuffer } from '../stream/streamingBuffer.js';
3
+ /**
4
+ * DemoStream - Adapter to stream demo blocks into a StreamingBuffer
5
+ *
6
+ * Facilitates reading a demo file (which consists of discrete blocks)
7
+ * as a continuous stream of data for the NetworkMessageParser.
8
+ */
9
+ export declare class DemoStream {
10
+ private reader;
11
+ private buffer;
12
+ private _isComplete;
13
+ constructor(demoData: ArrayBuffer | Uint8Array);
14
+ /**
15
+ * Load all remaining blocks from the demo into the streaming buffer.
16
+ * Useful for parsing a complete demo file at once.
17
+ */
18
+ loadComplete(): void;
19
+ /**
20
+ * Load the next N blocks from the demo into the streaming buffer.
21
+ * Useful for simulating streaming playback or throttling.
22
+ * @param count Number of blocks to load
23
+ * @returns True if blocks were loaded, False if end of demo reached
24
+ */
25
+ loadNextBlocks(count: number): boolean;
26
+ /**
27
+ * Check if the entire demo has been loaded into the buffer.
28
+ */
29
+ isComplete(): boolean;
30
+ /**
31
+ * Get the underlying streaming buffer for parsing.
32
+ */
33
+ getBuffer(): StreamingBuffer;
34
+ /**
35
+ * Get the underlying demo reader (e.g. to check total size or progress)
36
+ */
37
+ getReader(): DemoReader;
38
+ }
39
+ //# sourceMappingURL=demoStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demoStream.d.ts","sourceRoot":"","sources":["../../../src/demo/demoStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;;;;GAKG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,WAAW,CAAkB;gBAEzB,QAAQ,EAAE,WAAW,GAAG,UAAU;IAK9C;;;OAGG;IACH,YAAY,IAAI,IAAI;IAcpB;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAkBtC;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,SAAS,IAAI,UAAU;CAG1B"}
@@ -0,0 +1,8 @@
1
+ export declare class DemoWriter {
2
+ private writer;
3
+ constructor();
4
+ writeBlock(data: Uint8Array): void;
5
+ writeEOF(): void;
6
+ getData(): Uint8Array;
7
+ }
8
+ //# sourceMappingURL=demoWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demoWriter.d.ts","sourceRoot":"","sources":["../../../src/demo/demoWriter.ts"],"names":[],"mappings":"AAEA,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAe;;IAMtB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAKlC,QAAQ,IAAI,IAAI;IAIhB,OAAO,IAAI,UAAU;CAG/B"}
@@ -0,0 +1,6 @@
1
+ export { DemoPlaybackController, PlaybackState } from './playback.js';
2
+ export { DemoReader } from './demoReader.js';
3
+ export { DemoRecorder } from './recorder.js';
4
+ export { NetworkMessageParser, createEmptyEntityState, createEmptyProtocolPlayerState } from './parser.js';
5
+ export { AsyncDemoParser } from './asyncParser.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/demo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}