quake2ts 0.0.7

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 (149) hide show
  1. package/apps/viewer/dist/browser/index.global.js +2 -0
  2. package/apps/viewer/dist/browser/index.global.js.map +1 -0
  3. package/apps/viewer/dist/cjs/index.cjs +1087 -0
  4. package/apps/viewer/dist/cjs/index.cjs.map +1 -0
  5. package/apps/viewer/dist/esm/index.js +1060 -0
  6. package/apps/viewer/dist/esm/index.js.map +1 -0
  7. package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -0
  8. package/apps/viewer/dist/types/index.d.ts +7 -0
  9. package/apps/viewer/dist/types/index.d.ts.map +1 -0
  10. package/package.json +107 -0
  11. package/packages/client/dist/browser/index.global.js +2 -0
  12. package/packages/client/dist/browser/index.global.js.map +1 -0
  13. package/packages/client/dist/cjs/index.cjs +57 -0
  14. package/packages/client/dist/cjs/index.cjs.map +1 -0
  15. package/packages/client/dist/esm/index.js +32 -0
  16. package/packages/client/dist/esm/index.js.map +1 -0
  17. package/packages/client/dist/tsconfig.tsbuildinfo +1 -0
  18. package/packages/client/dist/types/index.d.ts +14 -0
  19. package/packages/client/dist/types/index.d.ts.map +1 -0
  20. package/packages/engine/dist/browser/index.global.js +2 -0
  21. package/packages/engine/dist/browser/index.global.js.map +1 -0
  22. package/packages/engine/dist/cjs/index.cjs +1823 -0
  23. package/packages/engine/dist/cjs/index.cjs.map +1 -0
  24. package/packages/engine/dist/esm/index.js +1764 -0
  25. package/packages/engine/dist/esm/index.js.map +1 -0
  26. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -0
  27. package/packages/engine/dist/types/assets/browserIngestion.d.ts +7 -0
  28. package/packages/engine/dist/types/assets/browserIngestion.d.ts.map +1 -0
  29. package/packages/engine/dist/types/assets/bsp.d.ts +157 -0
  30. package/packages/engine/dist/types/assets/bsp.d.ts.map +1 -0
  31. package/packages/engine/dist/types/assets/cache.d.ts +17 -0
  32. package/packages/engine/dist/types/assets/cache.d.ts.map +1 -0
  33. package/packages/engine/dist/types/assets/ingestion.d.ts +31 -0
  34. package/packages/engine/dist/types/assets/ingestion.d.ts.map +1 -0
  35. package/packages/engine/dist/types/assets/md2.d.ts +73 -0
  36. package/packages/engine/dist/types/assets/md2.d.ts.map +1 -0
  37. package/packages/engine/dist/types/assets/pak.d.ts +28 -0
  38. package/packages/engine/dist/types/assets/pak.d.ts.map +1 -0
  39. package/packages/engine/dist/types/assets/vfs.d.ts +23 -0
  40. package/packages/engine/dist/types/assets/vfs.d.ts.map +1 -0
  41. package/packages/engine/dist/types/configstrings.d.ts +34 -0
  42. package/packages/engine/dist/types/configstrings.d.ts.map +1 -0
  43. package/packages/engine/dist/types/cvars.d.ts +43 -0
  44. package/packages/engine/dist/types/cvars.d.ts.map +1 -0
  45. package/packages/engine/dist/types/host.d.ts +42 -0
  46. package/packages/engine/dist/types/host.d.ts.map +1 -0
  47. package/packages/engine/dist/types/index.d.ts +37 -0
  48. package/packages/engine/dist/types/index.d.ts.map +1 -0
  49. package/packages/engine/dist/types/loop.d.ts +40 -0
  50. package/packages/engine/dist/types/loop.d.ts.map +1 -0
  51. package/packages/engine/dist/types/render/bsp.d.ts +49 -0
  52. package/packages/engine/dist/types/render/bsp.d.ts.map +1 -0
  53. package/packages/engine/dist/types/render/context.d.ts +36 -0
  54. package/packages/engine/dist/types/render/context.d.ts.map +1 -0
  55. package/packages/engine/dist/types/render/resources.d.ts +56 -0
  56. package/packages/engine/dist/types/render/resources.d.ts.map +1 -0
  57. package/packages/engine/dist/types/render/shaderProgram.d.ts +18 -0
  58. package/packages/engine/dist/types/render/shaderProgram.d.ts.map +1 -0
  59. package/packages/engine/dist/types/runtime.d.ts +15 -0
  60. package/packages/engine/dist/types/runtime.d.ts.map +1 -0
  61. package/packages/game/dist/browser/index.global.js +2 -0
  62. package/packages/game/dist/browser/index.global.js.map +1 -0
  63. package/packages/game/dist/cjs/index.cjs +758 -0
  64. package/packages/game/dist/cjs/index.cjs.map +1 -0
  65. package/packages/game/dist/esm/index.js +725 -0
  66. package/packages/game/dist/esm/index.js.map +1 -0
  67. package/packages/game/dist/tsconfig.tsbuildinfo +1 -0
  68. package/packages/game/dist/types/entities/entity.d.ts +92 -0
  69. package/packages/game/dist/types/entities/entity.d.ts.map +1 -0
  70. package/packages/game/dist/types/entities/index.d.ts +3 -0
  71. package/packages/game/dist/types/entities/index.d.ts.map +1 -0
  72. package/packages/game/dist/types/entities/pool.d.ts +18 -0
  73. package/packages/game/dist/types/entities/pool.d.ts.map +1 -0
  74. package/packages/game/dist/types/entities/system.d.ts +18 -0
  75. package/packages/game/dist/types/entities/system.d.ts.map +1 -0
  76. package/packages/game/dist/types/entities/thinkScheduler.d.ts +8 -0
  77. package/packages/game/dist/types/entities/thinkScheduler.d.ts.map +1 -0
  78. package/packages/game/dist/types/index.d.ts +26 -0
  79. package/packages/game/dist/types/index.d.ts.map +1 -0
  80. package/packages/game/dist/types/level.d.ts +14 -0
  81. package/packages/game/dist/types/level.d.ts.map +1 -0
  82. package/packages/game/dist/types/loop.d.ts +29 -0
  83. package/packages/game/dist/types/loop.d.ts.map +1 -0
  84. package/packages/shared/dist/browser/index.global.js +2 -0
  85. package/packages/shared/dist/browser/index.global.js.map +1 -0
  86. package/packages/shared/dist/cjs/index.cjs +2793 -0
  87. package/packages/shared/dist/cjs/index.cjs.map +1 -0
  88. package/packages/shared/dist/esm/index.js +2594 -0
  89. package/packages/shared/dist/esm/index.js.map +1 -0
  90. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -0
  91. package/packages/shared/dist/types/bsp/collision.d.ts +112 -0
  92. package/packages/shared/dist/types/bsp/collision.d.ts.map +1 -0
  93. package/packages/shared/dist/types/bsp/contents.d.ts +71 -0
  94. package/packages/shared/dist/types/bsp/contents.d.ts.map +1 -0
  95. package/packages/shared/dist/types/index.d.ts +25 -0
  96. package/packages/shared/dist/types/index.d.ts.map +1 -0
  97. package/packages/shared/dist/types/math/angles.d.ts +17 -0
  98. package/packages/shared/dist/types/math/angles.d.ts.map +1 -0
  99. package/packages/shared/dist/types/math/color.d.ts +12 -0
  100. package/packages/shared/dist/types/math/color.d.ts.map +1 -0
  101. package/packages/shared/dist/types/math/random.d.ts +48 -0
  102. package/packages/shared/dist/types/math/random.d.ts.map +1 -0
  103. package/packages/shared/dist/types/math/vec3.d.ts +76 -0
  104. package/packages/shared/dist/types/math/vec3.d.ts.map +1 -0
  105. package/packages/shared/dist/types/pmove/categorize.d.ts +36 -0
  106. package/packages/shared/dist/types/pmove/categorize.d.ts.map +1 -0
  107. package/packages/shared/dist/types/pmove/constants.d.ts +75 -0
  108. package/packages/shared/dist/types/pmove/constants.d.ts.map +1 -0
  109. package/packages/shared/dist/types/pmove/currents.d.ts +58 -0
  110. package/packages/shared/dist/types/pmove/currents.d.ts.map +1 -0
  111. package/packages/shared/dist/types/pmove/dimensions.d.ts +14 -0
  112. package/packages/shared/dist/types/pmove/dimensions.d.ts.map +1 -0
  113. package/packages/shared/dist/types/pmove/duck.d.ts +39 -0
  114. package/packages/shared/dist/types/pmove/duck.d.ts.map +1 -0
  115. package/packages/shared/dist/types/pmove/fly.d.ts +34 -0
  116. package/packages/shared/dist/types/pmove/fly.d.ts.map +1 -0
  117. package/packages/shared/dist/types/pmove/jump.d.ts +26 -0
  118. package/packages/shared/dist/types/pmove/jump.d.ts.map +1 -0
  119. package/packages/shared/dist/types/pmove/move.d.ts +58 -0
  120. package/packages/shared/dist/types/pmove/move.d.ts.map +1 -0
  121. package/packages/shared/dist/types/pmove/pmove.d.ts +36 -0
  122. package/packages/shared/dist/types/pmove/pmove.d.ts.map +1 -0
  123. package/packages/shared/dist/types/pmove/slide.d.ts +63 -0
  124. package/packages/shared/dist/types/pmove/slide.d.ts.map +1 -0
  125. package/packages/shared/dist/types/pmove/snap.d.ts +40 -0
  126. package/packages/shared/dist/types/pmove/snap.d.ts.map +1 -0
  127. package/packages/shared/dist/types/pmove/special.d.ts +39 -0
  128. package/packages/shared/dist/types/pmove/special.d.ts.map +1 -0
  129. package/packages/shared/dist/types/pmove/stuck.d.ts +21 -0
  130. package/packages/shared/dist/types/pmove/stuck.d.ts.map +1 -0
  131. package/packages/shared/dist/types/pmove/types.d.ts +48 -0
  132. package/packages/shared/dist/types/pmove/types.d.ts.map +1 -0
  133. package/packages/shared/dist/types/pmove/view.d.ts +19 -0
  134. package/packages/shared/dist/types/pmove/view.d.ts.map +1 -0
  135. package/packages/shared/dist/types/pmove/water.d.ts +21 -0
  136. package/packages/shared/dist/types/pmove/water.d.ts.map +1 -0
  137. package/packages/shared/dist/types/protocol/configstrings.d.ts +51 -0
  138. package/packages/shared/dist/types/protocol/configstrings.d.ts.map +1 -0
  139. package/packages/shared/dist/types/protocol/cvar.d.ts +15 -0
  140. package/packages/shared/dist/types/protocol/cvar.d.ts.map +1 -0
  141. package/packages/tools/dist/browser/index.global.js +2 -0
  142. package/packages/tools/dist/browser/index.global.js.map +1 -0
  143. package/packages/tools/dist/cjs/index.cjs +33 -0
  144. package/packages/tools/dist/cjs/index.cjs.map +1 -0
  145. package/packages/tools/dist/esm/index.js +8 -0
  146. package/packages/tools/dist/esm/index.js.map +1 -0
  147. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -0
  148. package/packages/tools/dist/types/index.d.ts +7 -0
  149. package/packages/tools/dist/types/index.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../packages/shared/dist/types/math/vec3.d.ts","../../../packages/shared/dist/types/math/angles.d.ts","../../../packages/shared/dist/types/math/color.d.ts","../../../packages/shared/dist/types/math/random.d.ts","../../../packages/shared/dist/types/bsp/contents.d.ts","../../../packages/shared/dist/types/bsp/collision.d.ts","../../../packages/shared/dist/types/protocol/cvar.d.ts","../../../packages/shared/dist/types/protocol/configstrings.d.ts","../../../packages/shared/dist/types/pmove/types.d.ts","../../../packages/shared/dist/types/pmove/constants.d.ts","../../../packages/shared/dist/types/pmove/pmove.d.ts","../../../packages/shared/dist/types/pmove/slide.d.ts","../../../packages/shared/dist/types/pmove/stuck.d.ts","../../../packages/shared/dist/types/pmove/currents.d.ts","../../../packages/shared/dist/types/pmove/fly.d.ts","../../../packages/shared/dist/types/pmove/water.d.ts","../../../packages/shared/dist/types/pmove/jump.d.ts","../../../packages/shared/dist/types/pmove/dimensions.d.ts","../../../packages/shared/dist/types/pmove/duck.d.ts","../../../packages/shared/dist/types/pmove/categorize.d.ts","../../../packages/shared/dist/types/pmove/move.d.ts","../../../packages/shared/dist/types/pmove/special.d.ts","../../../packages/shared/dist/types/pmove/snap.d.ts","../../../packages/shared/dist/types/pmove/view.d.ts","../../../packages/shared/dist/types/index.d.ts","../../../packages/engine/dist/types/loop.d.ts","../../../packages/engine/dist/types/host.d.ts","../../../packages/engine/dist/types/configstrings.d.ts","../../../packages/engine/dist/types/runtime.d.ts","../../../packages/engine/dist/types/cvars.d.ts","../../../packages/engine/dist/types/assets/pak.d.ts","../../../packages/engine/dist/types/assets/vfs.d.ts","../../../packages/engine/dist/types/assets/ingestion.d.ts","../../../packages/engine/dist/types/assets/cache.d.ts","../../../packages/engine/dist/types/assets/browseringestion.d.ts","../../../packages/engine/dist/types/assets/md2.d.ts","../../../packages/engine/dist/types/render/context.d.ts","../../../packages/engine/dist/types/render/shaderprogram.d.ts","../../../packages/engine/dist/types/render/resources.d.ts","../../../packages/engine/dist/types/render/bsp.d.ts","../../../packages/engine/dist/types/index.d.ts","../../../packages/client/dist/types/index.d.ts","../../../packages/game/dist/types/entities/entity.d.ts","../../../packages/game/dist/types/entities/system.d.ts","../../../packages/game/dist/types/entities/index.d.ts","../../../packages/game/dist/types/loop.d.ts","../../../packages/game/dist/types/level.d.ts","../../../packages/game/dist/types/index.d.ts","../src/index.ts"],"fileIdsList":[[70,86,87,93],[70,86],[77,78],[76,77],[70,77],[76],[70],[71],[70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85],[70,84],[72,86],[88,89],[88],[70,86,90,92],[91],[86],[46],[46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69],[46,50,54,55],[46,55],[46,50,54,55,63],[46,54,57],[46,54,55,57],[46,54],[46,54,55],[46,50],[46,47,55]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d49d5bc95370fd2ed354d3c9182b058203fff1c1b4970b9e16b2e6f5c9281dca","impliedFormat":99},{"version":"18e47b7615118f25f0c09d8a234177c0b48eaccd7ee81f7a7e755ac336790114","impliedFormat":99},{"version":"0a483508d8a864726671af5c9b2d7c78e6c12e1289bef65db7df48930113bd04","impliedFormat":99},{"version":"261013ab3c7adc50bd7be46881789753a25870ec5ef2f265f5aee15645f7ff82","impliedFormat":99},{"version":"db68eb9983dfee06a8f79ac7e0ff1d2f8b64adf8ddbd0d8340dfe075dfeeb62c","impliedFormat":99},{"version":"4b6aa0a5d7350ec05ef791934e4223b754d0062044a3d2e36e9d00e85caf8439","impliedFormat":99},{"version":"5791d843929b2794e757aac45a4791860a4542a163ef0fa062bff83cc4b2783d","impliedFormat":99},{"version":"c4df6bbc7e47590510a0d1874dbc655720cbff06c9cc1dc5f3b453d2efed5181","impliedFormat":99},{"version":"0663baa12462be4526fc70d40a0512d7c901546d3d2470571a4cecc2403b06b9","impliedFormat":99},{"version":"86a09575cc4f08dffb7d7fa70b00d855e7901da0247d2689ee2b5d68acd72300","impliedFormat":99},{"version":"966b5425870531e51598f864e5da23083ca0f2bc32055c451eff33b59ab1e42b","impliedFormat":99},{"version":"c003de6a72360c6dd4cafb689bd18b196910ec4a2ee299e6b6e7b30b7c976727","impliedFormat":99},{"version":"b74d298d1f2e7dd4b13653cd705f54dfeb0225192ce6adb419d118dc61db51ed","impliedFormat":99},{"version":"28faf4f79dfdb949104d0d954fed83a24c9cdfe98e9799c33e214d1fef29b1bd","impliedFormat":99},{"version":"210e8a5d5576c2902129050e62e4cc7acddd41b4e8be38552639c6d21ff3cee3","impliedFormat":99},{"version":"22e2e64285f7aaef481a744debc998006f8cf463a870cf28f281ee789195e9fb","impliedFormat":99},{"version":"76a9a8b405f17d7ff73b3cb22e7e6fc2832069f5d00dccf927a591bf4996bb01","impliedFormat":99},{"version":"a4e0607cf35a6c1503665e283169f069032fe5acb0f69d4f5ab7d6b328bd3641","impliedFormat":99},{"version":"d3ed5cdf9024e5b707499b95b2f3f36810f3b790e015cc53541ab97dad353ea6","impliedFormat":99},{"version":"f943bb60549649ccb78acc8105de10c1fc77bc4681dfaedfe5330ce6e87a1d9f","impliedFormat":99},{"version":"85c25880de81ca2db6235c99260550f40f2df78dab87b89751e43bfaaa2eae1d","impliedFormat":99},{"version":"df60f25f487e9772ebf83da13db422c038021a2ecdde25a51506e3cd5f5da5a4","impliedFormat":99},{"version":"44f7b5e80a9d42c45264f4c4eb4e300c5a44d9517b0d47aec04a14265a84969d","impliedFormat":99},{"version":"35526be13abff0b287aaec4d8af58a71c77fea57ec9bd1861aaa457284e326dd","impliedFormat":99},{"version":"20eba37a78e38989c7873bf9453830da9ed67bbdc852e5cc3e3feac932f90985","impliedFormat":99},{"version":"f326295459bc2e37b4aee6ffaf4dfb140c571eb4692655b50eac4808bb2432c7","impliedFormat":99},{"version":"9d714f1c2ceccba5c29538f4ab75570091662a34bf3044448530e084c96cd75e","impliedFormat":99},{"version":"e22553dab6886f0e7e9cb7057af86c8fd693e36fb4d4b5822f68c84debdea37b","impliedFormat":99},{"version":"88882f29c2529b52230367eaf39866179365b2f805a49acdcd4b0ef7209b3b97","impliedFormat":99},{"version":"f8785dec02fd9af6511c4279183f3e3055b049972c8acaa16271a2806737236f","impliedFormat":99},{"version":"2bce3f6aa4602276fc00d0d84794588d1beae64c54f4700b37cd172eb724a47a","impliedFormat":99},{"version":"65b7c9ff881359f7ec077cbae8eb3f96fde174b4b97feb475d05b88fe5bb082b","impliedFormat":99},{"version":"b010efadf587c06c087eb1529f0ed829b6620f5745455033ccdb947a44f2142c","impliedFormat":99},{"version":"9e1336e60894b133fe44298c27d688116e57583f634b5c6c3611a061799cc6f7","impliedFormat":99},{"version":"130fc01380b54d83d3a933a7a2345f59bdcb125ed61579051f4a5f86225c9c6b","impliedFormat":99},{"version":"45fa42fe133060ed136c2271960fb7d6b6d93bd1d495e9e6d767275506fe0243","impliedFormat":99},{"version":"532177b09dd61d4c6549ca8b76394d40ea544e398c4aea8d4a0e736044e947e7","impliedFormat":99},{"version":"bca4895c207f65febbd6c313dc33d9a457246cab60c5fdedfe7f6aca2d438a31","impliedFormat":99},{"version":"fc63e8aca86c2e6d2ded7aec5a7740d1bb33088bfccf00932fe117b6b4ff7544","impliedFormat":99},{"version":"d5eab14c127bc83eeec90d5fa5e5e7d52e677095f4e4fc9a0f0612f5f87798fa","impliedFormat":99},{"version":"584295d72da288f80035ec3038e2cec268e98daa9d51385f844c52a3a4c6f478","impliedFormat":99},{"version":"e82ddad11afa4e9b44af79114eb8629be01a91a4c175d782710da1381c4fece1","impliedFormat":99},{"version":"7faed438fa019ded087cc57000ced60b33d1f59e2e1690c80bc5a92b090202f9","impliedFormat":99},{"version":"b3f10732415f19e9c3dde0c2d9cbb03989ffadfcfe9632d78cd4b8473bbda0f3","impliedFormat":99},{"version":"c5edb436c6b125938f8728155f7dd20009fbe531ebe6bdc0d5ed3382a4f0a44e","impliedFormat":99},{"version":"24000af5590cdad32e1fc1926c5c22a5c9cfff286e5accc6c1c02f9427fa04d5","impliedFormat":99},{"version":"c707859a91e6921000df7b8091b533e29231be2670a9037b95e3d67942e5de50","impliedFormat":99},{"version":"e42fcb82ea6aabd23b99400f094fc92b324f9bb9f8e50c62c2ab8df6f7d6aacc","impliedFormat":99},{"version":"1dfb6f428132c7424c167ce1aa0773375755845c8e764e5d28c8b0fab16cde24","signature":"5ab8896931ff18214ee5648040376f5cf49eb10c4223456f8a1bce25939db784","impliedFormat":99}],"root":[94],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"module":199,"outDir":"./types","rootDir":"../src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[94,1],[87,2],[80,3],[78,4],[81,5],[77,6],[75,7],[72,8],[86,9],[85,10],[74,11],[88,7],[90,12],[89,13],[93,14],[92,15],[91,16],[51,17],[70,18],[47,17],[65,19],[59,19],[63,20],[64,21],[60,22],[62,20],[66,23],[56,24],[57,24],[68,24],[67,25],[58,24],[54,26],[69,27],[61,19]],"latestChangedDtsFile":"./types/index.d.ts","version":"5.9.3"}
@@ -0,0 +1,7 @@
1
+ export declare function bootstrapViewer(): {
2
+ engine: import("@quake2ts/engine").EngineExports;
3
+ game: import("@quake2ts/game").GameExports;
4
+ client: import("@quake2ts/client").ClientExports;
5
+ runtime: import("@quake2ts/engine").EngineRuntime<import("@quake2ts/client").PredictionState>;
6
+ };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,wBAAgB,eAAe;;;;;EAmB9B"}
package/package.json ADDED
@@ -0,0 +1,107 @@
1
+ {
2
+ "name": "quake2ts",
3
+ "version": "0.0.7",
4
+ "description": "Quake II re-release port to TypeScript with WebGL renderer - A complete game engine with physics, networking, and BSP rendering",
5
+ "type": "module",
6
+ "packageManager": "pnpm@8.15.7",
7
+ "keywords": [
8
+ "quake",
9
+ "quake2",
10
+ "game-engine",
11
+ "webgl",
12
+ "typescript",
13
+ "bsp",
14
+ "physics",
15
+ "3d"
16
+ ],
17
+ "author": "Jonathan Burnhams",
18
+ "license": "GPL-2.0",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/jburnhams/quake2.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/jburnhams/quake2/issues"
25
+ },
26
+ "homepage": "https://github.com/jburnhams/quake2#readme",
27
+ "exports": {
28
+ "./shared": {
29
+ "types": "./packages/shared/dist/types/index.d.ts",
30
+ "import": "./packages/shared/dist/esm/index.js",
31
+ "require": "./packages/shared/dist/cjs/index.cjs",
32
+ "default": "./packages/shared/dist/esm/index.js"
33
+ },
34
+ "./shared/browser": {
35
+ "types": "./packages/shared/dist/types/index.d.ts",
36
+ "default": "./packages/shared/dist/browser/index.js"
37
+ },
38
+ "./engine": {
39
+ "types": "./packages/engine/dist/types/index.d.ts",
40
+ "import": "./packages/engine/dist/esm/index.js",
41
+ "require": "./packages/engine/dist/cjs/index.cjs",
42
+ "default": "./packages/engine/dist/esm/index.js"
43
+ },
44
+ "./engine/browser": {
45
+ "types": "./packages/engine/dist/types/index.d.ts",
46
+ "default": "./packages/engine/dist/browser/index.js"
47
+ },
48
+ "./game": {
49
+ "types": "./packages/game/dist/types/index.d.ts",
50
+ "import": "./packages/game/dist/esm/index.js",
51
+ "require": "./packages/game/dist/cjs/index.cjs",
52
+ "default": "./packages/game/dist/esm/index.js"
53
+ },
54
+ "./game/browser": {
55
+ "types": "./packages/game/dist/types/index.d.ts",
56
+ "default": "./packages/game/dist/browser/index.js"
57
+ },
58
+ "./client": {
59
+ "types": "./packages/client/dist/types/index.d.ts",
60
+ "import": "./packages/client/dist/esm/index.js",
61
+ "require": "./packages/client/dist/cjs/index.cjs",
62
+ "default": "./packages/client/dist/esm/index.js"
63
+ },
64
+ "./client/browser": {
65
+ "types": "./packages/client/dist/types/index.d.ts",
66
+ "default": "./packages/client/dist/browser/index.js"
67
+ },
68
+ "./tools": {
69
+ "types": "./packages/tools/dist/types/index.d.ts",
70
+ "import": "./packages/tools/dist/esm/index.js",
71
+ "require": "./packages/tools/dist/cjs/index.cjs",
72
+ "default": "./packages/tools/dist/esm/index.js"
73
+ },
74
+ "./tools/browser": {
75
+ "types": "./packages/tools/dist/types/index.d.ts",
76
+ "default": "./packages/tools/dist/browser/index.js"
77
+ },
78
+ "./viewer": {
79
+ "types": "./apps/viewer/dist/types/index.d.ts",
80
+ "import": "./apps/viewer/dist/esm/index.js",
81
+ "require": "./apps/viewer/dist/cjs/index.cjs",
82
+ "default": "./apps/viewer/dist/esm/index.js"
83
+ },
84
+ "./viewer/browser": {
85
+ "types": "./apps/viewer/dist/types/index.d.ts",
86
+ "default": "./apps/viewer/dist/browser/index.js"
87
+ },
88
+ "./package.json": "./package.json"
89
+ },
90
+ "files": [
91
+ "packages/*/dist",
92
+ "apps/*/dist",
93
+ "README.md",
94
+ "LICENSE"
95
+ ],
96
+ "devDependencies": {
97
+ "jsdom": "^27.2.0",
98
+ "typescript": "^5.4.5",
99
+ "vitest": "^1.5.3"
100
+ },
101
+ "scripts": {
102
+ "build": "pnpm run build:types && pnpm run build:workspace",
103
+ "build:types": "tsc -b tsconfig.build.json",
104
+ "build:workspace": "pnpm -r --filter=!#workspace-root --if-present run build",
105
+ "test": "pnpm -r --if-present test"
106
+ }
107
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var Quake2Client=(()=>{var o=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var l=(i,e)=>{for(var t in e)o(i,t,{get:e[t],enumerable:!0})},p=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of d(e))!c.call(i,n)&&n!==t&&o(i,n,{get:()=>e[n],enumerable:!(r=a(e,n))||r.enumerable});return i};var m=i=>p(o({},"__esModule",{value:!0}),i);var x={};l(x,{createClient:()=>s});function s(i){let e;return{init(t){e=t,i.engine.trace({x:0,y:0,z:0},{x:1,y:0,z:0})},predict(t){let{origin:r,velocity:n}=t;return{origin:{x:r.x+n.x,y:r.y+n.y,z:r.z+n.z},velocity:n}},render(t){e=t.latest??e},shutdown(){e=void 0}}}return m(x);})();
2
+ //# sourceMappingURL=index.global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type {\n ClientRenderer,\n EngineImports,\n GameFrameResult,\n GameRenderSample,\n} from '@quake2ts/engine';\nimport type { Vec3 } from '@quake2ts/shared';\n\nexport interface ClientImports {\n readonly engine: EngineImports;\n}\n\nexport interface PredictionState {\n readonly origin: Vec3;\n readonly velocity: Vec3;\n}\n\nexport interface ClientExports extends ClientRenderer<PredictionState> {\n predict(next: PredictionState): PredictionState;\n}\n\nexport function createClient(imports: ClientImports): ClientExports {\n let latestFrame: GameFrameResult<PredictionState> | undefined;\n\n return {\n init(initial) {\n latestFrame = initial;\n void imports.engine.trace({ x: 0, y: 0, z: 0 }, { x: 1, y: 0, z: 0 });\n },\n predict(next: PredictionState): PredictionState {\n const { origin, velocity } = next;\n return {\n origin: {\n x: origin.x + velocity.x,\n y: origin.y + velocity.y,\n z: origin.z + velocity.z,\n },\n velocity,\n };\n },\n render(sample: GameRenderSample<PredictionState>): void {\n latestFrame = sample.latest ?? latestFrame;\n void sample;\n },\n shutdown() {\n latestFrame = undefined;\n },\n };\n}\n"],"mappings":"gcAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAqBO,SAASA,EAAaC,EAAuC,CAClE,IAAIC,EAEJ,MAAO,CACL,KAAKC,EAAS,CACZD,EAAcC,EACTF,EAAQ,OAAO,MAAM,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAG,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,CAAC,CACtE,EACA,QAAQG,EAAwC,CAC9C,GAAM,CAAE,OAAAC,EAAQ,SAAAC,CAAS,EAAIF,EAC7B,MAAO,CACL,OAAQ,CACN,EAAGC,EAAO,EAAIC,EAAS,EACvB,EAAGD,EAAO,EAAIC,EAAS,EACvB,EAAGD,EAAO,EAAIC,EAAS,CACzB,EACA,SAAAA,CACF,CACF,EACA,OAAOC,EAAiD,CACtDL,EAAcK,EAAO,QAAUL,CAEjC,EACA,UAAW,CACTA,EAAc,MAChB,CACF,CACF","names":["src_exports","__export","createClient","imports","latestFrame","initial","next","origin","velocity","sample"]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ createClient: () => createClient
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+ function createClient(imports) {
27
+ let latestFrame;
28
+ return {
29
+ init(initial) {
30
+ latestFrame = initial;
31
+ void imports.engine.trace({ x: 0, y: 0, z: 0 }, { x: 1, y: 0, z: 0 });
32
+ },
33
+ predict(next) {
34
+ const { origin, velocity } = next;
35
+ return {
36
+ origin: {
37
+ x: origin.x + velocity.x,
38
+ y: origin.y + velocity.y,
39
+ z: origin.z + velocity.z
40
+ },
41
+ velocity
42
+ };
43
+ },
44
+ render(sample) {
45
+ latestFrame = sample.latest ?? latestFrame;
46
+ void sample;
47
+ },
48
+ shutdown() {
49
+ latestFrame = void 0;
50
+ }
51
+ };
52
+ }
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ createClient
56
+ });
57
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type {\n ClientRenderer,\n EngineImports,\n GameFrameResult,\n GameRenderSample,\n} from '@quake2ts/engine';\nimport type { Vec3 } from '@quake2ts/shared';\n\nexport interface ClientImports {\n readonly engine: EngineImports;\n}\n\nexport interface PredictionState {\n readonly origin: Vec3;\n readonly velocity: Vec3;\n}\n\nexport interface ClientExports extends ClientRenderer<PredictionState> {\n predict(next: PredictionState): PredictionState;\n}\n\nexport function createClient(imports: ClientImports): ClientExports {\n let latestFrame: GameFrameResult<PredictionState> | undefined;\n\n return {\n init(initial) {\n latestFrame = initial;\n void imports.engine.trace({ x: 0, y: 0, z: 0 }, { x: 1, y: 0, z: 0 });\n },\n predict(next: PredictionState): PredictionState {\n const { origin, velocity } = next;\n return {\n origin: {\n x: origin.x + velocity.x,\n y: origin.y + velocity.y,\n z: origin.z + velocity.z,\n },\n velocity,\n };\n },\n render(sample: GameRenderSample<PredictionState>): void {\n latestFrame = sample.latest ?? latestFrame;\n void sample;\n },\n shutdown() {\n latestFrame = undefined;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBO,SAAS,aAAa,SAAuC;AAClE,MAAI;AAEJ,SAAO;AAAA,IACL,KAAK,SAAS;AACZ,oBAAc;AACd,WAAK,QAAQ,OAAO,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,IACtE;AAAA,IACA,QAAQ,MAAwC;AAC9C,YAAM,EAAE,QAAQ,SAAS,IAAI;AAC7B,aAAO;AAAA,QACL,QAAQ;AAAA,UACN,GAAG,OAAO,IAAI,SAAS;AAAA,UACvB,GAAG,OAAO,IAAI,SAAS;AAAA,UACvB,GAAG,OAAO,IAAI,SAAS;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,QAAiD;AACtD,oBAAc,OAAO,UAAU;AAC/B,WAAK;AAAA,IACP;AAAA,IACA,WAAW;AACT,oBAAc;AAAA,IAChB;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,32 @@
1
+ // src/index.ts
2
+ function createClient(imports) {
3
+ let latestFrame;
4
+ return {
5
+ init(initial) {
6
+ latestFrame = initial;
7
+ void imports.engine.trace({ x: 0, y: 0, z: 0 }, { x: 1, y: 0, z: 0 });
8
+ },
9
+ predict(next) {
10
+ const { origin, velocity } = next;
11
+ return {
12
+ origin: {
13
+ x: origin.x + velocity.x,
14
+ y: origin.y + velocity.y,
15
+ z: origin.z + velocity.z
16
+ },
17
+ velocity
18
+ };
19
+ },
20
+ render(sample) {
21
+ latestFrame = sample.latest ?? latestFrame;
22
+ void sample;
23
+ },
24
+ shutdown() {
25
+ latestFrame = void 0;
26
+ }
27
+ };
28
+ }
29
+ export {
30
+ createClient
31
+ };
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type {\n ClientRenderer,\n EngineImports,\n GameFrameResult,\n GameRenderSample,\n} from '@quake2ts/engine';\nimport type { Vec3 } from '@quake2ts/shared';\n\nexport interface ClientImports {\n readonly engine: EngineImports;\n}\n\nexport interface PredictionState {\n readonly origin: Vec3;\n readonly velocity: Vec3;\n}\n\nexport interface ClientExports extends ClientRenderer<PredictionState> {\n predict(next: PredictionState): PredictionState;\n}\n\nexport function createClient(imports: ClientImports): ClientExports {\n let latestFrame: GameFrameResult<PredictionState> | undefined;\n\n return {\n init(initial) {\n latestFrame = initial;\n void imports.engine.trace({ x: 0, y: 0, z: 0 }, { x: 1, y: 0, z: 0 });\n },\n predict(next: PredictionState): PredictionState {\n const { origin, velocity } = next;\n return {\n origin: {\n x: origin.x + velocity.x,\n y: origin.y + velocity.y,\n z: origin.z + velocity.z,\n },\n velocity,\n };\n },\n render(sample: GameRenderSample<PredictionState>): void {\n latestFrame = sample.latest ?? latestFrame;\n void sample;\n },\n shutdown() {\n latestFrame = undefined;\n },\n };\n}\n"],"mappings":";AAqBO,SAAS,aAAa,SAAuC;AAClE,MAAI;AAEJ,SAAO;AAAA,IACL,KAAK,SAAS;AACZ,oBAAc;AACd,WAAK,QAAQ,OAAO,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,IACtE;AAAA,IACA,QAAQ,MAAwC;AAC9C,YAAM,EAAE,QAAQ,SAAS,IAAI;AAC7B,aAAO;AAAA,QACL,QAAQ;AAAA,UACN,GAAG,OAAO,IAAI,SAAS;AAAA,UACvB,GAAG,OAAO,IAAI,SAAS;AAAA,UACvB,GAAG,OAAO,IAAI,SAAS;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,QAAiD;AACtD,oBAAc,OAAO,UAAU;AAC/B,WAAK;AAAA,IACP;AAAA,IACA,WAAW;AACT,oBAAc;AAAA,IAChB;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../shared/dist/types/math/vec3.d.ts","../../shared/dist/types/math/angles.d.ts","../../shared/dist/types/math/color.d.ts","../../shared/dist/types/math/random.d.ts","../../shared/dist/types/bsp/contents.d.ts","../../shared/dist/types/bsp/collision.d.ts","../../shared/dist/types/protocol/cvar.d.ts","../../shared/dist/types/protocol/configstrings.d.ts","../../shared/dist/types/pmove/types.d.ts","../../shared/dist/types/pmove/constants.d.ts","../../shared/dist/types/pmove/pmove.d.ts","../../shared/dist/types/pmove/slide.d.ts","../../shared/dist/types/pmove/stuck.d.ts","../../shared/dist/types/pmove/currents.d.ts","../../shared/dist/types/pmove/fly.d.ts","../../shared/dist/types/pmove/water.d.ts","../../shared/dist/types/pmove/jump.d.ts","../../shared/dist/types/pmove/dimensions.d.ts","../../shared/dist/types/pmove/duck.d.ts","../../shared/dist/types/pmove/categorize.d.ts","../../shared/dist/types/pmove/move.d.ts","../../shared/dist/types/pmove/special.d.ts","../../shared/dist/types/pmove/snap.d.ts","../../shared/dist/types/pmove/view.d.ts","../../shared/dist/types/index.d.ts","../../engine/dist/types/loop.d.ts","../../engine/dist/types/host.d.ts","../../engine/dist/types/configstrings.d.ts","../../engine/dist/types/runtime.d.ts","../../engine/dist/types/cvars.d.ts","../../engine/dist/types/assets/pak.d.ts","../../engine/dist/types/assets/vfs.d.ts","../../engine/dist/types/assets/ingestion.d.ts","../../engine/dist/types/assets/cache.d.ts","../../engine/dist/types/assets/browseringestion.d.ts","../../engine/dist/types/assets/md2.d.ts","../../engine/dist/types/render/context.d.ts","../../engine/dist/types/render/shaderprogram.d.ts","../../engine/dist/types/render/resources.d.ts","../../engine/dist/types/render/bsp.d.ts","../../engine/dist/types/index.d.ts","../src/index.ts"],"fileIdsList":[[70,86],[77,78],[76,77],[70,77],[76],[70],[71],[70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85],[70,84],[72,86],[46],[46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69],[46,50,54,55],[46,55],[46,50,54,55,63],[46,54,57],[46,54,55,57],[46,54],[46,54,55],[46,50],[46,47,55]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d49d5bc95370fd2ed354d3c9182b058203fff1c1b4970b9e16b2e6f5c9281dca","impliedFormat":99},{"version":"18e47b7615118f25f0c09d8a234177c0b48eaccd7ee81f7a7e755ac336790114","impliedFormat":99},{"version":"0a483508d8a864726671af5c9b2d7c78e6c12e1289bef65db7df48930113bd04","impliedFormat":99},{"version":"261013ab3c7adc50bd7be46881789753a25870ec5ef2f265f5aee15645f7ff82","impliedFormat":99},{"version":"db68eb9983dfee06a8f79ac7e0ff1d2f8b64adf8ddbd0d8340dfe075dfeeb62c","impliedFormat":99},{"version":"4b6aa0a5d7350ec05ef791934e4223b754d0062044a3d2e36e9d00e85caf8439","impliedFormat":99},{"version":"5791d843929b2794e757aac45a4791860a4542a163ef0fa062bff83cc4b2783d","impliedFormat":99},{"version":"c4df6bbc7e47590510a0d1874dbc655720cbff06c9cc1dc5f3b453d2efed5181","impliedFormat":99},{"version":"0663baa12462be4526fc70d40a0512d7c901546d3d2470571a4cecc2403b06b9","impliedFormat":99},{"version":"86a09575cc4f08dffb7d7fa70b00d855e7901da0247d2689ee2b5d68acd72300","impliedFormat":99},{"version":"966b5425870531e51598f864e5da23083ca0f2bc32055c451eff33b59ab1e42b","impliedFormat":99},{"version":"c003de6a72360c6dd4cafb689bd18b196910ec4a2ee299e6b6e7b30b7c976727","impliedFormat":99},{"version":"b74d298d1f2e7dd4b13653cd705f54dfeb0225192ce6adb419d118dc61db51ed","impliedFormat":99},{"version":"28faf4f79dfdb949104d0d954fed83a24c9cdfe98e9799c33e214d1fef29b1bd","impliedFormat":99},{"version":"210e8a5d5576c2902129050e62e4cc7acddd41b4e8be38552639c6d21ff3cee3","impliedFormat":99},{"version":"22e2e64285f7aaef481a744debc998006f8cf463a870cf28f281ee789195e9fb","impliedFormat":99},{"version":"76a9a8b405f17d7ff73b3cb22e7e6fc2832069f5d00dccf927a591bf4996bb01","impliedFormat":99},{"version":"a4e0607cf35a6c1503665e283169f069032fe5acb0f69d4f5ab7d6b328bd3641","impliedFormat":99},{"version":"d3ed5cdf9024e5b707499b95b2f3f36810f3b790e015cc53541ab97dad353ea6","impliedFormat":99},{"version":"f943bb60549649ccb78acc8105de10c1fc77bc4681dfaedfe5330ce6e87a1d9f","impliedFormat":99},{"version":"85c25880de81ca2db6235c99260550f40f2df78dab87b89751e43bfaaa2eae1d","impliedFormat":99},{"version":"df60f25f487e9772ebf83da13db422c038021a2ecdde25a51506e3cd5f5da5a4","impliedFormat":99},{"version":"44f7b5e80a9d42c45264f4c4eb4e300c5a44d9517b0d47aec04a14265a84969d","impliedFormat":99},{"version":"35526be13abff0b287aaec4d8af58a71c77fea57ec9bd1861aaa457284e326dd","impliedFormat":99},{"version":"20eba37a78e38989c7873bf9453830da9ed67bbdc852e5cc3e3feac932f90985","impliedFormat":99},{"version":"f326295459bc2e37b4aee6ffaf4dfb140c571eb4692655b50eac4808bb2432c7","impliedFormat":99},{"version":"9d714f1c2ceccba5c29538f4ab75570091662a34bf3044448530e084c96cd75e","impliedFormat":99},{"version":"e22553dab6886f0e7e9cb7057af86c8fd693e36fb4d4b5822f68c84debdea37b","impliedFormat":99},{"version":"88882f29c2529b52230367eaf39866179365b2f805a49acdcd4b0ef7209b3b97","impliedFormat":99},{"version":"f8785dec02fd9af6511c4279183f3e3055b049972c8acaa16271a2806737236f","impliedFormat":99},{"version":"2bce3f6aa4602276fc00d0d84794588d1beae64c54f4700b37cd172eb724a47a","impliedFormat":99},{"version":"65b7c9ff881359f7ec077cbae8eb3f96fde174b4b97feb475d05b88fe5bb082b","impliedFormat":99},{"version":"b010efadf587c06c087eb1529f0ed829b6620f5745455033ccdb947a44f2142c","impliedFormat":99},{"version":"9e1336e60894b133fe44298c27d688116e57583f634b5c6c3611a061799cc6f7","impliedFormat":99},{"version":"130fc01380b54d83d3a933a7a2345f59bdcb125ed61579051f4a5f86225c9c6b","impliedFormat":99},{"version":"45fa42fe133060ed136c2271960fb7d6b6d93bd1d495e9e6d767275506fe0243","impliedFormat":99},{"version":"532177b09dd61d4c6549ca8b76394d40ea544e398c4aea8d4a0e736044e947e7","impliedFormat":99},{"version":"bca4895c207f65febbd6c313dc33d9a457246cab60c5fdedfe7f6aca2d438a31","impliedFormat":99},{"version":"fc63e8aca86c2e6d2ded7aec5a7740d1bb33088bfccf00932fe117b6b4ff7544","impliedFormat":99},{"version":"d5eab14c127bc83eeec90d5fa5e5e7d52e677095f4e4fc9a0f0612f5f87798fa","impliedFormat":99},{"version":"584295d72da288f80035ec3038e2cec268e98daa9d51385f844c52a3a4c6f478","impliedFormat":99},{"version":"2cb4343bf8f710ebb3f5df5cb5dc2e400befa22723b6f7841e3e7849713ee133","signature":"e82ddad11afa4e9b44af79114eb8629be01a91a4c175d782710da1381c4fece1","impliedFormat":99}],"root":[87],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"module":199,"outDir":"./types","rootDir":"../src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[87,1],[80,2],[78,3],[81,4],[77,5],[75,6],[72,7],[86,8],[85,9],[74,10],[51,11],[70,12],[47,11],[65,13],[59,13],[63,14],[64,15],[60,16],[62,14],[66,17],[56,18],[57,18],[68,18],[67,19],[58,18],[54,20],[69,21],[61,13]],"latestChangedDtsFile":"./types/index.d.ts","version":"5.9.3"}
@@ -0,0 +1,14 @@
1
+ import type { ClientRenderer, EngineImports } from '@quake2ts/engine';
2
+ import type { Vec3 } from '@quake2ts/shared';
3
+ export interface ClientImports {
4
+ readonly engine: EngineImports;
5
+ }
6
+ export interface PredictionState {
7
+ readonly origin: Vec3;
8
+ readonly velocity: Vec3;
9
+ }
10
+ export interface ClientExports extends ClientRenderer<PredictionState> {
11
+ predict(next: PredictionState): PredictionState;
12
+ }
13
+ export declare function createClient(imports: ClientImports): ClientExports;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,eAAe,CAAC;IACpE,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC;CACjD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CA2BlE"}
@@ -0,0 +1,2 @@
1
+ "use strict";var Quake2Engine=(()=>{var $=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Fe=Object.prototype.hasOwnProperty;var Pe=(t,e)=>{for(var r in e)$(t,r,{get:e[r],enumerable:!0})},ke=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ce(e))!Fe.call(t,o)&&o!==r&&$(t,o,{get:()=>e[o],enumerable:!(n=Me(e,o))||n.enumerable});return t};var De=t=>ke($({},"__esModule",{value:!0}),t);var Et={};Pe(Et,{BSP_VERTEX_LAYOUT:()=>ce,ConfigStringRegistry:()=>U,Cvar:()=>F,CvarRegistry:()=>V,EngineHost:()=>T,EngineRuntime:()=>C,FixedTimestepLoop:()=>E,Framebuffer:()=>K,IndexBuffer:()=>L,LruCache:()=>X,Md2Loader:()=>Y,Md2ParseError:()=>y,PakArchive:()=>b,PakIngestionError:()=>w,PakParseError:()=>h,ShaderProgram:()=>k,Texture2D:()=>_,VertexArray:()=>R,VertexBuffer:()=>A,VirtualFileSystem:()=>W,buildBspGeometry:()=>Re,calculatePakChecksum:()=>ge,createEngine:()=>St,createEngineRuntime:()=>he,createProgramFromSources:()=>Le,createWebGLContext:()=>be,filesToPakSources:()=>ae,groupMd2Animations:()=>Te,ingestPakFiles:()=>ve,ingestPaks:()=>H,parseMd2:()=>se,wireDropTarget:()=>ze,wireFileInput:()=>Se});var Ne=()=>typeof performance<"u"?performance.now():Date.now(),Ie=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},E=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Ne,schedule:r.schedule??Ie}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var T=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e)};this.renderClient=e=>{this.client&&this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame})};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new E({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var Lt=Math.PI/180;var Rt=Math.PI/180,_t=180/Math.PI;var v=1,z=2;var Z=8,q=16,Oe=32;var Ge=16384;var N=65536,de=1<<17,Be=1<<18,Ue=1<<19,Ve=1<<20,We=1<<21,He=1<<22,Xe=1<<23,Mt=1<<24,I=1<<25,Ye=1<<26,Ct=1<<27,Ft=1<<28,Pt=1<<29,O=1<<30,kt=1<<31;var fe=0;var Dt=1<<25,Nt=1<<28,It=1<<29,Ot=1<<30,Gt=1<<31;var Bt=v|z,Ut=v|N|z|I|O,Vt=v|N|z,Wt=v|de|z|I|O,Ht=Oe|Z|q,Xt=v|q|Z,Ke=v|I|O|z|Ye,Yt=Be|Ue|Ve|We|He|Xe,Kt=v|Z|q|I|O,Jt=v|N|z,$t=v|z,jt=v|N|z|de,Zt=Ke|Ge;var G=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(G||{});var B=256;var Q=256,ee=8192,te=2048,re=512,ne=256,oe=B*2,ie=256,j=32,M=96;var m=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+ee]="Sounds",t[t.Images=t.Sounds+te]="Images",t[t.Lights=t.Images+re]="Lights",t[t.ShadowLights=t.Lights+Q]="ShadowLights",t[t.Items=t.ShadowLights+ie]="Items",t[t.PlayerSkins=t.Items+ne]="PlayerSkins",t[t.General=t.PlayerSkins+B]="General",t[t.WheelWeapons=t.General+oe]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+j]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+j]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+j]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(m||{}),me=m.MaxConfigStrings;function ye(t){return t>=5&&t<59?M*(59-t):t>=m.General&&t<m.WheelWeapons?M*(m.MaxConfigStrings-t):M}function Je(t){if(t<0||t>=m.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${m.MaxConfigStrings-1})`)}function pe(t,e){let r=ye(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${M} chars per slot`)}var U=class{constructor(){this.values=new Map;this.modelCursor=m.Models;this.soundCursor=m.Sounds;this.imageCursor=m.Images;this.lightCursor=m.Lights;this.shadowLightCursor=m.ShadowLights;this.itemCursor=m.Items;this.playerSkinCursor=m.PlayerSkins;this.generalCursor=m.General}set(e,r){return Je(e),pe(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(me).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,m.Models,ee,"modelCursor")}soundIndex(e){return this.register(e,m.Sounds,te,"soundCursor")}imageIndex(e){return this.register(e,m.Images,re,"imageCursor")}lightIndex(e){return this.register(e,m.Lights,Q,"lightCursor")}shadowLightIndex(e){return this.register(e,m.ShadowLights,ie,"shadowLightCursor")}itemIndex(e){return this.register(e,m.Items,ne,"itemCursor")}playerSkinIndex(e){return this.register(e,m.PlayerSkins,B,"playerSkinCursor")}generalIndex(e){return this.register(e,m.General,oe,"generalCursor")}register(e,r,n,o){for(let s=r;s<r+n;s+=1)if(this.values.get(s)===e)return s;let i=this[o],a=r+n;if(i>=a)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return pe(i,e),this.values.set(i,e),this[o]=i+1,i}};var C=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function he(t,e,r,n){return new C(t,new T(e,r,n))}var F=class{constructor({name:e,defaultValue:r,description:n,flags:o=G.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&G.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},V=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new F(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var $e="PACK";function je(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function S(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Ze(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var qe=Ze();function xe(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=qe[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var h=class extends Error{},b=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new h("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==$e)throw new h(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),a=n.getInt32(8,!0);if(i<12)throw new h(`Invalid directory offset: ${i}`);if(a<=0||a%64!==0)throw new h(`Invalid directory length: ${a}`);if(i+a>r.byteLength)throw new h("Directory exceeds buffer length");let l=a/64,u=[],c=new Map;for(let d=0;d<l;d+=1){let f=i+d*64,p=je(n,f,56),x=S(p),g=n.getInt32(f+56,!0),D=n.getInt32(f+60,!0);if(g<0||D<0||g+D>r.byteLength)throw new h(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${g}, length=${D})`);if(!x)throw new h(`Entry ${d} has an empty name`);let _e={name:x,offset:g,length:D};c.set(x,_e)}return u.push(...c.values()),new t(e,r,u,xe(new Uint8Array(r)))}getEntry(e){return this.entries.get(S(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new h(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function ge(t){return xe(new Uint8Array(t))}var W=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=S(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(S(e))}stat(e){let r=this.files.get(S(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(S(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=S(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let a of this.files.values()){if(r&&!a.entry.name.startsWith(i))continue;let s=r?a.entry.name.slice(i.length):a.entry.name,l=s.indexOf("/");l===-1?n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name}):o.add(s.slice(0,l))}return n.sort((a,s)=>a.path.localeCompare(s.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var w=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function Qe(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:s,value:l}=await r.read();if(s)break;if(!l)continue;let u=l;n.push(u),o+=u.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),a=0;for(let s of n)i.set(s,a),a+=s.byteLength;return i.buffer}throw new w("blob",new Error("Unsupported Blob type"))}async function et(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Qe(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function H(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=[];for(let i of e)try{let a=await et(i,n.onProgress),s=b.fromArrayBuffer(i.name,a);t.mountPak(s),n.onProgress?.({file:i.name,loadedBytes:a.byteLength,totalBytes:a.byteLength,state:"parsed"}),o.push({archive:s,mounted:!0})}catch(a){if(n.onProgress?.({file:i.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(i.name,a),n.stopOnError)throw new w(i.name,a)}return o}var X=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function tt(t){return Array.isArray(t)?t:Array.from(t)}function ae(t){return tt(t).map(e=>({name:e.name,data:e}))}async function ve(t,e,r){let n=ae(e);return H(t,n,r??{})}function ze(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Se(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var rt=844121161,nt=8,Ee=68,ot=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],y=class extends Error{},Y=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),se(n.buffer)}};function Ae(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function P(t,e,r,n){if(r!==0&&(e<Ee||e+r>t.byteLength))throw new y(`${n} section is out of bounds`)}function it(t){if(t.byteLength<Ee)throw new y("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==rt)throw new y(`Invalid MD2 ident: ${r}`);if(n!==nt)throw new y(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new y(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new y("MD2 offset_end exceeds buffer length");return o}function at(t,e){let r=e.numSkins*64;P(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ae(n,i*64,64)});return o}function st(t,e){let r=e.numTexCoords*4;P(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let a=i*4;o.push({s:n.getInt16(a,!0),t:n.getInt16(a+2,!0)})}return o}function lt(t,e){let r=e.numTriangles*12;P(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let a=i*12,s=[n.getUint16(a,!0),n.getUint16(a+2,!0),n.getUint16(a+4,!0)],l=[n.getUint16(a+6,!0),n.getUint16(a+8,!0),n.getUint16(a+10,!0)];if(s.some(u=>u>=e.numVertices)||l.some(u=>u>=e.numTexCoords))throw new y("Triangle references out of range vertex or texcoord");o.push({vertexIndices:s,texCoordIndices:l})}return o}function ut(t,e){let r=e.numFrames*e.frameSize;P(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,a=new DataView(t,i,e.frameSize),s={x:a.getFloat32(0,!0),y:a.getFloat32(4,!0),z:a.getFloat32(8,!0)},l={x:a.getFloat32(12,!0),y:a.getFloat32(16,!0),z:a.getFloat32(20,!0)},u=Ae(a,24,16),c=[];for(let d=0;d<e.numVertices;d+=1){let f=40+d*4,p={x:a.getUint8(f)*s.x+l.x,y:a.getUint8(f+1)*s.y+l.y,z:a.getUint8(f+2)*s.z+l.z},x=a.getUint8(f+3),g=ot[x];if(!g)throw new y(`Invalid normal index ${x} in frame ${u}`);c.push({position:p,normalIndex:x,normal:g})}n.push({name:u,vertices:c})}return n}function ct(t,e){let r=e.numGlCommands*4;if(P(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new y("GL command list ended unexpectedly");let a=n.getInt32(i,!0);if(i+=4,a===0)break;let s=Math.abs(a),l=[],u=s*12;if(i+u>r)throw new y("GL command vertex block exceeds buffer");for(let c=0;c<s;c+=1){let d=n.getFloat32(i,!0),f=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new y("GL command references invalid vertex index");l.push({s:d,t:f,vertexIndex:p})}o.push({mode:a>0?"strip":"fan",vertices:l})}if(i!==r)throw new y("GL command list did not consume expected data");return o}function se(t){let e=it(t),r=at(t,e),n=st(t,e),o=lt(t,e),i=ut(t,e),a=ct(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:a}}function Te(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}function dt(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function ft(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function be(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");dt(i);let a=new Map;ft(i,n,o,a);let s=!1,l=new Set,u=new Set,c=f=>{s=!0,f.preventDefault();for(let p of l)p()},d=()=>{s=!1;for(let f of u)f()};return t.addEventListener("webglcontextlost",c),t.addEventListener("webglcontextrestored",d),{gl:i,extensions:a,isLost:()=>s,onLost(f){return l.add(f),()=>l.delete(f)},onRestored(f){return u.add(f),()=>u.delete(f)},dispose(){t.removeEventListener("webglcontextlost",c),t.removeEventListener("webglcontextrestored",d),l.clear(),u.clear(),a.clear()}}}function we(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function mt(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[a,s]of Object.entries(n))t.bindAttribLocation(o,s,a);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let a=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(a)}return o}var k=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=we(e,e.VERTEX_SHADER,r.vertex),i=we(e,e.FRAGMENT_SHADER,r.fragment);try{let a=mt(e,o,i,n);return new t(e,a)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Le(t,e,r){return k.create(t,e,r)}var A=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},L=class extends A{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},R=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},_=class{constructor(e,r=e.TEXTURE_2D){this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,r,n,o,i,a,s,l){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,a,s,l)}dispose(){this.gl.deleteTexture(this.texture)}},K=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var ue=4,le=7*ue,ce=[{index:0,size:3,type:5126,stride:le,offset:0},{index:1,size:2,type:5126,stride:le,offset:3*ue},{index:2,size:2,type:5126,stride:le,offset:5*ue}];function yt(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function pt(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function ht(t,e,r){let n=pt(r),o=t.width*4,i=e.x+t.padding,a=e.y+t.padding,s=0;for(let l=0;l<r.height;l++){let u=(a+l)*o+i*4;for(let c=0;c<r.width;c++){let d=u+c*4;t.data[d]=r.samples[s],t.data[d+1]=r.samples[s+1],t.data[d+2]=r.samples[s+2],t.data[d+3]=n===4?r.samples[s+3]:255,s+=n}}}function xt(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let s of t){if(s.cursorX+n>s.width&&(s.cursorX=0,s.cursorY+=s.rowHeight+r.lightmapPadding,s.rowHeight=0),s.cursorY+o>s.height)continue;let l={atlasIndex:t.indexOf(s),x:s.cursorX,y:s.cursorY,width:e.width,height:e.height};return s.cursorX+=n+r.lightmapPadding,s.rowHeight=Math.max(s.rowHeight,o),{placement:l,atlas:s}}let i=yt(r.atlasSize,r.lightmapPadding);t.push(i);let a={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:a,atlas:i}}function J(t){return t instanceof Float32Array?t:new Float32Array(t)}function gt(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function vt(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function zt(t,e){let r=J(t.vertices),n=J(t.textureCoords),o=e?vt(J(t.lightmapCoords??t.textureCoords),e):J(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let a=new Float32Array(i*7);for(let s=0;s<i;s++){let l=s*3,u=s*2,c=s*7;a[c]=r[l],a[c+1]=r[l+1],a[c+2]=r[l+2],a[c+3]=n[u],a[c+4]=n[u+1],a[c+5]=o[u],a[c+6]=o[u+1]}return a}function Re(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((l,u)=>{if(!l.lightmap)return;let{placement:c,atlas:d}=xt(o,l.lightmap,n);ht(d,c,l.lightmap),i.set(u,{atlasIndex:c.atlasIndex,offset:[(c.x+n.lightmapPadding)/n.atlasSize,(c.y+n.lightmapPadding)/n.atlasSize],scale:[c.width/n.atlasSize,c.height/n.atlasSize]})});let a=o.map(l=>{let u=new _(t);return u.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),u.uploadImage(0,t.RGBA,l.width,l.height,0,t.RGBA,t.UNSIGNED_BYTE,l.data),{texture:u,width:l.width,height:l.height,pixels:l.data}});return{surfaces:e.map((l,u)=>{let c=i.get(u),d=zt(l,c),f=gt(l.indices,d.length/7),p=new A(t,t.STATIC_DRAW,t.ARRAY_BUFFER);p.upload(d);let x=new L(t,t.STATIC_DRAW);x.upload(f);let g=new R(t);return g.configureAttributes(ce,p),{vao:g,vertexBuffer:p,indexBuffer:x,indexCount:f.length,texture:l.texture,surfaceFlags:l.surfaceFlags??fe,lightmap:c,vertexData:d,indexData:f}}),lightmaps:a}}function St(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new E(e,r)}}}return De(Et);})();
2
+ //# sourceMappingURL=index.global.js.map